summaryrefslogtreecommitdiffstats
path: root/JavaScriptCore
diff options
context:
space:
mode:
Diffstat (limited to 'JavaScriptCore')
-rw-r--r--JavaScriptCore/API/JSCallbackFunction.cpp12
-rw-r--r--JavaScriptCore/API/JSCallbackFunction.h2
-rw-r--r--JavaScriptCore/API/JSCallbackObject.h2
-rw-r--r--JavaScriptCore/API/JSCallbackObjectFunctions.h13
-rw-r--r--JavaScriptCore/API/JSObjectRef.cpp2
-rw-r--r--JavaScriptCore/API/tests/testapi.c60
-rw-r--r--JavaScriptCore/ChangeLog28384
-rw-r--r--JavaScriptCore/ChangeLog-2010-05-2428211
-rw-r--r--JavaScriptCore/GNUmakefile.am8
-rw-r--r--JavaScriptCore/JavaScriptCore.exp7
-rw-r--r--JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def7
-rw-r--r--JavaScriptCore/assembler/MacroAssemblerMIPS.h2
-rw-r--r--JavaScriptCore/bytecode/CodeBlock.cpp17
-rw-r--r--JavaScriptCore/bytecode/CodeBlock.h2
-rw-r--r--JavaScriptCore/bytecode/Opcode.h4
-rw-r--r--JavaScriptCore/bytecompiler/BytecodeGenerator.cpp32
-rw-r--r--JavaScriptCore/bytecompiler/BytecodeGenerator.h4
-rw-r--r--JavaScriptCore/debugger/DebuggerCallFrame.cpp25
-rw-r--r--JavaScriptCore/interpreter/CallFrame.cpp5
-rw-r--r--JavaScriptCore/interpreter/CallFrame.h33
-rw-r--r--JavaScriptCore/interpreter/Interpreter.cpp199
-rw-r--r--JavaScriptCore/interpreter/Interpreter.h2
-rw-r--r--JavaScriptCore/interpreter/Register.h22
-rw-r--r--JavaScriptCore/jit/JIT.cpp38
-rw-r--r--JavaScriptCore/jit/JIT.h27
-rw-r--r--JavaScriptCore/jit/JITCall.cpp112
-rw-r--r--JavaScriptCore/jit/JITCall32_64.cpp102
-rw-r--r--JavaScriptCore/jit/JITInlineMethods.h67
-rw-r--r--JavaScriptCore/jit/JITOpcodes.cpp487
-rw-r--r--JavaScriptCore/jit/JITOpcodes32_64.cpp647
-rw-r--r--JavaScriptCore/jit/JITStubs.cpp218
-rw-r--r--JavaScriptCore/jit/JITStubs.h25
-rw-r--r--JavaScriptCore/jsc.cpp68
-rw-r--r--JavaScriptCore/runtime/ArgList.h7
-rw-r--r--JavaScriptCore/runtime/Arguments.h10
-rw-r--r--JavaScriptCore/runtime/ArrayConstructor.cpp9
-rw-r--r--JavaScriptCore/runtime/ArrayPrototype.cpp197
-rw-r--r--JavaScriptCore/runtime/BooleanConstructor.cpp4
-rw-r--r--JavaScriptCore/runtime/BooleanPrototype.cpp10
-rw-r--r--JavaScriptCore/runtime/CallData.cpp9
-rw-r--r--JavaScriptCore/runtime/CallData.h2
-rw-r--r--JavaScriptCore/runtime/Collector.cpp3
-rw-r--r--JavaScriptCore/runtime/Collector.h7
-rw-r--r--JavaScriptCore/runtime/ConstructData.cpp21
-rw-r--r--JavaScriptCore/runtime/DateConstructor.cpp46
-rw-r--r--JavaScriptCore/runtime/DatePrototype.cpp306
-rw-r--r--JavaScriptCore/runtime/ErrorConstructor.cpp5
-rw-r--r--JavaScriptCore/runtime/ErrorPrototype.cpp6
-rw-r--r--JavaScriptCore/runtime/ExceptionHelpers.cpp6
-rw-r--r--JavaScriptCore/runtime/Executable.cpp4
-rw-r--r--JavaScriptCore/runtime/Executable.h32
-rw-r--r--JavaScriptCore/runtime/FunctionConstructor.cpp3
-rw-r--r--JavaScriptCore/runtime/FunctionPrototype.cpp24
-rw-r--r--JavaScriptCore/runtime/JSArray.cpp2
-rw-r--r--JavaScriptCore/runtime/JSFunction.cpp43
-rw-r--r--JavaScriptCore/runtime/JSFunction.h7
-rw-r--r--JavaScriptCore/runtime/JSGlobalObject.cpp2
-rw-r--r--JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp69
-rw-r--r--JavaScriptCore/runtime/JSGlobalObjectFunctions.h24
-rw-r--r--JavaScriptCore/runtime/JSONObject.cpp24
-rw-r--r--JavaScriptCore/runtime/JSObject.cpp14
-rw-r--r--JavaScriptCore/runtime/JSObject.h14
-rw-r--r--JavaScriptCore/runtime/JSString.h2
-rw-r--r--JavaScriptCore/runtime/Lookup.cpp2
-rw-r--r--JavaScriptCore/runtime/Lookup.h2
-rw-r--r--JavaScriptCore/runtime/MathObject.cpp112
-rw-r--r--JavaScriptCore/runtime/NativeErrorConstructor.cpp5
-rw-r--r--JavaScriptCore/runtime/NumberConstructor.cpp4
-rw-r--r--JavaScriptCore/runtime/NumberPrototype.cpp40
-rw-r--r--JavaScriptCore/runtime/ObjectConstructor.cpp73
-rw-r--r--JavaScriptCore/runtime/ObjectPrototype.cpp70
-rw-r--r--JavaScriptCore/runtime/ObjectPrototype.h2
-rw-r--r--JavaScriptCore/runtime/Operations.h10
-rw-r--r--JavaScriptCore/runtime/PropertySlot.cpp6
-rw-r--r--JavaScriptCore/runtime/RegExpConstructor.cpp3
-rw-r--r--JavaScriptCore/runtime/RegExpObject.cpp16
-rw-r--r--JavaScriptCore/runtime/RegExpObject.h6
-rw-r--r--JavaScriptCore/runtime/RegExpPrototype.cpp30
-rw-r--r--JavaScriptCore/runtime/StringConstructor.cpp22
-rw-r--r--JavaScriptCore/runtime/StringPrototype.cpp216
-rw-r--r--JavaScriptCore/runtime/UString.cpp42
-rw-r--r--JavaScriptCore/runtime/UString.h5
-rw-r--r--JavaScriptCore/wscript9
-rw-r--r--JavaScriptCore/wtf/OwnArrayPtr.h11
-rw-r--r--JavaScriptCore/wtf/Platform.h2
-rw-r--r--JavaScriptCore/wtf/StringExtras.h2
-rw-r--r--JavaScriptCore/wtf/dtoa.cpp283
-rw-r--r--JavaScriptCore/wtf/dtoa.h20
-rw-r--r--JavaScriptCore/wtf/text/StringImpl.cpp23
-rw-r--r--JavaScriptCore/wtf/text/StringImpl.h2
-rw-r--r--JavaScriptCore/wtf/text/WTFString.cpp5
-rw-r--r--JavaScriptCore/wtf/text/WTFString.h2
-rw-r--r--JavaScriptCore/yarr/RegexCompiler.cpp5
-rw-r--r--JavaScriptCore/yarr/RegexJIT.cpp109
-rw-r--r--JavaScriptCore/yarr/RegexPattern.h6
95 files changed, 30677 insertions, 30226 deletions
diff --git a/JavaScriptCore/API/JSCallbackFunction.cpp b/JavaScriptCore/API/JSCallbackFunction.cpp
index 4953010..9db9983 100644
--- a/JavaScriptCore/API/JSCallbackFunction.cpp
+++ b/JavaScriptCore/API/JSCallbackFunction.cpp
@@ -47,22 +47,22 @@ JSCallbackFunction::JSCallbackFunction(ExecState* exec, JSGlobalObject* globalOb
{
}
-JSValue JSCallbackFunction::call(ExecState* exec, JSObject* functionObject, JSValue thisValue, const ArgList& args)
+JSValue JSCallbackFunction::call(ExecState* exec)
{
JSContextRef execRef = toRef(exec);
- JSObjectRef functionRef = toRef(functionObject);
- JSObjectRef thisObjRef = toRef(thisValue.toThisObject(exec));
+ JSObjectRef functionRef = toRef(exec->callee());
+ JSObjectRef thisObjRef = toRef(exec->hostThisValue().toThisObject(exec));
- int argumentCount = static_cast<int>(args.size());
+ int argumentCount = static_cast<int>(exec->argumentCount());
Vector<JSValueRef, 16> arguments(argumentCount);
for (int i = 0; i < argumentCount; i++)
- arguments[i] = toRef(exec, args.at(i));
+ arguments[i] = toRef(exec, exec->argument(i));
JSValueRef exception = 0;
JSValueRef result;
{
APICallbackShim callbackShim(exec);
- result = static_cast<JSCallbackFunction*>(functionObject)->m_callback(execRef, functionRef, thisObjRef, argumentCount, arguments.data(), &exception);
+ result = static_cast<JSCallbackFunction*>(toJS(functionRef))->m_callback(execRef, functionRef, thisObjRef, argumentCount, arguments.data(), &exception);
}
if (exception)
exec->setException(toJS(exec, exception));
diff --git a/JavaScriptCore/API/JSCallbackFunction.h b/JavaScriptCore/API/JSCallbackFunction.h
index b0dc425..3940e7d 100644
--- a/JavaScriptCore/API/JSCallbackFunction.h
+++ b/JavaScriptCore/API/JSCallbackFunction.h
@@ -48,7 +48,7 @@ private:
virtual CallType getCallData(CallData&);
virtual const ClassInfo* classInfo() const { return &info; }
- static JSValue JSC_HOST_CALL call(ExecState*, JSObject*, JSValue, const ArgList&);
+ static JSValue JSC_HOST_CALL call(ExecState*);
JSObjectCallAsFunctionCallback m_callback;
};
diff --git a/JavaScriptCore/API/JSCallbackObject.h b/JavaScriptCore/API/JSCallbackObject.h
index 0660b45..7216ac5 100644
--- a/JavaScriptCore/API/JSCallbackObject.h
+++ b/JavaScriptCore/API/JSCallbackObject.h
@@ -182,7 +182,7 @@ private:
static JSCallbackObject* asCallbackObject(JSValue);
- static JSValue JSC_HOST_CALL call(ExecState*, JSObject* functionObject, JSValue thisValue, const ArgList&);
+ static JSValue JSC_HOST_CALL call(ExecState*);
static JSObject* construct(ExecState*, JSObject* constructor, const ArgList&);
static JSValue staticValueGetter(ExecState*, JSValue, const Identifier&);
diff --git a/JavaScriptCore/API/JSCallbackObjectFunctions.h b/JavaScriptCore/API/JSCallbackObjectFunctions.h
index 6573ed9..ef1efd2 100644
--- a/JavaScriptCore/API/JSCallbackObjectFunctions.h
+++ b/JavaScriptCore/API/JSCallbackObjectFunctions.h
@@ -29,6 +29,7 @@
#include "Error.h"
#include "JSCallbackFunction.h"
#include "JSClassRef.h"
+#include "JSFunction.h"
#include "JSGlobalObject.h"
#include "JSLock.h"
#include "JSObjectRef.h"
@@ -370,18 +371,18 @@ CallType JSCallbackObject<Base>::getCallData(CallData& callData)
}
template <class Base>
-JSValue JSCallbackObject<Base>::call(ExecState* exec, JSObject* functionObject, JSValue thisValue, const ArgList& args)
+JSValue JSCallbackObject<Base>::call(ExecState* exec)
{
JSContextRef execRef = toRef(exec);
- JSObjectRef functionRef = toRef(functionObject);
- JSObjectRef thisObjRef = toRef(thisValue.toThisObject(exec));
+ JSObjectRef functionRef = toRef(exec->callee());
+ JSObjectRef thisObjRef = toRef(exec->hostThisValue().toThisObject(exec));
- for (JSClassRef jsClass = static_cast<JSCallbackObject<Base>*>(functionObject)->classRef(); jsClass; jsClass = jsClass->parentClass) {
+ for (JSClassRef jsClass = static_cast<JSCallbackObject<Base>*>(toJS(functionRef))->classRef(); jsClass; jsClass = jsClass->parentClass) {
if (JSObjectCallAsFunctionCallback callAsFunction = jsClass->callAsFunction) {
- int argumentCount = static_cast<int>(args.size());
+ int argumentCount = static_cast<int>(exec->argumentCount());
Vector<JSValueRef, 16> arguments(argumentCount);
for (int i = 0; i < argumentCount; i++)
- arguments[i] = toRef(exec, args.at(i));
+ arguments[i] = toRef(exec, exec->argument(i));
JSValueRef exception = 0;
JSValue result;
{
diff --git a/JavaScriptCore/API/JSObjectRef.cpp b/JavaScriptCore/API/JSObjectRef.cpp
index 73bba67..70c4e14 100644
--- a/JavaScriptCore/API/JSObjectRef.cpp
+++ b/JavaScriptCore/API/JSObjectRef.cpp
@@ -236,7 +236,7 @@ void JSObjectSetPrototype(JSContextRef ctx, JSObjectRef object, JSValueRef value
JSObject* jsObject = toJS(object);
JSValue jsValue = toJS(exec, value);
- jsObject->setPrototype(jsValue.isObject() ? jsValue : jsNull());
+ jsObject->setPrototypeWithCycleCheck(jsValue.isObject() ? jsValue : jsNull());
}
bool JSObjectHasProperty(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName)
diff --git a/JavaScriptCore/API/tests/testapi.c b/JavaScriptCore/API/tests/testapi.c
index 28b4ec8..780e996 100644
--- a/JavaScriptCore/API/tests/testapi.c
+++ b/JavaScriptCore/API/tests/testapi.c
@@ -764,6 +764,59 @@ static void makeGlobalNumberValue(JSContextRef context) {
v = NULL;
}
+static bool assertTrue(bool value, const char* message)
+{
+ if (!value) {
+ if (message)
+ fprintf(stderr, "assertTrue failed: '%s'\n", message);
+ else
+ fprintf(stderr, "assertTrue failed.\n");
+ failed = 1;
+ }
+ return value;
+}
+
+static bool checkForCycleInPrototypeChain()
+{
+ bool result = true;
+ JSGlobalContextRef context = JSGlobalContextCreate(0);
+ JSObjectRef object1 = JSObjectMake(context, /* jsClass */ 0, /* data */ 0);
+ JSObjectRef object2 = JSObjectMake(context, /* jsClass */ 0, /* data */ 0);
+ JSObjectRef object3 = JSObjectMake(context, /* jsClass */ 0, /* data */ 0);
+
+ JSObjectSetPrototype(context, object1, JSValueMakeNull(context));
+ ASSERT(JSValueIsNull(context, JSObjectGetPrototype(context, object1)));
+
+ // object1 -> object1
+ JSObjectSetPrototype(context, object1, object1);
+ result &= assertTrue(JSValueIsNull(context, JSObjectGetPrototype(context, object1)), "It is possible to assign self as a prototype");
+
+ // object1 -> object2 -> object1
+ JSObjectSetPrototype(context, object2, object1);
+ ASSERT(JSValueIsStrictEqual(context, JSObjectGetPrototype(context, object2), object1));
+ JSObjectSetPrototype(context, object1, object2);
+ result &= assertTrue(JSValueIsNull(context, JSObjectGetPrototype(context, object1)), "It is possible to close a prototype chain cycle");
+
+ // object1 -> object2 -> object3 -> object1
+ JSObjectSetPrototype(context, object2, object3);
+ ASSERT(JSValueIsStrictEqual(context, JSObjectGetPrototype(context, object2), object3));
+ JSObjectSetPrototype(context, object1, object2);
+ ASSERT(JSValueIsStrictEqual(context, JSObjectGetPrototype(context, object1), object2));
+ JSObjectSetPrototype(context, object3, object1);
+ result &= assertTrue(!JSValueIsStrictEqual(context, JSObjectGetPrototype(context, object3), object1), "It is possible to close a prototype chain cycle");
+
+ JSValueRef exception;
+ JSStringRef code = JSStringCreateWithUTF8CString("o = { }; p = { }; o.__proto__ = p; p.__proto__ = o");
+ JSStringRef file = JSStringCreateWithUTF8CString("");
+ result &= assertTrue(!JSEvaluateScript(context, code, /* thisObject*/ 0, file, 1, &exception)
+ , "An exception should be thrown");
+
+ JSStringRelease(code);
+ JSStringRelease(file);
+ JSGlobalContextRelease(context);
+ return result;
+}
+
int main(int argc, char* argv[])
{
const char *scriptPath = "testapi.js";
@@ -1346,6 +1399,13 @@ int main(int argc, char* argv[])
printf("PASS: Infinite prototype chain does not occur.\n");
+ if (checkForCycleInPrototypeChain())
+ printf("PASS: A cycle in a prototype chain can't be created.\n");
+ else {
+ printf("FAIL: A cycle in a prototype chain can be created.\n");
+ failed = true;
+ }
+
if (failed) {
printf("FAIL: Some tests failed.\n");
return 1;
diff --git a/JavaScriptCore/ChangeLog b/JavaScriptCore/ChangeLog
index 83076da..3687d58 100644
--- a/JavaScriptCore/ChangeLog
+++ b/JavaScriptCore/ChangeLog
@@ -1,16040 +1,265 @@
-2010-05-23 Sam Weinig <sam@webkit.org>
+2010-06-01 Kent Tamura <tkent@chromium.org>
- Fix windows build.
+ Reviewed by Shinichiro Hamaji.
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2010-05-23 Sam Weinig <sam@webkit.org>
-
- Reviewed by Oliver Hunt.
-
- Fix for https://bugs.webkit.org/show_bug.cgi?id=39575
- Make JS DOMObject inherit from JSObjectWithGlobalObject instead of JSObject
-
- Expose the global object stored in JSObjectWithGlobalObject.
-
- * JavaScriptCore.exp:
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * runtime/JSObjectWithGlobalObject.cpp:
- (JSC::JSObjectWithGlobalObject::JSObjectWithGlobalObject):
- (JSC::JSObjectWithGlobalObject::globalObject):
- * runtime/JSObjectWithGlobalObject.h:
-
-2010-05-21 Oliver Hunt <oliver@apple.com>
-
- "asm volatile" isn't valid outside of functions.
-
- Reviewed by Gavin Barraclough.
-
- * jit/JITStubs.cpp:
-
-2010-05-21 Gavin Barraclough <barraclough@apple.com>
-
- Unreviewed build fix.
-
- Interpreter fix following r59974.
-
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::privateExecute):
- * runtime/JSPropertyNameIterator.cpp:
- (JSC::JSPropertyNameIterator::get):
- * runtime/JSPropertyNameIterator.h:
-
-2010-05-21 Gavin Barraclough <barraclough@apple.com>
-
- Rubber stamped by Oliver Hunt.
-
- Interpreter fix following r59939.
-
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::privateExecute):
-
-2010-05-21 David Levin <levin@chromium.org>
-
- Unreviewed build fix.
-
- * wtf/SizeLimits.cpp: Removed a check while I figure out how to write it properly.
-
-2010-05-21 David Levin <levin@chromium.org>
-
- Reviewed by Darin Adler.
-
- Enforce size constraints on various data structures in JavaScriptCore/wtf.
- https://bugs.webkit.org/show_bug.cgi?id=39327
-
- I only modified the default build for OSX and Chromium's build file to include WTFCompileAsserts.cpp
- as those should be sufficient to catch regressions on the size of the data structures.
-
- * JavaScriptCore.gypi: Added the WTFCompileAsserts.cpp file.
- * JavaScriptCore.xcodeproj/project.pbxproj: Added the WTFCompileAsserts.cpp file.
- * runtime/UString.cpp: Added a compile assert for UString size.
- * wtf/SizeLimits.cpp: Added compile asserts for data structures that didn't have cpp files.
- * wtf/text/StringImpl.cpp: Added a compile assert for StringImpl size.
-
-2010-05-21 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Bug 39509 - Exceptions raised when JSString::value() is called not always properly thrown.
- Missing some CHECK_FOR_EXCEPTION()s, cleanup NativeError construction (adding a property
- via the prototype was inefficient, and whilst trivially true that the property is is not
- a rope - and thus couldn't except - it would be hard to prove this).
-
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::callEval):
- (JSC::Interpreter::privateExecute):
- * jit/JITStubs.cpp:
- (JSC::DEFINE_STUB_FUNCTION):
- * runtime/InternalFunction.cpp:
- (JSC::InternalFunction::name):
- (JSC::InternalFunction::displayName):
- * runtime/JSFunction.cpp:
- (JSC::JSFunction::name):
- (JSC::JSFunction::displayName):
- * runtime/JSGlobalObject.cpp:
- (JSC::JSGlobalObject::reset):
- * runtime/JSPropertyNameIterator.cpp:
- * runtime/JSPropertyNameIterator.h:
- * runtime/JSString.h:
- (JSC::RopeBuilder::tryGetValue):
- (JSC::JSString::getIndex):
- * runtime/NativeErrorConstructor.cpp:
- (JSC::NativeErrorConstructor::NativeErrorConstructor):
- * runtime/NativeErrorConstructor.h:
- * runtime/NativeErrorPrototype.cpp:
- (JSC::NativeErrorPrototype::NativeErrorPrototype):
- * runtime/NativeErrorPrototype.h:
- * runtime/StringPrototype.cpp:
- (JSC::stringProtoFuncReplace):
-
-2010-05-21 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (build fix).
-
- Fix interpreter build.
-
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::privateExecute):
-
-2010-05-21 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- Split out JITCall32_64.cpp, and tightened up some #ifdefs in the hopes
- of improving compile times.
- https://bugs.webkit.org/show_bug.cgi?id=39507
-
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * jit/JIT.cpp:
- * jit/JITArithmetic.cpp:
- * jit/JITArithmetic32_64.cpp:
- * jit/JITCall.cpp:
- * jit/JITCall32_64.cpp: Copied from jit/JITCall.cpp.
- * jit/JITOpcodes.cpp:
- * jit/JITOpcodes32_64.cpp:
- * jit/JITPropertyAccess.cpp:
- * jit/JITPropertyAccess32_64.cpp:
- * jit/JITStubs.cpp:
-
-2010-05-21 Csaba Osztrogonác <ossy@webkit.org>
-
- Unreviewed buildfix for Qt after r59941.
-
- * JavaScriptCore.pro: missing runtime/JSObjectWithGlobalObject.cpp added to SOURCES.
-
-2010-05-21 Oliver Hunt <oliver@apple.com>
-
- Windows build fix #3
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2010-05-21 Oliver Hunt <oliver@apple.com>
-
- Windows build fix #2
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2010-05-21 Oliver Hunt <oliver@apple.com>
-
- Windows build fix #1
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2010-05-21 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Geoffrey Garen.
-
- All callable objects should have a global object reference
- https://bugs.webkit.org/show_bug.cgi?id=39495
-
- All objects that may ever return a value other CallTypeNone
- or ConstructTypeNone now get a global object in their constructor
- and store that in their first anonymous slot. We add a new type
- JSObjectWithGlobalObject to allow us to share this logic as much
- as possible, however some objects have specific inheritance
- requirements so we can't just use it universally.
-
- To enforce this requirement JSValue::getCallData and getConstructData
- make use of a new "isValidCallee" function to assert that any object
- that returns a value other than CallType/ConstructTypeNone has a
- global object in anonymous slot 0.
-
- In order to ensure that static function slots are converted into
- function objects with the correct global object, all prototype objects
- and other classes with static function slots also gain a global object
- reference. Happily this fixes the long standing issue where host
- function objects get a prototype from the lexical global object of the
- first function that calls them, instead of the global object that they
- are defined on.
-
- * API/JSCallbackConstructor.cpp:
- (JSC::JSCallbackConstructor::JSCallbackConstructor):
- * API/JSCallbackConstructor.h:
- * API/JSCallbackFunction.cpp:
- (JSC::JSCallbackFunction::JSCallbackFunction):
- * API/JSCallbackFunction.h:
- * API/JSCallbackObject.cpp:
- (JSC::):
- * API/JSCallbackObject.h:
- * API/JSCallbackObjectFunctions.h:
- (JSC::::JSCallbackObject):
- (JSC::::staticFunctionGetter):
- * API/JSClassRef.cpp:
- (OpaqueJSClass::prototype):
- * API/JSContextRef.cpp:
- * API/JSObjectRef.cpp:
- (JSObjectMake):
- (JSObjectMakeFunctionWithCallback):
- (JSObjectMakeConstructor):
- (JSObjectGetPrivate):
- (JSObjectSetPrivate):
- (JSObjectGetPrivateProperty):
- (JSObjectSetPrivateProperty):
- (JSObjectDeletePrivateProperty):
- * API/JSValueRef.cpp:
- (JSValueIsObjectOfClass):
- * API/JSWeakObjectMapRefPrivate.cpp:
- * CMakeLists.txt:
- * GNUmakefile.am:
- * JavaScriptCore.exp:
- * JavaScriptCore.gypi:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::privateExecute):
- * jit/JITStubs.cpp:
- (JSC::DEFINE_STUB_FUNCTION):
- * jsc.cpp:
- (GlobalObject::GlobalObject):
- * runtime/ArrayConstructor.cpp:
- (JSC::ArrayConstructor::ArrayConstructor):
- * runtime/ArrayConstructor.h:
- * runtime/ArrayPrototype.cpp:
- (JSC::ArrayPrototype::ArrayPrototype):
- * runtime/ArrayPrototype.h:
- (JSC::ArrayPrototype::createStructure):
- * runtime/BooleanConstructor.cpp:
- (JSC::BooleanConstructor::BooleanConstructor):
- * runtime/BooleanConstructor.h:
- * runtime/BooleanPrototype.cpp:
- (JSC::BooleanPrototype::BooleanPrototype):
- * runtime/BooleanPrototype.h:
- * runtime/DateConstructor.cpp:
- (JSC::DateConstructor::DateConstructor):
- * runtime/DateConstructor.h:
- * runtime/DatePrototype.cpp:
- (JSC::DatePrototype::DatePrototype):
- * runtime/DatePrototype.h:
- * runtime/ErrorConstructor.cpp:
- (JSC::ErrorConstructor::ErrorConstructor):
- * runtime/ErrorConstructor.h:
- * runtime/ErrorPrototype.cpp:
- (JSC::ErrorPrototype::ErrorPrototype):
- * runtime/ErrorPrototype.h:
- * runtime/FunctionConstructor.cpp:
- (JSC::FunctionConstructor::FunctionConstructor):
- * runtime/FunctionConstructor.h:
- * runtime/FunctionPrototype.cpp:
- (JSC::FunctionPrototype::FunctionPrototype):
- (JSC::FunctionPrototype::addFunctionProperties):
- * runtime/FunctionPrototype.h:
- * runtime/GlobalEvalFunction.cpp:
- (JSC::GlobalEvalFunction::GlobalEvalFunction):
- * runtime/GlobalEvalFunction.h:
- * runtime/InternalFunction.cpp:
- (JSC::InternalFunction::InternalFunction):
- * runtime/InternalFunction.h:
- * runtime/JSCell.h:
- (JSC::JSValue::getCallData):
- (JSC::JSValue::getConstructData):
- * runtime/JSFunction.cpp:
- (JSC::JSFunction::JSFunction):
- * runtime/JSFunction.h:
- * runtime/JSGlobalObject.cpp:
- (JSC::JSGlobalObject::reset):
- * runtime/JSGlobalObject.h:
- (JSC::JSGlobalObject::JSGlobalObject):
- * runtime/JSONObject.cpp:
- (JSC::JSONObject::JSONObject):
- * runtime/JSONObject.h:
- * runtime/JSObject.h:
- * runtime/JSObjectWithGlobalObject.cpp: Added.
- (JSC::JSObjectWithGlobalObject::JSObjectWithGlobalObject):
- * runtime/JSObjectWithGlobalObject.h: Added.
- (JSC::JSObjectWithGlobalObject::createStructure):
- (JSC::JSObjectWithGlobalObject::JSObjectWithGlobalObject):
- * runtime/JSValue.cpp:
- (JSC::JSValue::isValidCallee):
- * runtime/JSValue.h:
- * runtime/Lookup.cpp:
- (JSC::setUpStaticFunctionSlot):
- * runtime/MathObject.cpp:
- (JSC::MathObject::MathObject):
- * runtime/MathObject.h:
- * runtime/NativeErrorConstructor.cpp:
- (JSC::NativeErrorConstructor::NativeErrorConstructor):
- * runtime/NativeErrorConstructor.h:
- * runtime/NativeErrorPrototype.cpp:
- (JSC::NativeErrorPrototype::NativeErrorPrototype):
- * runtime/NativeErrorPrototype.h:
- * runtime/NumberConstructor.cpp:
- (JSC::NumberConstructor::NumberConstructor):
- * runtime/NumberConstructor.h:
- * runtime/NumberPrototype.cpp:
- (JSC::NumberPrototype::NumberPrototype):
- * runtime/NumberPrototype.h:
- * runtime/ObjectConstructor.cpp:
- (JSC::ObjectConstructor::ObjectConstructor):
- * runtime/ObjectConstructor.h:
- * runtime/ObjectPrototype.cpp:
- (JSC::ObjectPrototype::ObjectPrototype):
- * runtime/ObjectPrototype.h:
- * runtime/PrototypeFunction.cpp:
- (JSC::PrototypeFunction::PrototypeFunction):
- * runtime/PrototypeFunction.h:
- * runtime/RegExpConstructor.cpp:
- (JSC::RegExpConstructor::RegExpConstructor):
- (JSC::constructRegExp):
- * runtime/RegExpConstructor.h:
- * runtime/RegExpObject.cpp:
- (JSC::RegExpObject::RegExpObject):
- * runtime/RegExpObject.h:
- * runtime/RegExpPrototype.cpp:
- (JSC::RegExpPrototype::RegExpPrototype):
- * runtime/RegExpPrototype.h:
- * runtime/StringConstructor.cpp:
- (JSC::StringConstructor::StringConstructor):
- * runtime/StringConstructor.h:
- * runtime/StringPrototype.cpp:
- (JSC::StringPrototype::StringPrototype):
- * runtime/StringPrototype.h:
-
-2010-05-21 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Removed the unused entry in the CallFrame
- https://bugs.webkit.org/show_bug.cgi?id=39470
-
- Removed the unused entry in the CallFrame, and reordered CallFrame
- writes on the hot path to be in forwards order.
-
- SunSpider says 0.3% faster.
-
- * interpreter/RegisterFile.h:
- (JSC::RegisterFile::):
- * jit/JITCall.cpp:
- (JSC::JIT::compileOpCall):
-
-2010-05-21 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
-
- Reviewed by Kenneth Rohde Christiansen.
-
- Split the QScriptValue autotest into smaller chunks.
-
- File tst_qscriptvalue_generated.cpp was huge and it was difficult to compile
- it with MSVS2008, because of the code optimization.
-
- Tests were splited into a few files for better use of distributed
- compilation.
- Repeated calls to insert() and operator<<() where replaced by loops,
- that should reduce time of code optimizing.
-
- New files were generated by the same application, test logic wasn't changed.
-
- [Qt] The QScriptValue autotest should be refactored.
- https://bugs.webkit.org/show_bug.cgi?id=38987
-
- * qt/tests/qscriptvalue/qscriptvalue.pro:
- * qt/tests/qscriptvalue/tst_qscriptvalue.h:
- * qt/tests/qscriptvalue/tst_qscriptvalue_generated.cpp: Removed.
- * qt/tests/qscriptvalue/tst_qscriptvalue_generated_init.cpp: Added.
- (tst_QScriptValue::initScriptValues):
- * qt/tests/qscriptvalue/tst_qscriptvalue_generated_istype.cpp: Added.
- (tst_QScriptValue::isValid_initData):
- (tst_QScriptValue::isValid_makeData):
- (tst_QScriptValue::isValid_test):
- (tst_QScriptValue::isBool_initData):
- (tst_QScriptValue::isBool_makeData):
- (tst_QScriptValue::isBool_test):
- (tst_QScriptValue::isBoolean_initData):
- (tst_QScriptValue::isBoolean_makeData):
- (tst_QScriptValue::isBoolean_test):
- (tst_QScriptValue::isNumber_initData):
- (tst_QScriptValue::isNumber_makeData):
- (tst_QScriptValue::isNumber_test):
- (tst_QScriptValue::isFunction_initData):
- (tst_QScriptValue::isFunction_makeData):
- (tst_QScriptValue::isFunction_test):
- (tst_QScriptValue::isNull_initData):
- (tst_QScriptValue::isNull_makeData):
- (tst_QScriptValue::isNull_test):
- (tst_QScriptValue::isString_initData):
- (tst_QScriptValue::isString_makeData):
- (tst_QScriptValue::isString_test):
- (tst_QScriptValue::isUndefined_initData):
- (tst_QScriptValue::isUndefined_makeData):
- (tst_QScriptValue::isUndefined_test):
- (tst_QScriptValue::isObject_initData):
- (tst_QScriptValue::isObject_makeData):
- (tst_QScriptValue::isObject_test):
- * qt/tests/qscriptvalue/tst_qscriptvalue_generated_totype.cpp: Added.
- (tst_QScriptValue::toString_initData):
- (tst_QScriptValue::toString_makeData):
- (tst_QScriptValue::toString_test):
- (tst_QScriptValue::toNumber_initData):
- (tst_QScriptValue::toNumber_makeData):
- (tst_QScriptValue::toNumber_test):
- (tst_QScriptValue::toBool_initData):
- (tst_QScriptValue::toBool_makeData):
- (tst_QScriptValue::toBool_test):
- (tst_QScriptValue::toBoolean_initData):
- (tst_QScriptValue::toBoolean_makeData):
- (tst_QScriptValue::toBoolean_test):
- (tst_QScriptValue::toInteger_initData):
- (tst_QScriptValue::toInteger_makeData):
- (tst_QScriptValue::toInteger_test):
- (tst_QScriptValue::toInt32_initData):
- (tst_QScriptValue::toInt32_makeData):
- (tst_QScriptValue::toInt32_test):
- (tst_QScriptValue::toUInt32_initData):
- (tst_QScriptValue::toUInt32_makeData):
- (tst_QScriptValue::toUInt32_test):
- (tst_QScriptValue::toUInt16_initData):
- (tst_QScriptValue::toUInt16_makeData):
- (tst_QScriptValue::toUInt16_test):
-
-2010-05-21 Kwang Yul Seo <skyul@company100.net>
-
- Reviewed by Eric Seidel.
-
- Add COMPILER(MSVC) guard for strnstr
- https://bugs.webkit.org/show_bug.cgi?id=39397
-
- BREWMP uses MSVC for simulator build, but it is not OS(WINDOWS).
- Add COMPILER(MSVC) guard for strnstr.
-
- * wtf/StringExtras.h:
-
-2010-05-21 Kwang Yul Seo <skyul@company100.net>
-
- Reviewed by Eric Seidel.
-
- [BREWMP] Add !PLATFORM(BREWMP) guard for isMainThread
- https://bugs.webkit.org/show_bug.cgi?id=39396
-
- BREWMP sets ENABLE(SINGLE_THREADED), so it uses isMainThread from ThreadingNone.cpp.
- Exclude isMainThread in MainThread.cpp.
-
- * wtf/MainThread.cpp:
-
-2010-05-20 Kwang Yul Seo <skyul@company100.net>
-
- Reviewed by Eric Seidel.
-
- [BREWMP] Use skia as BREW MP's graphics backend.
- https://bugs.webkit.org/show_bug.cgi?id=39407
-
- Define WTF_PLATFORM_SKIA=1 for BREW MP.
-
- * wtf/Platform.h:
-
-2010-05-20 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Beth Dakin.
-
- Fixed naming mixup: it's op_call_put_result, not ret_result.
-
- * bytecode/CodeBlock.cpp:
- (JSC::CodeBlock::dump):
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::privateExecute):
-
-2010-05-20 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Whittling away at CodeBlock use: Removed a little wonkiness in closure lookup
- https://bugs.webkit.org/show_bug.cgi?id=39444
-
- Calculate all lookup depths at compile time. I'm not sure why we couldn't
- do this before, but whatever the reason, it seems to be gone now.
-
- * bytecompiler/BytecodeGenerator.cpp:
- (JSC::BytecodeGenerator::findScopedProperty):
- * bytecompiler/BytecodeGenerator.h:
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::resolveSkip):
- (JSC::Interpreter::resolveGlobalDynamic):
- (JSC::Interpreter::privateExecute):
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_get_scoped_var):
- (JSC::JIT::emit_op_put_scoped_var):
- (JSC::JIT::emit_op_resolve_skip):
- (JSC::JIT::emit_op_resolve_global_dynamic):
- (JSC::JIT::emitSlow_op_resolve_global_dynamic):
- * jit/JITOpcodes32_64.cpp:
- (JSC::JIT::emit_op_get_scoped_var):
- (JSC::JIT::emit_op_put_scoped_var):
- (JSC::JIT::emit_op_resolve_skip):
-
-2010-05-20 Darin Adler <darin@apple.com>
-
- Reviewed by Eric Seidel.
-
- Fix warnings seen on the buildbots today
- https://bugs.webkit.org/show_bug.cgi?id=39368
-
- * profiler/ProfileNode.cpp:
- (JSC::getCount): Removed unneeded initialization of global variable.
- These are all initialized to zero anyway, so no need to try to initialize
- it and get a warning.
-
- * wtf/CurrentTime.cpp:
- (WTF::currentTime): Removed unused global variable.
-
-2010-05-20 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Darin Adler.
-
- Removed some reliance on callFame[CodeBlock] by storing CodeBlock in a
- local variable in the Interpreter.
- https://bugs.webkit.org/show_bug.cgi?id=39447
-
- Small speedup on SunSpider in Interpreter mode.
-
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::privateExecute):
- * jsc.cpp:
- * wtf/Platform.h:
-
-2010-05-19 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Bug 39408 - Unify JIT/interpreter return behaviour.
-
- Presently the JIT and the interpreter have differing implementations in how
- they handle storing the result of a function call back to the register file.
- In both cases the op_call ( / _eval / _varargs / op_construct) opcode has an
- operand indicating the VM register in which the result should be stored.
- The JIT plants code after the call to store the result, so the value will be
- stored as soon as the callee has returned. In the interpreter the call
- passes the return value register id into the callee via the callee callframe,
- and the callee is responsible for writing the result back into its callers
- register file after it has restored the parents callframe pointer, but before
- returning.
-
- Instead, move the task of writing the call result to the register file into a
- new opcode (op_call_put_result), and after returning the callee should leave
- the return value in a canonical location. In the case of the interpreter,
- this canonical location is a local variable in privateExecute
- (functionReturnValue), in the case of the JIT this is the normal return value
- registers (regT0, or regT1:regT0 in JSVALUE32_64). op_call_put_result stores
- the result from the canonical location to the registerfile.
-
- In addition to unifying JIT & interpreter behaviour this change allows us to
- remove a slot from the callframe, omit the write of the result where the
- return value from the call is not used, and provides a 2% speedup on sunspider
- in the interpreter.
-
- * bytecode/CodeBlock.cpp:
- (JSC::CodeBlock::dump):
- * bytecode/Opcode.h:
- * bytecompiler/BytecodeGenerator.cpp:
- (JSC::BytecodeGenerator::emitCall):
- (JSC::BytecodeGenerator::emitCallVarargs):
- (JSC::BytecodeGenerator::emitConstruct):
- * bytecompiler/BytecodeGenerator.h:
- (JSC::BytecodeGenerator::finalDestinationOrIgnored):
- * bytecompiler/NodesCodegen.cpp:
- (JSC::NewExprNode::emitBytecode):
- (JSC::FunctionCallValueNode::emitBytecode):
- (JSC::FunctionCallResolveNode::emitBytecode):
- (JSC::FunctionCallBracketNode::emitBytecode):
- (JSC::FunctionCallDotNode::emitBytecode):
- (JSC::CallFunctionCallDotNode::emitBytecode):
- (JSC::ApplyFunctionCallDotNode::emitBytecode):
- * interpreter/CallFrame.h:
- (JSC::ExecState::init):
- (JSC::ExecState::noCaller):
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::dumpRegisters):
- (JSC::Interpreter::throwException):
- (JSC::Interpreter::privateExecute):
- * interpreter/RegisterFile.h:
- (JSC::RegisterFile::):
- * jit/JIT.cpp:
- (JSC::JIT::privateCompileMainPass):
- * jit/JIT.h:
- * jit/JITCall.cpp:
- (JSC::JIT::compileOpCallSetupArgs):
- (JSC::JIT::compileOpConstructSetupArgs):
- (JSC::JIT::emit_op_call_put_result):
- (JSC::JIT::compileOpCallVarargs):
- (JSC::JIT::compileOpCallVarargsSlowCase):
- (JSC::JIT::compileOpCall):
- (JSC::JIT::compileOpCallSlowCase):
- (JSC::JIT::compileOpCallVarargsSetupArgs):
-
-2010-05-20 Steve Block <steveblock@google.com>
-
- Reviewed by Jeremy Orlow.
-
- Provide bindings for DeviceOrientation
- https://bugs.webkit.org/show_bug.cgi?id=39210
-
- Adds ENABLE_DEVICE_ORIENTATION to XCode project file, always disabled.
-
- * Configurations/FeatureDefines.xcconfig:
-
-2010-05-19 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Geoff Garen.
-
- Errk! rename op_constructor_ret as requested in review of Bug 39399.
-
- * bytecode/CodeBlock.cpp:
- (JSC::CodeBlock::dump):
- * bytecode/Opcode.h:
- * bytecompiler/BytecodeGenerator.cpp:
- (JSC::BytecodeGenerator::emitReturn):
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::privateExecute):
- * jit/JIT.cpp:
- (JSC::JIT::privateCompileMainPass):
- * jit/JIT.h:
- * jit/JITCall.cpp:
- (JSC::JIT::emit_op_ret_object_or_this):
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_ret_object_or_this):
-
-2010-05-19 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Geoff Garen.
-
- Bug 39399 - Move responsibility for verifying constructors return objects from the caller to the callee.
-
- This is a necessary step to move object creation from caller to callee.
-
- * bytecode/CodeBlock.cpp:
- (JSC::CodeBlock::dump):
- * bytecode/Opcode.h:
- * bytecompiler/BytecodeGenerator.cpp:
- (JSC::BytecodeGenerator::BytecodeGenerator):
- (JSC::BytecodeGenerator::emitReturn):
- (JSC::BytecodeGenerator::emitConstruct):
- * bytecompiler/BytecodeGenerator.h:
- (JSC::BytecodeGenerator::isConstructor):
- * bytecompiler/NodesCodegen.cpp:
- (JSC::FunctionBodyNode::emitBytecode):
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::privateExecute):
- * jit/JIT.cpp:
- (JSC::JIT::privateCompileMainPass):
- (JSC::JIT::privateCompileSlowCases):
- * jit/JIT.h:
- * jit/JITCall.cpp:
- (JSC::JIT::emit_op_constructor_ret):
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_constructor_ret):
-
-2010-05-19 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (build fix).
-
- Fix windows build II.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2010-05-19 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (build fix).
-
- Fix windows build.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2010-05-19 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Bug 39393 - JSFunction need not be a subclass of InternalFunction.
-
- re-landing r59800.
-
- * JavaScriptCore.exp:
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::retrieveCaller):
- (JSC::Interpreter::findFunctionCallFrame):
- * interpreter/Interpreter.h:
- * profiler/Profiler.cpp:
- (JSC::Profiler::createCallIdentifier):
- * runtime/FunctionPrototype.cpp:
- (JSC::functionProtoFuncToString):
- * runtime/JSFunction.cpp:
- (JSC::):
- (JSC::JSFunction::JSFunction):
- (JSC::JSFunction::name):
- (JSC::JSFunction::displayName):
- (JSC::JSFunction::calculatedDisplayName):
- * runtime/JSFunction.h:
- * runtime/JSObject.cpp:
- (JSC::JSObject::putDirectFunction):
- (JSC::JSObject::putDirectFunctionWithoutTransition):
- * runtime/JSObject.h:
- * runtime/Lookup.cpp:
- (JSC::setUpStaticFunctionSlot):
-
-2010-05-19 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (build fix).
-
- Reverting r59800, this b0rked stuff.
-
- * JavaScriptCore.exp:
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::retrieveCaller):
- (JSC::Interpreter::findFunctionCallFrame):
- * interpreter/Interpreter.h:
- * profiler/Profiler.cpp:
- (JSC::Profiler::createCallIdentifier):
- * runtime/FunctionPrototype.cpp:
- (JSC::functionProtoFuncToString):
- * runtime/JSFunction.cpp:
- (JSC::):
- (JSC::JSFunction::JSFunction):
- * runtime/JSFunction.h:
- * runtime/JSObject.cpp:
- * runtime/JSObject.h:
- * runtime/Lookup.cpp:
- (JSC::setUpStaticFunctionSlot):
-
-2010-05-19 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Bug 39393 - JSFunction need not be a subclass of InternalFunction.
-
- This may prevent us from introducing a more useful parent class to
- JSFunction, e.g. a JSObject that holds an executable, which could
- also reference an eval or program executable.
-
- * JavaScriptCore.exp:
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::retrieveCaller):
- (JSC::Interpreter::findFunctionCallFrame):
- * interpreter/Interpreter.h:
- * profiler/Profiler.cpp:
- (JSC::Profiler::createCallIdentifier):
- * runtime/FunctionPrototype.cpp:
- (JSC::functionProtoFuncToString):
- * runtime/JSFunction.cpp:
- (JSC::):
- (JSC::JSFunction::JSFunction):
- (JSC::JSFunction::name):
- (JSC::JSFunction::displayName):
- (JSC::JSFunction::calculatedDisplayName):
- * runtime/JSFunction.h:
- * runtime/JSObject.cpp:
- (JSC::JSObject::putDirectFunction):
- (JSC::JSObject::putDirectFunctionWithoutTransition):
- * runtime/JSObject.h:
- * runtime/Lookup.cpp:
- (JSC::setUpStaticFunctionSlot):
-
-2010-05-19 Oliver Hunt <oliver@apple.com>
+ Fix style errors of dtoa
+ https://bugs.webkit.org/show_bug.cgi?id=39972
- Reviewed by Geoffrey Garen.
-
- emitJumpIfNotJSCell should special case constant immediate values
- https://bugs.webkit.org/show_bug.cgi?id=39392
- <rdar://problem/8001324>
-
- Make emitJumpSlowCaseIfNotJSCell special case constant immediate
- values, in addition to the immediate JSCell optimisation.
-
- Also add assertions to make sure no one else produces code that
- attempts to load constants from the register file.
-
- * jit/JITInlineMethods.h:
- (JSC::JIT::emitJumpSlowCaseIfNotJSCell):
- * jit/JSInterfaceJIT.h:
- (JSC::JSInterfaceJIT::emitJumpIfNotJSCell):
- (JSC::JSInterfaceJIT::emitLoadInt32):
- (JSC::JSInterfaceJIT::tagFor):
- (JSC::JSInterfaceJIT::payloadFor):
- (JSC::JSInterfaceJIT::emitLoadDouble):
- (JSC::JSInterfaceJIT::addressFor):
- * jit/ThunkGenerators.cpp:
-
-2010-05-19 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Slight refactoring to CodeBlock bytecode access
- https://bugs.webkit.org/show_bug.cgi?id=39384
+ Fix all errors reported by check-webkit-style.
- * bytecode/CodeBlock.h:
- (JSC::CodeBlock::bytecodeOffset):
- * interpreter/CallFrame.h:
- (JSC::ExecState::returnPC):
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::unwindCallFrame):
- (JSC::Interpreter::retrieveLastCaller): Moved bytecode access into a
- CodeBlock helper function. Changed CallFrame to accurately represent
- how the returnPC is stored in JIT vs Interpreter.
-
-2010-05-19 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Don't build the Interpreter into JIT builds.
- https://bugs.webkit.org/show_bug.cgi?id=39373
-
- SunSpider says no change.
-
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::privateExecute):
- * interpreter/Interpreter.h:
- * wtf/Platform.h:
-
-2010-05-19 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- Standardized naming: "bytecode offset" wins; "bytecode index" loses.
-
- Also renamed getBytecodeOffset to bytecodeOffset, to match the WebKit
- naming style.
-
- * bytecode/CodeBlock.h:
- (JSC::CallReturnOffsetToBytecodeOffset::CallReturnOffsetToBytecodeOffset):
- (JSC::getCallReturnOffset):
- (JSC::CodeBlock::bytecodeOffset):
- (JSC::CodeBlock::callReturnIndexVector):
- * interpreter/Interpreter.cpp:
- (JSC::bytecodeOffsetForPC):
- * jit/JIT.cpp:
- (JSC::JIT::JIT):
- (JSC::JIT::privateCompileMainPass):
- (JSC::JIT::privateCompileLinkPass):
- (JSC::JIT::privateCompileSlowCases):
- (JSC::JIT::privateCompile):
- * jit/JIT.h:
- (JSC::CallRecord::CallRecord):
- (JSC::JumpTable::JumpTable):
- (JSC::SwitchRecord::SwitchRecord):
- * jit/JITCall.cpp:
- (JSC::JIT::compileOpCallVarargsSlowCase):
- (JSC::JIT::compileOpCall):
- * jit/JITInlineMethods.h:
- (JSC::JIT::emitNakedCall):
- (JSC::JIT::addSlowCase):
- (JSC::JIT::addJump):
- (JSC::JIT::emitJumpSlowToHot):
- (JSC::JIT::isLabeled):
- (JSC::JIT::map):
- (JSC::JIT::unmap):
- (JSC::JIT::isMapped):
- (JSC::JIT::getMappedPayload):
- (JSC::JIT::getMappedTag):
- (JSC::JIT::emitGetVirtualRegister):
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_switch_imm):
- (JSC::JIT::emit_op_switch_char):
- (JSC::JIT::emit_op_switch_string):
- (JSC::JIT::emit_op_new_error):
- * jit/JITOpcodes32_64.cpp:
- (JSC::JIT::emit_op_mov):
- (JSC::JIT::emit_op_get_global_var):
- (JSC::JIT::emit_op_put_global_var):
- (JSC::JIT::emit_op_get_scoped_var):
- (JSC::JIT::emit_op_put_scoped_var):
- (JSC::JIT::emit_op_to_primitive):
- (JSC::JIT::emit_op_resolve_global):
- (JSC::JIT::emit_op_to_jsnumber):
- (JSC::JIT::emit_op_catch):
- (JSC::JIT::emit_op_switch_imm):
- (JSC::JIT::emit_op_switch_char):
- (JSC::JIT::emit_op_switch_string):
- (JSC::JIT::emit_op_new_error):
- (JSC::JIT::emit_op_convert_this):
- * jit/JITPropertyAccess.cpp:
- (JSC::JIT::emit_op_method_check):
- (JSC::JIT::emitSlow_op_method_check):
- * jit/JITPropertyAccess32_64.cpp:
- (JSC::JIT::emit_op_method_check):
- (JSC::JIT::emitSlow_op_method_check):
- (JSC::JIT::emit_op_get_by_val):
- (JSC::JIT::emit_op_get_by_id):
- (JSC::JIT::emit_op_get_by_pname):
- * jit/JITStubCall.h:
- (JSC::JITStubCall::call):
- * jit/JITStubs.cpp:
- (JSC::DEFINE_STUB_FUNCTION):
-
-2010-05-19 Peter Varga <pvarga@inf.u-szeged.hu>
-
- Reviewed by Darin Adler.
-
- The backtrackParenthesesOnceEnd function should store the start position
- of the subpattern's non-greedy match at the place of the subpattern's
- start index in the output array instead of the place of the
- subpattern's end index.
- Add layout test for checking of non-greedy matching of subpattern in
- regular expressions.
- https://bugs.webkit.org/show_bug.cgi?id=39289
-
- * yarr/RegexInterpreter.cpp:
- (JSC::Yarr::Interpreter::backtrackParenthesesOnceEnd):
-
-2010-05-18 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Geoff Garen.
-
- Bug 39343 - Dynamically generate a native call thunk per NativeFunction
-
- https://bugs.webkit.org/show_bug.cgi?id=39252 regressed performance on i386,
- by adding an extra indirection to making a native call. By introducing per-
- NativeFunction thunks we can hard code the function pointer into the thunk
- so that it need not be loaded from the callee.
-
- * jit/JIT.h:
- (JSC::JIT::compileCTINativeCall):
- * jit/JITOpcodes.cpp:
- (JSC::JIT::privateCompileCTINativeCall):
- * jit/JITOpcodes32_64.cpp:
- (JSC::JIT::privateCompileCTINativeCall):
- * jit/JITPropertyAccess.cpp:
- (JSC::JIT::emitSlow_op_get_by_val):
- * jit/JITPropertyAccess32_64.cpp:
- (JSC::JIT::emitSlow_op_get_by_val):
- * jit/JITStubs.cpp:
- (JSC::JITThunks::ctiStub):
- (JSC::JITThunks::hostFunctionStub):
- * jit/JITStubs.h:
- * jit/SpecializedThunkJIT.h:
- (JSC::SpecializedThunkJIT::finalize):
- * jit/ThunkGenerators.cpp:
- (JSC::charCodeAtThunkGenerator):
- (JSC::charAtThunkGenerator):
- (JSC::fromCharCodeThunkGenerator):
- (JSC::sqrtThunkGenerator):
- (JSC::powThunkGenerator):
- * runtime/JSFunction.cpp:
- (JSC::JSFunction::JSFunction):
- * runtime/JSGlobalData.cpp:
- (JSC::JSGlobalData::getHostFunction):
- * runtime/JSGlobalData.h:
- (JSC::JSGlobalData::getCTIStub):
- * runtime/Lookup.cpp:
- (JSC::setUpStaticFunctionSlot):
- * runtime/StringConstructor.cpp:
- (JSC::StringConstructor::StringConstructor):
- * wtf/Platform.h:
-
-2010-05-18 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Darin Adler.
-
- Simplified handling of 'arguments' -- 1.2% SunSpider speedup
- https://bugs.webkit.org/show_bug.cgi?id=39200
-
- Removed the reserved OptionalCalleeArguments slot from the CallFrame.
- Now, slots for 'arguments' are allocated and initialized only by
- functions that might need them.
-
- * bytecode/CodeBlock.cpp:
- (JSC::CodeBlock::dump): Updated for new bytecode operands.
-
- (JSC::CodeBlock::CodeBlock):
- * bytecode/CodeBlock.h:
- (JSC::unmodifiedArgumentsRegister): Added a helper function for mapping
- from the arguments register to its unmodified counterpart.
-
- (JSC::CodeBlock::setArgumentsRegister):
- (JSC::CodeBlock::argumentsRegister):
- (JSC::CodeBlock::usesArguments): Changed from a "usesArguments" bool to
- an optional int index representing the arguments register.
-
- * bytecode/Opcode.h: Updated for new bytecode operands.
-
- * bytecompiler/BytecodeGenerator.cpp:
- (JSC::BytecodeGenerator::addVar): Factored out a helper function for
- allocating an anonymous var.
-
- (JSC::BytecodeGenerator::BytecodeGenerator): Merged / simplified some
- arguments vs activation logic, and added code to allocate the arguments
- registers when needed.
-
- (JSC::BytecodeGenerator::createArgumentsIfNecessary): Updated for new bytecode operands.
-
- (JSC::BytecodeGenerator::emitCallEval): No need to create the arguments
- object before calling eval; the activation object will lazily create the
- arguments object if eval resolves it.
-
- (JSC::BytecodeGenerator::emitReturn): Updated for new bytecode operands.
-
- (JSC::BytecodeGenerator::emitPushScope):
- (JSC::BytecodeGenerator::emitPushNewScope): Ditto emitCallEval.
-
- * bytecompiler/BytecodeGenerator.h:
- (JSC::BytecodeGenerator::addVar): Factored out a helper function for
- allocating an anonymous var.
-
- (JSC::BytecodeGenerator::registerFor): No more need for special handling
- of the arguments registers; they're allocated just like normal registers
- now.
-
- * interpreter/CallFrame.h:
- (JSC::ExecState::callerFrame):
- (JSC::ExecState::init):
- * interpreter/CallFrameClosure.h:
- (JSC::CallFrameClosure::resetCallFrame): Nixed optionalCalleeArguments.
-
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::dumpRegisters):
- (JSC::Interpreter::unwindCallFrame):
- (JSC::Interpreter::privateExecute):
- (JSC::Interpreter::retrieveArguments): Opcodes accessing 'arguments' now
- take operands specifying registers, just like all other opcodes.
- JSActivation::copyRegisters is no longer responsible for tearing off the
- arguments object; instead, the VM is responsible for both.
-
- Also, a behavior change: Each access to f.arguments creates a new object,
- unless f itself uses 'arguments'. This matches Chrome, and is necessary
- for the optimization. f.arguments is a nonstandard, deprecated feature,
- so high fidelity to a given implementation is not necessarily a goal.
- Also, as illustrated by the new test case, the identity of f.arguments
- has been broken since 2008, except in the case where f itself accesses
- f.arguments -- but nobody seemed to notice. So, hopefully this change won't
- break the web.
-
- * interpreter/Register.h: Nixed the special arguments accessor. It's no
- longer needed.
-
- * interpreter/RegisterFile.h:
- (JSC::RegisterFile::):
- * jit/JITCall.cpp:
- (JSC::JIT::compileOpCallInitializeCallFrame):
- (JSC::JIT::compileOpCall):
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_tear_off_activation):
- (JSC::JIT::emit_op_tear_off_arguments):
- (JSC::JIT::emit_op_create_arguments):
- (JSC::JIT::emit_op_init_arguments):
- * jit/JITOpcodes32_64.cpp:
- (JSC::JIT::emit_op_tear_off_activation):
- (JSC::JIT::emit_op_tear_off_arguments):
- (JSC::JIT::emit_op_create_arguments):
- (JSC::JIT::emit_op_init_arguments): The actual optimization: Removed
- OptionalCalleeArguments from the callframe slot. Now, it doesn't need
- to be initialized for most calls.
-
- * jit/JITStubs.cpp:
- (JSC::DEFINE_STUB_FUNCTION):
- * jit/JITStubs.h:
- (JSC::): Updated stubs to support arbitrary 'arguments' registers,
- instead of hard-coding something in the call frame.
-
- * runtime/Arguments.h:
- (JSC::JSActivation::copyRegisters): Removed some obfuscatory abstraction.
-
- * runtime/Executable.h:
- (JSC::FunctionExecutable::generatedByteCode): Added a helper for accessing
- the 'arguments' register. In a future patch, that kind of data should
- probably move out of CodeBlock and into Executable.
-
- * runtime/JSActivation.cpp:
- (JSC::JSActivation::getOwnPropertySlot):
- (JSC::JSActivation::argumentsGetter):
- * runtime/JSActivation.h: Simplified / fixed access to 'arguments' via
- the activation object. It now implements the same behavior implemented
- by optimized variable access in the VM. This simplifies some other
- things, too -- like eval code generation.
-
-2010-05-18 Sam Weinig <sam@webkit.org>
-
- Try to fix the windows build.
-
- * API/JSStringRefBSTR.cpp:
+ * wtf/dtoa.cpp:
+ * wtf/dtoa.h:
-2010-05-18 Anders Carlsson <andersca@apple.com>
+2010-05-30 Darin Adler <darin@apple.com>
Reviewed by Sam Weinig.
- Add an inlineCapacity template parameter to ListHashSet and use it to shrink the positioned object list hash set.
- https://bugs.webkit.org/show_bug.cgi?id=39304
- <rdar://problem/7998366>
-
- Add an inlineCapacity template parameter to ListHashSet.
-
- * wtf/ListHashSet.h:
- (WTF::::ListHashSet):
- (WTF::::operator):
- (WTF::::swap):
- (WTF::::~ListHashSet):
- (WTF::::size):
- (WTF::::capacity):
- (WTF::::isEmpty):
- (WTF::::begin):
- (WTF::::end):
- (WTF::::find):
- (WTF::::contains):
- (WTF::::add):
- (WTF::::insertBefore):
- (WTF::::remove):
- (WTF::::clear):
- (WTF::::unlinkAndDelete):
- (WTF::::appendNode):
- (WTF::::insertNodeBefore):
- (WTF::::deleteAllNodes):
- (WTF::::makeIterator):
- (WTF::::makeConstIterator):
- (WTF::deleteAllValues):
-
-2010-05-18 Gabor Loki <loki@webkit.org>
-
- Reviewed by Darin Adler.
-
- Fix the interpreter after r59637
- https://bugs.webkit.org/show_bug.cgi?id=39287
-
- * runtime/Executable.h:
- * runtime/JSFunction.cpp:
- (JSC::JSFunction::JSFunction):
- (JSC::JSFunction::getCallData):
- * runtime/JSGlobalData.cpp:
- * runtime/JSGlobalData.h:
-
-2010-05-17 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Geoff Garen.
-
- Oops, meant ebx not eax there. Fix Qt (and probably Win too).
-
- * jit/JITOpcodes32_64.cpp:
-
-2010-05-17 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Geoff Garen.
-
- Bug 39252 - Move host/native JSFunction's NativeFunction onto NativeExecutable.
-
- Currently host functions reuse JSFunction's ScopeChain as storage for their
- NativeFunction (the C function pointer to the host function implementation).
- Instead, move this onto NativeExecutable. This will allow host functions to
- have a scopechain (which will be implemented as a separate patch).
-
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * jit/JIT.h:
- * jit/JITCall.cpp:
- (JSC::JIT::compileOpCallInitializeCallFrame):
- (JSC::JIT::compileOpCall):
- * jit/JITOpcodes.cpp:
- (JSC::JIT::privateCompileCTIMachineTrampolines):
- * jit/JITOpcodes32_64.cpp:
- * jit/JITPropertyAccess.cpp:
- (JSC::JIT::stringGetByValStubGenerator):
- (JSC::JIT::emitSlow_op_get_by_val):
- * jit/JITPropertyAccess32_64.cpp:
- (JSC::JIT::stringGetByValStubGenerator):
- (JSC::JIT::emitSlow_op_get_by_val):
- * jit/JITStubs.cpp:
- (JSC::JITThunks::specializedThunk):
- * jit/JITStubs.h:
- (JSC::JITThunks::ctiNativeCall):
- * jit/SpecializedThunkJIT.h:
- (JSC::SpecializedThunkJIT::finalize):
- * jit/ThunkGenerators.cpp:
- (JSC::charCodeAtThunkGenerator):
- (JSC::charAtThunkGenerator):
- (JSC::fromCharCodeThunkGenerator):
- (JSC::sqrtThunkGenerator):
- (JSC::powThunkGenerator):
- * jit/ThunkGenerators.h:
- * runtime/Executable.h:
- (JSC::NativeExecutable::create):
- (JSC::NativeExecutable::function):
- (JSC::NativeExecutable::NativeExecutable):
- (JSC::JSFunction::nativeFunction):
- * runtime/JSFunction.cpp:
- (JSC::JSFunction::JSFunction):
- (JSC::JSFunction::~JSFunction):
- (JSC::JSFunction::markChildren):
- (JSC::JSFunction::getCallData):
- (JSC::JSFunction::call):
- (JSC::JSFunction::getOwnPropertySlot):
- (JSC::JSFunction::getConstructData):
- (JSC::JSFunction::construct):
- * runtime/JSFunction.h:
- (JSC::JSFunction::scope):
- * runtime/JSGlobalData.h:
- (JSC::JSGlobalData::getThunk):
- * runtime/Lookup.cpp:
- (JSC::setUpStaticFunctionSlot):
- * runtime/StringConstructor.cpp:
- (JSC::StringConstructor::StringConstructor):
-
-2010-05-17 Patrick Gansterer <paroga@paroga.com>
-
- Reviewed by Laszlo Gombos.
-
- [Qt] Remove WinCE endian dedection.
- https://bugs.webkit.org/show_bug.cgi?id=38511
-
- Windows CE supports little-endian format only.
- Correct dedection was added in r57804.
-
- * wtf/Platform.h:
-
-2010-05-16 Simon Fraser <simon.fraser@apple.com>
+ * wtf/OwnArrayPtr.h:
+ (WTF::OwnArrayPtr::set): Fix the assertion in here to match the one in OwnPtr.
+ At some point someone fixed the "asserts when assigning to 0 and the pointer is
+ already 0" issue in OwnPtr but forgot to do it here.
- Reviewed by Darin Adler.
+2010-05-29 Geoffrey Garen <ggaren@apple.com>
- Reduce the size of FunctionExecutable
- https://bugs.webkit.org/show_bug.cgi?id=39180
+ Windows build fix: Updated exported symbols.
- Change m_numVariables from a size_t to 31 bits in a bitfield,
- packed with another bit for m_forceUsesArguments (which in turn
- get packed with the base class).
-
- Reduces the size of FunctionExecutable from 160 to 152 bytes.
-
- * runtime/Executable.h:
- (JSC::FunctionExecutable::variableCount):
- (JSC::FunctionExecutable::FunctionExecutable):
-
-2010-05-15 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Maciej Stachowiak.
-
- Incorrect codegen for slowcase of < in 64-bit
- https://bugs.webkit.org/show_bug.cgi?id=39151
-
- Call the correct stud for the slowcases of the < operator.
-
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emitSlow_op_jnless):
- (JSC::JIT::emitSlow_op_jless):
-
-2010-05-15 Leo Yang <leo.yang@torchmobile.com.cn>
-
- Reviewed by Darin Adler.
-
- Fix bug https://bugs.webkit.org/show_bug.cgi?id=38890
-
- * runtime/DatePrototype.cpp:
- (JSC::formatLocaleDate):
-
-2010-05-15 Leandro Pereira <leandro@profusion.mobi>
-
- Reviewed by Adam Treat.
-
- [EFL] Add build system for the EFL port.
- http://webkit.org/b/37945
-
- * CMakeLists.txt: Added.
- * CMakeListsEfl.txt: Added.
- * config.h: Add conditional to look for cmakeconfig.h.
- * jsc/CMakeLists.txt: Added.
- * jsc/CMakeListsEfl.txt: Added.
- * wtf/CMakeLists.txt: Added.
- * wtf/CMakeListsEfl.txt: Added.
-
-2010-05-15 Chao-ying Fu <fu@mips.com>
-
- Reviewed by Oliver Hunt.
-
- Update MIPS JIT for unsigned right shift, Math.sqrt, load16
- https://bugs.webkit.org/show_bug.cgi?id=38412
-
- Fixed MIPS build failure.
-
- * assembler/MIPSAssembler.h:
- (JSC::MIPSAssembler::srl):
- (JSC::MIPSAssembler::srlv):
- (JSC::MIPSAssembler::sqrtd):
- * assembler/MacroAssemblerMIPS.h:
- (JSC::MacroAssemblerMIPS::urshift32):
- (JSC::MacroAssemblerMIPS::sqrtDouble):
- (JSC::MacroAssemblerMIPS::load16):
- (JSC::MacroAssemblerMIPS::supportsFloatingPointSqrt):
- * jit/JSInterfaceJIT.h:
-
-2010-05-15 Ilya Tikhonovsky <loislo@chromium.org>
-
- Reviewed by Geoffrey Garen.
-
- WebInspector: JSC Should provide heap size info for Timeline panel.
- https://bugs.webkit.org/show_bug.cgi?id=38420
-
- * JavaScriptCore.exp:
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * runtime/Collector.cpp:
- (JSC::Heap::size):
- * runtime/Collector.h:
-2010-05-15 Dave Tapuska <dtapuska@rim.com>
+2010-05-29 Geoffrey Garen <ggaren@apple.com>
- Reviewed by Darin Adler.
-
- Add a new define for we need strict arena alignment. ARMv5 with
- double word instructions set this value.
+ Disabled ENABLE_JIT_OPTIMIZE_NATIVE_CALL on Windows for now, until I
+ can figure out why it's crashing.
* wtf/Platform.h:
-2010-05-14 Stephanie Lewis <slewis@apple.com>
-
- Rubber-stamped by Mark Rowe.
-
- Update order files.
-
- * JavaScriptCore.order:
-
-2010-05-14 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
-
- Reviewed by Kenneth Rohde Christiansen.
-
- Implementation of QtScript API that provide method to convert a value to an object.
-
- [Qt] QtScript is missing toObject API
- https://bugs.webkit.org/show_bug.cgi?id=36594
-
- * qt/api/qscriptengine.cpp:
- (QScriptEngine::toObject):
- * qt/api/qscriptengine.h:
- * qt/api/qscriptvalue.cpp:
- (QScriptValue::toObject):
- * qt/api/qscriptvalue.h:
- * qt/api/qscriptvalue_p.h:
- (QScriptValuePrivate::toObject):
- * qt/tests/qscriptengine/tst_qscriptengine.cpp:
- (tst_QScriptEngine::toObject):
- (tst_QScriptEngine::toObjectTwoEngines):
- * qt/tests/qscriptvalue/tst_qscriptvalue.cpp:
- (tst_QScriptValue::toObjectSimple):
- * qt/tests/qscriptvalue/tst_qscriptvalue.h:
-
-2010-05-14 Chao-ying Fu <fu@mips.com>
-
- Reviewed by Oliver Hunt.
-
- String Indexing Failure on JSVALUE32 targets
- https://bugs.webkit.org/show_bug.cgi?id=39034
-
- Remove zero-extend/shift-right code on regT1, because we already have
- it in emit_op_get_by_val().
-
- * jit/JITPropertyAccess.cpp:
- (JSC::JIT::stringGetByValStubGenerator):
-
-2010-05-10 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
+2010-05-29 Geoffrey Garen <ggaren@apple.com>
- Reviewed by Alexey Proskuryakov.
+ Fixed Windows crash seen on buildbot.
- Fix a VS2010 assert in std::copy
- https://bugs.webkit.org/show_bug.cgi?id=38630
-
- The assert complains that the output iterator is null.
-
- * wtf/Vector.h:
- (WTF::::operator):
-
-2010-05-13 Maciej Stachowiak <mjs@apple.com>
-
- No review, attempted build fix.
-
- Try to fix Tiger build with some gratuitous initialization of
- seemingly uninitialized variables.
-
- * wtf/text/StringImpl.h:
- (WebCore::StringImpl::tryCreateUninitialized):
-
-2010-05-13 Maciej Stachowiak <mjs@apple.com>
-
- Reviewed by Mark Rowe.
-
- Various JavaScript string optimizations
- https://bugs.webkit.org/show_bug.cgi?id=39051
-
- Approximately 1% SunSpider speedup.
-
- * runtime/ArrayPrototype.cpp:
- (JSC::arrayProtoFuncJoin): Remove branches from the hot code path
- by moving the first pass outside the loop, and duplicating the hot loop
- to extract the loop-invariant branch.
- * runtime/RegExp.cpp:
- (JSC::RegExp::match): resize ovector to 0 instead of clearing to avoid
- thrash in case of large matches.
- * runtime/RegExpConstructor.h:
- (JSC::RegExpConstructor::performMatch): Mark ALWAYS_INLINE to make the
- compiler respect our authority.
- * runtime/StringPrototype.cpp:
- (JSC::jsSpliceSubstringsWithSeparators): Inline.
- (JSC::stringProtoFuncSubstring): Rewrite boundary condition checks to
- reduce the number of floating point comparisons and branches.
-
-2010-05-12 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- https://bugs.webkit.org/show_bug.cgi?id=39039
- Provide support for separate bytecode/JIT code translations for call/construct usage
- This will allow us to produce code generated specifically for use as a constructor, not for general function use.
-
- * bytecode/CodeBlock.cpp:
- (JSC::CodeBlock::CodeBlock):
- (JSC::CodeBlock::unlinkCallers):
- * bytecode/CodeBlock.h:
- (JSC::CodeBlock::getBytecodeIndex):
- (JSC::CodeBlock::getJITCode):
- (JSC::CodeBlock::executablePool):
- (JSC::GlobalCodeBlock::GlobalCodeBlock):
- (JSC::FunctionCodeBlock::FunctionCodeBlock):
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::executeCall):
- (JSC::Interpreter::executeConstruct):
- (JSC::Interpreter::prepareForRepeatCall):
- (JSC::Interpreter::execute):
- (JSC::Interpreter::privateExecute):
- * interpreter/Interpreter.h:
- * jit/JIT.cpp:
- (JSC::JIT::unlinkCallOrConstruct):
- (JSC::JIT::linkConstruct):
- * jit/JIT.h:
- * jit/JITCall.cpp:
- (JSC::JIT::compileOpCall):
- (JSC::JIT::compileOpCallSlowCase):
- * jit/JITOpcodes.cpp:
- (JSC::JIT::privateCompileCTIMachineTrampolines):
- * jit/JITOpcodes32_64.cpp:
- (JSC::JIT::privateCompileCTIMachineTrampolines):
- * jit/JITPropertyAccess.cpp:
- (JSC::JIT::emitSlow_op_get_by_val):
- * jit/JITPropertyAccess32_64.cpp:
- (JSC::JIT::emitSlow_op_get_by_val):
- * jit/JITStubs.cpp:
- (JSC::DEFINE_STUB_FUNCTION):
- * jit/JITStubs.h:
- (JSC::JITThunks::ctiVirtualConstructLink):
- (JSC::JITThunks::ctiVirtualConstruct):
- (JSC::):
- * jit/SpecializedThunkJIT.h:
- (JSC::SpecializedThunkJIT::finalize):
- * runtime/Arguments.h:
- (JSC::JSActivation::copyRegisters):
- * runtime/ArrayPrototype.cpp:
- (JSC::isNumericCompareFunction):
- * runtime/Executable.cpp:
- (JSC::FunctionExecutable::~FunctionExecutable):
- (JSC::FunctionExecutable::compileForCall):
- (JSC::FunctionExecutable::compileForConstruct):
- (JSC::EvalExecutable::generateJITCode):
- (JSC::ProgramExecutable::generateJITCode):
- (JSC::FunctionExecutable::generateJITCodeForCall):
- (JSC::FunctionExecutable::generateJITCodeForConstruct):
- (JSC::FunctionExecutable::markAggregate):
- (JSC::FunctionExecutable::reparseExceptionInfo):
- (JSC::EvalExecutable::reparseExceptionInfo):
- (JSC::FunctionExecutable::recompile):
- * runtime/Executable.h:
- (JSC::ExecutableBase::ExecutableBase):
- (JSC::ExecutableBase::isHostFunction):
- (JSC::ExecutableBase::generatedJITCodeForCall):
- (JSC::ExecutableBase::generatedJITCodeForConstruct):
- (JSC::NativeExecutable::NativeExecutable):
- (JSC::EvalExecutable::jitCode):
- (JSC::ProgramExecutable::jitCode):
- (JSC::FunctionExecutable::bytecodeForCall):
- (JSC::FunctionExecutable::isGeneratedForCall):
- (JSC::FunctionExecutable::generatedBytecodeForCall):
- (JSC::FunctionExecutable::bytecodeForConstruct):
- (JSC::FunctionExecutable::isGeneratedForConstruct):
- (JSC::FunctionExecutable::generatedBytecodeForConstruct):
- (JSC::FunctionExecutable::symbolTable):
- (JSC::FunctionExecutable::FunctionExecutable):
- (JSC::FunctionExecutable::jitCodeForCall):
- (JSC::FunctionExecutable::jitCodeForConstruct):
- * runtime/JSActivation.h:
- (JSC::JSActivation::JSActivationData::JSActivationData):
- * runtime/JSFunction.cpp:
- (JSC::JSFunction::~JSFunction):
- (JSC::JSFunction::call):
- (JSC::JSFunction::construct):
- * runtime/JSGlobalData.cpp:
- (JSC::JSGlobalData::numericCompareFunction):
-
-2010-05-12 Oliver Hunt <oliver@apple.com>
-
- build fix
-
- <rdar://problem/7977960> REGRESSION (r59282): Tiger PPC build broken
-
- * runtime/UString.h:
- (JSC::tryMakeString):
-
-2010-05-12 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- <rdar://7969718> Incorrect 32-bit codegen for op_jnlesseq
- https://bugs.webkit.org/show_bug.cgi?id=39038
-
- Correct the use of incorrect comparison operators.
-
- * jit/JITArithmetic32_64.cpp:
- (JSC::JIT::emit_op_jlesseq):
- (JSC::JIT::emitBinaryDoubleOp):
-
-2010-05-12 Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>
-
- Reviewed by Eric Seidel.
-
- JavaScriptCore: fix build when some optimizations are disabled
- https://bugs.webkit.org/show_bug.cgi?id=38800
-
- Remove outdated UNUSED_PARAMs when using JIT but with
- ENABLE_JIT_OPTIMIZE_CALL and ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS
- disabled.
-
- * jit/JITOpcodes.cpp:
* jit/JITOpcodes32_64.cpp:
+ (JSC::JIT::privateCompileCTINativeCall): __fastcall puts the first
+ argument in ecx.
-2010-05-12 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
+2010-05-28 Geoffrey Garen <ggaren@apple.com>
- Work around GCC stupidity by either explicitly inlining or by
- using ALWAYS_INLINE
-
- * runtime/StringPrototype.cpp:
- (JSC::stringProtoFuncReplace):
- * runtime/UString.h:
- (JSC::UString::~UString):
- * wtf/RefPtr.h:
- (WTF::RefPtr::RefPtr):
- (WTF::RefPtr::~RefPtr):
- * wtf/text/StringImpl.h:
- (WebCore::StringImpl::create):
- (WebCore::StringImpl::tryCreateUninitialized):
-
-2010-05-12 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Kenneth Rohde Christiansen.
-
- [Qt] Detect debug mode consistently
- https://bugs.webkit.org/show_bug.cgi?id=38863
-
- * JavaScriptCore.pri:
- * JavaScriptCore.pro:
- * jsc.pro:
- * qt/api/QtScript.pro:
-
-2010-05-12 Peter Varga <pvarga@inf.u-szeged.hu>
-
- Reviewed by Gavin Barraclough.
-
- Remove a direct jump in generatePatternCharacterGreedy() and
- generatePatternCharacterClassGreedy() functions if quantityCount of the term
- is unlimited.
- https://bugs.webkit.org/show_bug.cgi?id=38898
-
- * yarr/RegexJIT.cpp:
- (JSC::Yarr::RegexGenerator::generatePatternCharacterGreedy):
- (JSC::Yarr::RegexGenerator::generateCharacterClassGreedy):
-
-2010-05-11 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- Slight simplification to the calling convention: read RegisterFile::end()
- from an absolute address, instead of from a pointer to the RegisterFile
- on the stack.
-
- SunSpider reports no change.
-
- This should free us to remove the RegisterFile argument from the stack.
-
- * jit/JIT.cpp:
- (JSC::JIT::privateCompile):
-
-2010-05-11 Brian Weinstein <bweinstein@apple.com>
-
- Possible Gtk build fix - use ALWAYS_INLINE on functions that were inlined.
-
- * wtf/text/AtomicString.h:
- (WebCore::AtomicString::add): Use ALWAYS_INLINE.
- * wtf/text/WTFString.h:
- (WebCore::String::length): Ditto.
- (WebCore::String::isEmpty): Ditto.
-
-2010-05-11 Anders Carlsson <andersca@apple.com>
-
- Reviewed by Sam Weinig.
-
- Add a compile time assert that sizeof(String) == sizeof(AtomicString).
-
- * wtf/text/AtomicString.cpp:
-
-2010-05-11 Anders Carlsson <andersca@apple.com>
-
- Reviewed by Mark Rowe.
-
- https://bugs.webkit.org/show_bug.cgi?id=38961
- Move some member variables around to reduce class sizes.
-
- Make AtomicString no longer inherit from FastAllocBase.
-
- Since AtomicString's first (and only) member variable, a RefPtr, also inherits from FastAllocBase this
- was causing the size of AtomicString to contain sizeof(void*) bytes of padding.
-
- * wtf/text/AtomicString.h:
-
-2010-05-11 Brian Weinstein <bweinstein@apple.com>
-
- Reviewed by Maciej Stachowiak.
- Patch by Gavin Barraclough.
-
- Rest of REGRESSION (r57900-57919): 3% PLT Regression from moving strings into WTF.
- https://bugs.webkit.org/show_bug.cgi?id=38930
- <rdar://problem/7937188>
-
- Inline string functions that are commonly used in WTFString, CString, and AtomicString.
-
- * JavaScriptCore.exp: Remove exports of inline functions.
- * wtf/text/AtomicString.cpp:
- (WebCore::AtomicString::addSlowCase): Rename add to addSlowCase, and inline the fast path
- of add.
- * wtf/text/AtomicString.h:
- (WebCore::AtomicString::add): Inline the fast path of add.
- * wtf/text/CString.cpp: Inline implementation of data and length in the header.
- * wtf/text/CString.h:
- (WTF::CString::data): Inline implementation of data.
- (WTF::CString::length): Inline implementation of length.
- * wtf/text/WTFString.cpp: Remove implementations of functions to be inlined.
- * wtf/text/WTFString.h:
- (WebCore::String::String): Inline implementation.
- (WebCore::String::length): Ditto.
- (WebCore::String::characters): Ditto.
- (WebCore::String::operator[]): Ditto.
- (WebCore::String::isEmpty): Ditto.
-
-2010-05-11 Brian Weinstein <bweinstein@apple.com>
-
- Reviewed by Steve Falkenburg and Jon Honeycutt.
- Patch by Gavin Barraclough.
-
- REGRESSION (r57900-57919): 3% PLT Regression from moving strings into WTF.
- https://bugs.webkit.org/show_bug.cgi?id=38930
- <rdar://problem/7937188>
-
- When the String classes were moved from WebCore to WTF, it meant that on Windows, all operations
- on Strings in WebCore had to cross a DLL boundary (from WebKit.dll to JavaScript.dll).
-
- We fix this by refactoring some of the WTF string code, so the code in AtomicString, StringImpl, and
- WTFString can be built by both WebCore and WTF, and we don't need to talk across a DLL to do operations
- on Strings.
-
- * GNUmakefile.am: Add new file to build system.
- * JavaScriptCore.gypi: Ditto.
- * JavaScriptCore.pro: Ditto.
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Remove string exports, because these are now
- handled in WebCore.
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Remove the post-build step that was added
- here (the post build step is in JavaScriptCoreCommon.vsprops).
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops: Copy the three cpp files that need to be compiled
- by WebCore into the WebKitOutputDir directory.
- * JavaScriptCore.vcproj/WTF/WTF.vcproj: Add the StringStatics file.
- * JavaScriptCore.vcproj/jsc/jsc.vcproj: Add the three WTF string cpp files to this project.
- * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: Remove the need to link against WTF.lib (since jsc links against JavaScriptCore).
- * JavaScriptCore.xcodeproj/project.pbxproj: Add the StringStatics file.
- * wtf/text/AtomicString.cpp: Moved code to StringStatics.
- * wtf/text/StringImpl.cpp: Ditto.
- * wtf/text/StringStatics.cpp: Added. Move functions in WTF Strings that define static variables to here, so
- the rest of the files can be compiled in WebCore.
- (WebCore::StringImpl::empty): Moved from StringImpl.cpp to here.
- (WebCore::AtomicString::init): Moved from AtomicString.cpp to here.
-
-2010-05-11 Alice Liu <alice.liu@apple.com>
-
- Rubber-stamped by Gavin Barraclough.
-
- Fix build error when enabling debugging block in WebKit win painting code
+ Windows build fix: Updated exported symbols.
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-2010-05-11 Mark Rowe <mrowe@apple.com>
-
- Fix the world.
+2010-05-28 Geoffrey Garen <ggaren@apple.com>
- In r59162 a change was made to WebCore's FeatureDefines.xcconfig that enabled FILE_READER and FILE_WRITER.
- The author and reviewer of that patch ignored the carefully-worded warning at the top of that file asking
- that changes to the file be kept in sync across JavaScriptCore, WebCore and WebKit, as well as being kept
- in sync with build-webkit. This led to WebCore and WebKit having different views of Document's vtable
- and results in crashes in Safari shortly after launch when virtual function calls resulted in the wrong
- function in WebCore being called.
-
- We fix this by bringing the FeatureDefines.xcconfig files in to sync. Based on the ChangeLog message and
- other changes in r59162 it appears that enabling FILE_WRITER was unintentional so that particular change
- has been reverted.
-
- * Configurations/FeatureDefines.xcconfig:
-
-2010-05-11 Sheriff Bot <webkit.review.bot@gmail.com>
-
- Unreviewed, rolling out r59171.
- http://trac.webkit.org/changeset/59171
- https://bugs.webkit.org/show_bug.cgi?id=38933
-
- "Broke the world" (Requested by bweinstein on #webkit).
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
- * JavaScriptCore.vcproj/WTF/WTF.vcproj:
- * JavaScriptCore.vcproj/jsc/jsc.vcproj:
- * JavaScriptCore.vcproj/jsc/jscCommon.vsprops:
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * wtf/text/AtomicString.cpp:
- (WebCore::AtomicString::init):
- * wtf/text/StringImpl.cpp:
- (WebCore::StringImpl::empty):
- * wtf/text/StringStatics.cpp: Removed.
-
-2010-05-11 Brian Weinstein <bweinstein@apple.com>
-
- Reviewed by Steve Falkenburg.
- Patch by Gavin Barraclough.
-
- REGRESSION (r57900-57919): 3% PLT Regression from moving strings into WTF.
- https://bugs.webkit.org/show_bug.cgi?id=38930
- <rdar://problem/7937188>
-
- When the String classes were moved from WebCore to WTF, it meant that on Windows, all operations
- on Strings in WebCore had to cross a DLL boundary (from WebKit.dll to JavaScript.dll).
-
- We fix this by refactoring some of the WTF string code, so the code in AtomicString, StringImpl, and
- WTFString can be built by both WebCore and WTF, and we don't need to talk across a DLL to do operations
- on Strings.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Remove string exports, because these are now
- handled in WebCore.
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Remove the post-build step that was added
- here (the post build step is in JavaScriptCoreCommon.vsprops).
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops: Copy the three cpp files that need to be compiled
- by WebCore into the WebKitOutputDir directory.
- * JavaScriptCore.vcproj/WTF/WTF.vcproj: Add the StringStatics file.
- * JavaScriptCore.vcproj/jsc/jsc.vcproj: Add the three WTF string cpp files to this project.
- * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: Remove the need to link against WTF.lib (since jsc links against JavaScriptCore).
- * JavaScriptCore.xcodeproj/project.pbxproj: Add the StringStatics file.
- * wtf/text/AtomicString.cpp: Moved code to StringStatics.
- * wtf/text/StringImpl.cpp: Ditto.
- * wtf/text/StringStatics.cpp: Added. Move functions in WTF Strings that define static variables to here, so
- the rest of the files can be compiled in WebCore.
- (WebCore::StringImpl::empty): Moved from StringImpl.cpp to here.
- (WebCore::AtomicString::init): Moved from AtomicString.cpp to here.
-
-2010-05-11 Geoffrey Garen <ggaren@apple.com>
-
- Fixed test failures seen on SnowLeopard buildbot.
-
- * runtime/JSString.cpp:
- (JSC::JSString::replaceCharacter): Don't use size_t and wtf::notFound.
- Instead, use the individual types and notFound values of the string APIs
- we're using, since they're not necessarily the same in 64bit.
-
-2010-05-11 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Oliver Hunt and Darin Adler.
-
- Start using ropes in String.prototype.replace.
-
- 1%-1.5% speedup on SunSpider.
-
- * runtime/JSString.cpp:
- (JSC::JSString::resolveRope): Updated for RopeImpl refactoring.
-
- (JSC::JSString::replaceCharacter): Added a replaceCharacter function, which creates
- a rope for the resulting replacement.
-
- * runtime/JSString.h: A few changes here:
- (JSC::):
- (JSC::RopeBuilder::RopeIterator::RopeIterator):
- (JSC::RopeBuilder::RopeIterator::operator++):
- (JSC::RopeBuilder::RopeIterator::operator*):
- (JSC::RopeBuilder::RopeIterator::operator!=):
- (JSC::RopeBuilder::RopeIterator::WorkItem::WorkItem):
- (JSC::RopeBuilder::RopeIterator::WorkItem::operator!=):
- (JSC::RopeBuilder::RopeIterator::skipRopes): Created a RopeIterator abstraction.
- We use this to do a substring find without having to resolve the rope.
- (We could use this iterator when resolving ropes, too, but resolving
- ropes backwards is usually more efficient.)
-
- (JSC::RopeBuilder::JSString): Added constructors for 2 & 3 UStrings.
-
- (JSC::RopeBuilder::appendValueInConstructAndIncrementLength):
- (JSC::RopeBuilder::size): Updated for RopeImpl refactoring.
-
- * runtime/Operations.h: Updated for RopeImpl refactoring.
- (JSC::jsString): Added jsString functions for 2 & 3 UStrings.
-
- * runtime/RopeImpl.cpp:
- (JSC::RopeImpl::derefFibersNonRecursive):
- * runtime/RopeImpl.h:
- (JSC::RopeImpl::initializeFiber):
- (JSC::RopeImpl::size):
- (JSC::RopeImpl::fibers):
- (JSC::RopeImpl::deref):
- (JSC::RopeImpl::RopeImpl): A little refactoring to make this patch easier:
- Moved statics to the top of the class; put multi-statement functions on
- multiple lines; renamed "fiberCount" to "size" to match other collections;
- changed the "fibers" accessor to return the fibers buffer, instead of an
- item in the buffer, to make iteration easier.
-
- * runtime/StringPrototype.cpp:
- (JSC::stringProtoFuncReplace): Don't resolve a rope unless we need to. Do
- use our new replaceCharacter function if possible. Do use a rope to
- represent splicing three strings together.
-
-2010-05-10 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Darin Adler.
-
- [Qt] Disable JIT support for mingw-w64
- https://bugs.webkit.org/show_bug.cgi?id=38747
-
- Disale JIT for mingw-w64 as it is reportedly
- unstable.
-
- Thanks for Vanboxem Rruben for the investigation.
+ Qt build fix: disable a little more stuff when JIT_OPTIMIZE_NATIVE_CALL
+ is disabled.
+ * runtime/Lookup.cpp:
+ (JSC::setUpStaticFunctionSlot):
+ * runtime/Lookup.h:
* wtf/Platform.h:
-2010-05-09 Fumitoshi Ukai <ukai@chromium.org>
-
- Reviewed by Eric Seidel.
+2010-05-28 Geoffrey Garen <ggaren@apple.com>
- JavaScriptCore/wtf/MD5.h: checksum should take a reference to output.
- https://bugs.webkit.org/show_bug.cgi?id=38723
+ Windows build fix: Updated exported symbols.
- * JavaScriptCore.exp:
* JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * wtf/MD5.cpp:
- (WTF::expectMD5):
- Fix for checksum change.
- (WTF::MD5::checksum):
- Take a reference to output, instead of returning the result by value, to reduce coping for performance.
- * wtf/MD5.h:
-
-2010-05-09 Oliver Hunt <oliver@apple.com>
-
- Build fix.
-
- Fix accidental repeat addition of emit_op_new_regexp
-
- * jit/JITOpcodes.cpp:
-
-2010-05-09 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- REGRESSION(r57955): RegExp literals should not actually be cached, so r57955 should be rolled out.
- https://bugs.webkit.org/show_bug.cgi?id=38828
- <rdar://problem/7961634>
-
- Rollout r57955
-
- * bytecode/CodeBlock.cpp:
- (JSC::regexpToSourceString):
- (JSC::regexpName):
- (JSC::CodeBlock::dump):
- (JSC::CodeBlock::shrinkToFit):
- * bytecode/CodeBlock.h:
- (JSC::CodeBlock::addRegExp):
- (JSC::CodeBlock::regexp):
- * bytecode/Opcode.h:
- * bytecompiler/BytecodeGenerator.cpp:
- (JSC::BytecodeGenerator::addRegExp):
- (JSC::BytecodeGenerator::emitNewRegExp):
- * bytecompiler/BytecodeGenerator.h:
- * bytecompiler/NodesCodegen.cpp:
- (JSC::RegExpNode::emitBytecode):
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::privateExecute):
- * jit/JIT.cpp:
- (JSC::JIT::privateCompileMainPass):
- * jit/JIT.h:
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_new_regexp):
- * jit/JITStubs.cpp:
- (JSC::DEFINE_STUB_FUNCTION):
- * jit/JITStubs.h:
- (JSC::):
-
-2010-05-09 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Reserve a large-ish initial capacity for Lexer::m_buffer16.
-
- SunSpider says 0.3% faster.
-
- m_buffer16 is used when parsing complex strings -- for example, strings
- with escape sequences in them. These kinds of strings can be really long,
- and we want to avoid repeatedly copying as we grow m_buffer16.
-
- The net memory cost is quite low, since it's proporitional to source
- code we already have in memory, and we throw away m_buffer16 right when
- we're done parsing.
-
- * parser/Lexer.cpp:
- (JSC::Lexer::Lexer): No need to reserve initial capacity in our constructor,
- since setCode will be called before we're asked to lex anything.
- (JSC::Lexer::setCode): Reserve enough space to lex half the source code
- as a complex string without having to copy.
- (JSC::Lexer::clear): No need to reserve initial capacity here either,
- since setCode will be called before we're asked to lex anything.
-
-2010-05-09 Laszlo Gombos <laszlo.1.gombos@nokia.com>
- Reviewed by Eric Seidel.
-
- [Qt] Remove YARR configuration rules from Qt make system
- https://bugs.webkit.org/show_bug.cgi?id=38819
-
- Setting YARR based on JIT seeting is now in Platform.h
- for all ports. This patch essentially reverses r49238.
-
- * JavaScriptCore.pri:
-
-2010-05-09 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Maciej Stachowiak.
-
- Improve string indexing performance
- https://bugs.webkit.org/show_bug.cgi?id=38814
-
- Add an assembly stub to do indexed loads from strings much
- more cheaply than the current stub dispatch logic. We can
- do this because we are able to make guarantees about the
- register contents when entering the stub so the call overhead
- is negligible.
-
- * jit/JIT.h:
- * jit/JITInlineMethods.h:
- * jit/JITOpcodes.cpp:
- * jit/JITPropertyAccess.cpp:
- (JSC::JIT::stringGetByValStubGenerator):
- (JSC::JIT::emitSlow_op_get_by_val):
- Moved from JITOpcodes.cpp to keep the slowcase next to
- the normal case codegen as we do for everything else.
- * jit/JITPropertyAccess32_64.cpp:
- (JSC::JIT::stringGetByValStubGenerator):
- (JSC::JIT::emitSlow_op_get_by_val):
- * jit/JSInterfaceJIT.h:
- (JSC::JSInterfaceJIT::emitFastArithImmToInt):
-
-2010-05-09 Maciej Stachowiak <mjs@apple.com>
-
- Fixed version of: "Optimized o[s] where o is a cell and s is a string"
- https://bugs.webkit.org/show_bug.cgi?id=38815
-
- Fixed the previous patch for this from Geoff Garen.
-
- The two problems were a missing exception check and a PropertySlot
- initialized improperly, leading to crashes and failures in the case
- of getters accessed with bracket syntax.
+2010-05-28 Geoffrey Garen <ggaren@apple.com>
- Previous patch:
+ Reviewed by Sam Weinig, Gavin Barraclough, Oliver Hunt.
- Optimized o[s] where o is a cell and s is a string, removing some old
- code that wasn't really tuned for the JIT.
+ Simplified the host calling convention.
- SunSpider says 0.8% faster.
-
- * jit/JITStubs.cpp:
- (JSC::DEFINE_STUB_FUNCTION):
- * runtime/JSCell.h:
-
-2010-05-08 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Unreviewed, build fix.
-
- Fix missing terminating ' character warning
-
- The warning has been only seen on the Gtk buildbots.
-
- * wtf/Platform.h:
-
-2010-05-08 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Gavin Barraclough.
-
- Refactor YARR and YARR_JIT default rules in Platform.h
- https://bugs.webkit.org/show_bug.cgi?id=38727
-
- Turn on YARR and YARR JIT by default of JIT is enabled.
- Ports can overrule this default decisions as they wish.
-
- * wtf/Platform.h:
-
-2010-05-08 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- Split JSVALUE32_64 code out of JITOpcodes.cpp and into JITOpcodes32_64.cpp
- https://bugs.webkit.org/show_bug.cgi?id=38808
-
- * GNUmakefile.am:
- * JavaScriptCore.gypi:
- * JavaScriptCore.pro:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * jit/JITOpcodes.cpp:
- * jit/JITOpcodes32_64.cpp: Added.
- (JSC::JIT::privateCompileCTIMachineTrampolines):
- (JSC::JIT::emit_op_mov):
- (JSC::JIT::emit_op_end):
- (JSC::JIT::emit_op_jmp):
- (JSC::JIT::emit_op_loop_if_lesseq):
- (JSC::JIT::emitSlow_op_loop_if_lesseq):
- (JSC::JIT::emit_op_new_object):
- (JSC::JIT::emit_op_instanceof):
- (JSC::JIT::emitSlow_op_instanceof):
- (JSC::JIT::emit_op_new_func):
- (JSC::JIT::emit_op_get_global_var):
- (JSC::JIT::emit_op_put_global_var):
- (JSC::JIT::emit_op_get_scoped_var):
- (JSC::JIT::emit_op_put_scoped_var):
- (JSC::JIT::emit_op_tear_off_activation):
- (JSC::JIT::emit_op_tear_off_arguments):
- (JSC::JIT::emit_op_new_array):
- (JSC::JIT::emit_op_resolve):
- (JSC::JIT::emit_op_to_primitive):
- (JSC::JIT::emitSlow_op_to_primitive):
- (JSC::JIT::emit_op_strcat):
- (JSC::JIT::emit_op_resolve_base):
- (JSC::JIT::emit_op_resolve_skip):
- (JSC::JIT::emit_op_resolve_global):
- (JSC::JIT::emitSlow_op_resolve_global):
- (JSC::JIT::emit_op_not):
- (JSC::JIT::emitSlow_op_not):
- (JSC::JIT::emit_op_jfalse):
- (JSC::JIT::emitSlow_op_jfalse):
- (JSC::JIT::emit_op_jtrue):
- (JSC::JIT::emitSlow_op_jtrue):
- (JSC::JIT::emit_op_jeq_null):
- (JSC::JIT::emit_op_jneq_null):
- (JSC::JIT::emit_op_jneq_ptr):
- (JSC::JIT::emit_op_jsr):
- (JSC::JIT::emit_op_sret):
- (JSC::JIT::emit_op_eq):
- (JSC::JIT::emitSlow_op_eq):
- (JSC::JIT::emit_op_neq):
- (JSC::JIT::emitSlow_op_neq):
- (JSC::JIT::compileOpStrictEq):
- (JSC::JIT::emit_op_stricteq):
- (JSC::JIT::emitSlow_op_stricteq):
- (JSC::JIT::emit_op_nstricteq):
- (JSC::JIT::emitSlow_op_nstricteq):
- (JSC::JIT::emit_op_eq_null):
- (JSC::JIT::emit_op_neq_null):
- (JSC::JIT::emit_op_resolve_with_base):
- (JSC::JIT::emit_op_new_func_exp):
- (JSC::JIT::emit_op_throw):
- (JSC::JIT::emit_op_get_pnames):
- (JSC::JIT::emit_op_next_pname):
- (JSC::JIT::emit_op_push_scope):
- (JSC::JIT::emit_op_pop_scope):
- (JSC::JIT::emit_op_to_jsnumber):
- (JSC::JIT::emitSlow_op_to_jsnumber):
- (JSC::JIT::emit_op_push_new_scope):
- (JSC::JIT::emit_op_catch):
- (JSC::JIT::emit_op_jmp_scopes):
- (JSC::JIT::emit_op_switch_imm):
- (JSC::JIT::emit_op_switch_char):
- (JSC::JIT::emit_op_switch_string):
- (JSC::JIT::emit_op_new_error):
- (JSC::JIT::emit_op_debug):
- (JSC::JIT::emit_op_enter):
- (JSC::JIT::emit_op_enter_with_activation):
- (JSC::JIT::emit_op_create_arguments):
- (JSC::JIT::emit_op_init_arguments):
- (JSC::JIT::emit_op_convert_this):
- (JSC::JIT::emitSlow_op_convert_this):
- (JSC::JIT::emit_op_profile_will_call):
- (JSC::JIT::emit_op_profile_did_call):
-
-2010-05-08 Gabor Loki <loki@webkit.org>
-
- Reviewed by Gavin Barraclough.
-
- Fix halfword loads on ARM
- https://bugs.webkit.org/show_bug.cgi?id=38741
-
- The BaseIndex and ImplicitAddress are contain 32bit wide offset, but
- the load16 functions were working with 8 bit data (encoded in the
- instruction). If the offset cannot be encoded in an instruction, it
- should be stored in a temporary register.
-
- * assembler/ARMAssembler.h:
- (JSC::ARMAssembler::getOffsetForHalfwordDataTransfer):
- * assembler/MacroAssemblerARM.h:
- (JSC::MacroAssemblerARM::load16):
-
-2010-05-08 Gabor Loki <loki@webkit.org>
-
- Reviewed by Gavin Barraclough.
-
- Fix spanning branch instruction on Cortex-A8 with Thumb-2 JIT
- https://bugs.webkit.org/show_bug.cgi?id=38280
-
- If the 32-bit Thumb-2 branch instruction spans two 4KiB regions and
- the target of the branch falls within the first region it is
- possible for the processor to incorrectly determine the branch
- instruction, and it is also possible in some cases for the processor
- to enter a deadlock state.
-
- * assembler/ARMv7Assembler.h:
- (JSC::ARMv7Assembler::linkJumpAbsolute):
-
-2010-05-08 Adam Barth <abarth@webkit.org>
-
- Reviewed by Darin Fisher.
-
- [WTFURL] Add a buffer for managing the output of the canonicalizer
- https://bugs.webkit.org/show_bug.cgi?id=38671
-
- The canonicalizer produces a stream of canonicalized characters, which
- we will store in a URLBuffer. URLBuffer is quite similar to Vector,
- but serves as an abstraction to isolate us from the underlying
- character storage. In the case of WebKit, we'll probably implement a
- subclass of URLBuffer with Vector. In Chromium, the backing store is a
- std::string, which avoids an unnecessary memcpy that would be caused by
- using Vector instead.
-
- * wtf/url/src/URLBuffer.h: Added.
- (WTF::URLBuffer::URLBuffer):
- (WTF::URLBuffer::~URLBuffer):
- (WTF::URLBuffer::at):
- (WTF::URLBuffer::set):
- (WTF::URLBuffer::capacity):
- (WTF::URLBuffer::length):
- (WTF::URLBuffer::data):
- (WTF::URLBuffer::setLength):
- (WTF::URLBuffer::append):
- (WTF::URLBuffer::grow):
-
-2010-05-08 Eric Seidel <eric@webkit.org>
-
- Unreviewed, just reverting commit.
-
- REGRESSION(59000): r59000 contained all sorts of changes it should not have, needs revert.
- https://bugs.webkit.org/show_bug.cgi?id=38798
-
- * bytecompiler/BytecodeGenerator.cpp:
- (JSC::BytecodeGenerator::emitResolve):
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_resolve_global):
-
-2010-05-04 Jer Noble <jer.noble@apple.com>
-
- Reviewed by Maciej Stachowiak
-
- Safari pegs CPU and drops tons of frames using HTML5 Vimeo player
- <https://bugs.webkit.org/show_bug.cgi?id=34005>
- <rdar://problem/7569713>
+ 22.5% speedup on 32-bit host function calls. 9.5% speedup on 64-bit host
+ function calls.
- Added cancelCallOnMainThread. callOnMainThread should always now be paired
- with cancelCallOnMainThread in situations where the refcon passed to callOnMainThread
- may be dealloced before the main thread function can be dispatched.
+ No change on SunSpider.
- * wtf/MainThread.cpp:
- (WTF::FunctionWithContext::operator == ): Supports the FunctionWithContextFinder predicate functor.
- (WTF::FunctionWithContextFinder::FunctionWithContextFinder): Predicate functor for use with Dequeue::findIf
- (WTF::FunctionWithContextFinder::operator()):
- (WTF::cancelCallOnMainThread):
- * wtf/MainThread.h:
-
-2010-05-07 Oliver Hunt <oliver@apple.com>
-
- Windows build fix.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2010-05-07 Eric Seidel <eric@webkit.org>
+ All JS calls (but not constructs, yet) now go through the normal JS
+ calling convention via the RegisterFile. As a result, the host calling
+ convention, which used to be this
- Unreviewed, rolling out r58990.
- http://trac.webkit.org/changeset/58990
-
- Broke 4 tests on Snow Leopard and Qt.
-
- * jit/JITStubs.cpp:
- (JSC::DEFINE_STUB_FUNCTION):
- * runtime/JSCell.h:
-
-2010-05-07 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- Optimize access to the global object from a function that uses eval
- https://bugs.webkit.org/show_bug.cgi?id=38644
-
- Fix bug where cross scope access to a global var (vs. property) would
- be allowed without checking for intervening dynamic scopes.
-
- * bytecompiler/BytecodeGenerator.cpp:
- (JSC::BytecodeGenerator::emitResolve):
-
-2010-05-07 Oliver Hunt <oliver@apple.com>
-
- 32-bit buildfix.
-
- Macro expansion I stab at thee!
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_resolve_global):
-
-2010-05-07 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Darin Adler.
+ JSValue (JSC_HOST_CALL *NativeFunction)(ExecState*, JSObject*, JSValue thisValue, const ArgList&)
+
+ is now this
- Optimized o[s] where o is a cell and s is a string, removing some old
- code that wasn't really tuned for the JIT.
+ JSValue (JSC_HOST_CALL *NativeFunction)(ExecState*)
+
+ Callee, 'this', and argument access all hapen relative to the ExecState*,
+ which is a pointer into the RegisterFile.
- SunSpider says 0.8% faster.
-
- * jit/JITStubs.cpp:
- (JSC::DEFINE_STUB_FUNCTION):
- * runtime/JSCell.h:
-
-2010-05-07 Oliver Hunt <oliver@apple.com>
-
- Windows build fix.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2010-05-07 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Geoffrey Garen.
-
- Optimize access to the global object from a function that uses eval
- https://bugs.webkit.org/show_bug.cgi?id=38644
-
- Add op_resolve_global_dynamic, a variant of op_resolve_global that
- checks each node in the scope chain for dynamically inserted properties
- and falls back to the normal resolve logic in that case.
-
- * JavaScriptCore.exp:
- * bytecode/CodeBlock.cpp:
- (JSC::isGlobalResolve):
- (JSC::CodeBlock::printStructures):
- (JSC::CodeBlock::dump):
- (JSC::CodeBlock::derefStructures):
- * bytecode/Opcode.h:
- * bytecompiler/BytecodeGenerator.cpp:
- (JSC::BytecodeGenerator::findScopedProperty):
- Now take an additional reference parameter to used to indicate that
- there were nodes that may gain dynamic properties
- (JSC::BytecodeGenerator::emitResolve):
- (JSC::BytecodeGenerator::emitResolveBase):
- (JSC::BytecodeGenerator::emitResolveWithBase):
- deal with additional argument to findScopedProperty
- * bytecompiler/BytecodeGenerator.h:
- * bytecompiler/NodesCodegen.cpp:
- (JSC::FunctionCallResolveNode::emitBytecode):
- (JSC::PostfixResolveNode::emitBytecode):
- (JSC::PrefixResolveNode::emitBytecode):
- (JSC::ReadModifyResolveNode::emitBytecode):
- (JSC::AssignResolveNode::emitBytecode):
- These functions use findScopedProperty directly in order to
- optimise lookup. They cannot trivially handle any degree of
- dynamism in the lookup so we just give up in such case.
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::resolveGlobalDynamic):
- (JSC::Interpreter::execute):
- (JSC::Interpreter::privateExecute):
- * interpreter/Interpreter.h:
- * jit/JIT.cpp:
- (JSC::JIT::privateCompileMainPass):
- (JSC::JIT::privateCompileSlowCases):
- * jit/JIT.h:
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_resolve_global):
- (JSC::JIT::emit_op_resolve_global_dynamic):
- (JSC::JIT::emitSlow_op_resolve_global):
- (JSC::JIT::emitSlow_op_resolve_global_dynamic):
- Happily resolve_global_dynamic can share the slow case!
- * jit/JITStubs.h:
- (JSC::):
- * runtime/JSActivation.cpp:
- (JSC::JSActivation::isDynamicScope):
- * runtime/JSActivation.h:
- * runtime/JSGlobalObject.cpp:
- (JSC::JSGlobalObject::isDynamicScope):
- * runtime/JSGlobalObject.h:
- * runtime/JSStaticScopeObject.cpp:
- (JSC::JSStaticScopeObject::isDynamicScope):
- * runtime/JSStaticScopeObject.h:
- * runtime/JSVariableObject.h:
-
-2010-05-07 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- Fixed Sputnik failure seen on buildbot.
-
- * runtime/NumberPrototype.cpp:
- (JSC::numberProtoFuncToString): Cast to unsigned before checking magnitude,
- to efficiently exclude negative numbers, which require two characters
- instead of one.
-
-2010-05-07 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Alexey Proskuryakov.
+ This patch comes in two parts.
- Slightly more effective way to guarantee a compile-time constant, at
- least on gcc.
-
- * runtime/NumberPrototype.cpp:
- (JSC::numberProtoFuncToString): Use pointer notation instead of array
- notation, so the compiler treats the string and its contents as constant.
-
-2010-05-07 Adam Barth <abarth@webkit.org>
-
- Reviewed by Alexey Proskuryakov.
-
- [WTFURL] Add core URL parser
- https://bugs.webkit.org/show_bug.cgi?id=38572
-
- This patch adds the core of the URL parser. The URL parser uses a
- templated notion of a code unit to support different string types.
- Later we'll add some non-templated APIs with concrete types that
- clients can use more conveniently.
-
- The URLParser has a couple calls to ASSERT(), which I've commented out
- for now. I'm not 100% sure how to handle the dependency issues there
- yet, so I've punted on the issue for now.
-
- Also, there are a number of methods that are declared public in this
- patch that are only used by the canonicalizer. My plan is to make
- those private or protected and make the canonicalizer a friend of the
- parser. The details will be in a later patch.
-
- * wtf/url/src/URLComponent.h:
- (WTF::URLComponent::fromRange):
- (WTF::URLComponent::isNonEmpty):
- (WTF::URLComponent::isEmptyOrInvalid):
- * wtf/url/src/URLParser.h: Added.
- (WTF::URLParser::):
- (WTF::URLParser::isPossibleAuthorityTerminator):
- (WTF::URLParser::parseAuthority):
- (WTF::URLParser::extractScheme):
- (WTF::URLParser::parseAfterScheme):
- (WTF::URLParser::parseStandardURL):
- (WTF::URLParser::parsePath):
- (WTF::URLParser::parsePathURL):
- (WTF::URLParser::parseMailtoURL):
- (WTF::URLParser::parsePort):
- (WTF::URLParser::extractFileName):
- (WTF::URLParser::extractQueryKeyValue):
- (WTF::URLParser::isURLSlash):
- (WTF::URLParser::shouldTrimFromURL):
- (WTF::URLParser::trimURL):
- (WTF::URLParser::consecutiveSlashes):
- (WTF::URLParser::isPortDigit):
- (WTF::URLParser::nextAuthorityTerminator):
- (WTF::URLParser::parseUserInfo):
- (WTF::URLParser::parseServerInfo):
-
-2010-05-07 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Added a fast path for number-to-character conversion via
- Number.prototype.toString base 36.
+ PART ONE: Functional code changes.
- 0.7% speedup on SunSpider.
-
- * runtime/NumberPrototype.cpp:
- (JSC::numberProtoFuncToString): Made radix interpretation a little more
- efficient by keeping it in int space. Turned "const char" into
- "static const char" just in case. Added a fast path for base 36
- conversion of something that will turn into a character.
-
-2010-05-07 Adam Barth <abarth@webkit.org>
-
- Reviewed by Darin Fisher.
-
- [WTFURL] Add a malloc-backed URLBuffer
- https://bugs.webkit.org/show_bug.cgi?id=38694
-
- This patch adds a URLBuffer that uses new/delete to manage the backing
- store for the buffer.
-
- * wtf/url/src/RawURLBuffer.h: Added.
- (WTF::RawURLBuffer::RawURLBuffer):
- (WTF::RawURLBuffer::~RawURLBuffer):
- (WTF::RawURLBuffer::resize):
-
-2010-05-06 Fumitoshi Ukai <ukai@chromium.org>
-
- Reviewed by Alexey Proskuryakov.
-
- JavaScriptCore/wtf/RandomNumber.h should provide using WTF::*
- https://bugs.webkit.org/show_bug.cgi?id=38719
-
- * wtf/RandomNumber.h:
- Add using directives.
-
-2010-05-06 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Kenneth Rohde Christiansen.
-
- [Qt] Enable YARR_JIT for X86 Mac for QtWebKit
- https://bugs.webkit.org/show_bug.cgi?id=38668
-
- * wtf/Platform.h:
-
-2010-05-06 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Geoff Garen.
-
- Bug 38714 - Add result caching for Math.sin
-
- Math.sin is frequently called with the same operand, caching the result should
- improve performance. CachedTranscendentalFunction adds a generic mechanism to
- cache results for pure functions with the signature "double func(double)", and
- where NaN maps to NaN.
-
- CachedTranscendentalFunction uses a very simple hash function designed to be
- fast to execute since we cannot cache the result, and trivial to JIT generate,
- should we wish to do so.
-
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * runtime/CachedTranscendentalFunction.h: Added.
- (JSC::CachedTranscendentalFunction::CachedTranscendentalFunction):
- (JSC::CachedTranscendentalFunction::~CachedTranscendentalFunction):
- (JSC::CachedTranscendentalFunction::operator()):
- (JSC::CachedTranscendentalFunction::initialize):
- (JSC::CachedTranscendentalFunction::hash):
- * runtime/JSGlobalData.h:
- * runtime/MathObject.cpp:
- (JSC::mathProtoFuncSin):
- * wtf/Platform.h:
-
-2010-05-06 Geoffrey Garen <ggaren@apple.com>
-
- Windows build fix.
-
- * bytecode/SamplingTool.cpp:
- (JSC::SamplingFlags::sample): Use a cast, so Windows will be happy when
- this code is enabled.
- * wtf/Platform.h: Reverted last change to this file, which seems to have
- been accidental.
-
-2010-05-06 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Add compile switch to make debugger keyword plant breakpoint instructions.
-
- * bytecompiler/BytecodeGenerator.cpp:
- (JSC::BytecodeGenerator::emitDebugHook):
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_debug):
- * wtf/Platform.h:
-
-2010-05-06 Oliver Hunt <oliver@apple.com>
-
- Build fix
-
- Fix ARM builds
-
- * assembler/MacroAssemblerARM.h:
- (JSC::MacroAssemblerARM::load16):
- * assembler/MacroAssemblerARMv7.h:
- (JSC::MacroAssemblerARMv7::load16):
-
-2010-05-06 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Geoffrey Garen.
-
- Improve performance of single character string compares
- https://bugs.webkit.org/show_bug.cgi?id=38659
-
- Add logic to the jit to identify comparisons to single character string literals
- and then just perform the comparison inline, rather than ignoring the evidence
- and attempting to perform an integer comparison.
-
- Multiple changes required -- add jnlesseq opcode, add helper function to identify
- single character string constants, add a helper to load single character strings.
- Then add the 32_64 and normal codepaths to the JIT.
-
- * assembler/MacroAssemblerX86Common.h:
- (JSC::MacroAssemblerX86Common::load16):
- * bytecode/CodeBlock.cpp:
- (JSC::CodeBlock::dump):
- * bytecode/Opcode.h:
- * bytecompiler/BytecodeGenerator.cpp:
- (JSC::BytecodeGenerator::emitJumpIfTrue):
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::privateExecute):
- * jit/JIT.cpp:
- (JSC::JIT::privateCompileMainPass):
- (JSC::JIT::privateCompileSlowCases):
- * jit/JIT.h:
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_jnless):
- (JSC::JIT::emitSlow_op_jnless):
- (JSC::JIT::emit_op_jless):
- (JSC::JIT::emitSlow_op_jless):
- (JSC::JIT::emit_op_jlesseq):
- (JSC::JIT::emit_op_jnlesseq):
- (JSC::JIT::emitSlow_op_jlesseq):
- (JSC::JIT::emitSlow_op_jnlesseq):
- * jit/JITArithmetic32_64.cpp:
- (JSC::JIT::emit_op_jnless):
- (JSC::JIT::emitSlow_op_jnless):
- (JSC::JIT::emit_op_jless):
- (JSC::JIT::emitSlow_op_jless):
- (JSC::JIT::emit_op_jlesseq):
- (JSC::JIT::emit_op_jnlesseq):
- (JSC::JIT::emitSlow_op_jlesseq):
- (JSC::JIT::emitSlow_op_jnlesseq):
- (JSC::JIT::emitBinaryDoubleOp):
- * jit/JITInlineMethods.h:
- (JSC::JIT::emitLoadCharacterString):
- (JSC::JIT::isOperandConstantImmediateChar):
- * jit/JSInterfaceJIT.h:
- (JSC::ThunkHelpers::stringImplDataOffset):
- (JSC::ThunkHelpers::jsStringLengthOffset):
- (JSC::ThunkHelpers::jsStringValueOffset):
- Moved from ThunkGenerators to make it possible to share.
- * jit/ThunkGenerators.cpp:
-
-2010-05-06 Martin Robinson <mrobinson@webkit.org>
-
- Reviewed by Gustavo Noronha Silva.
-
- [GTK] Enable DOM clipboard and drag-and-drop access
- https://bugs.webkit.org/show_bug.cgi?id=30623
-
- Convert dragging portion of drag-and-drop to use DataObjectGtk.
-
- * wtf/gobject/GRefPtr.h: Add forward declarations for GObject functions.
-
-2010-05-06 Steve Block <steveblock@google.com>
-
- Reviewed by Eric Seidel.
-
- MAC_JAVA_BRIDGE should be renamed JAVA_BRIDGE
- https://bugs.webkit.org/show_bug.cgi?id=38544
-
- * wtf/Platform.h:
-
-2010-05-06 Adam Barth <abarth@webkit.org>
-
- Reviewed by Maciej Stachowiak.
-
- [WTFURL] Add a class to represent the segments of a URL
- https://bugs.webkit.org/show_bug.cgi?id=38566
-
- When paired with a string, this class represents a parsed URL.
-
- * wtf/url/src/URLSegments.cpp: Added.
- (WTF::URLSegments::length):
- (WTF::URLSegments::charactersBefore):
- * wtf/url/src/URLSegments.h: Added.
- (WTF::URLSegments::):
- (WTF::URLSegments::URLSegments):
- * wtf/url/wtfurl.gyp:
-
-2010-05-05 Tony Gentilcore <tonyg@chromium.org>
-
- Reviewed by Adam Barth.
-
- Adding comment with link to RefPtr documentation.
- https://bugs.webkit.org/show_bug.cgi?id=38601
-
- * wtf/RefPtr.h:
-
-2010-05-05 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Darin Adler.
-
- Bug 38604 - workers-gc2 crashing on Qt
-
- This appears to be due to a couple of issues.
- (1) When the atomic string table is deleted it does not clear the 'inTable' bit
- on AtomicStrings - it implicitly assumes that all AtomicStrings have already
- been deleted at this point (otherwise they will crash in their destructor when
- they try to remove themselves from the atomic string table).
- (2) We don't fix the ordering in which WTF::WTFThreadData and
- WebCore::ThreadGlobalData are destructed.
-
- We should make sure that ThreadGlobalData is cleaned up before worker threads
- terminate and WTF::WTFThreadData is destroyed, and we should clear the inTable
- bit of members on atomic string table destruction.
-
- WTF changes (fix issue 1, above) - ensure inTable property is cleared when the
- atomic string table is destroyed (also, rename InTable to IsAtomic, to make it
- clear which table we are refering to!)
-
- * wtf/text/AtomicString.cpp:
- (WebCore::AtomicStringTable::destroy):
- (WebCore::CStringTranslator::translate):
- (WebCore::UCharBufferTranslator::translate):
- (WebCore::HashAndCharactersTranslator::translate):
- (WebCore::AtomicString::add):
- * wtf/text/StringImpl.cpp:
- (WebCore::StringImpl::~StringImpl):
- * wtf/text/StringImpl.h:
- (WebCore::StringImpl::isAtomic):
- (WebCore::StringImpl::setIsAtomic):
- * wtf/text/StringImplBase.h:
-
-2010-05-05 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Geoffrey Garen.
-
- Make Array.join specialised for actual arrays
- https://bugs.webkit.org/show_bug.cgi?id=38592
-
- Bring Array.join in line with the other array methods by specialising for
- this === an array.
-
- * runtime/ArrayPrototype.cpp:
- (JSC::arrayProtoFuncJoin):
-
-2010-05-04 Yongjun Zhang <yongjun_zhang@apple.com>
-
- Reviewed by Darin Adler.
-
- WebKit crashes at DebuggerCallFrame::functionName() if m_callFrame is the top global callframe.
- https://bugs.webkit.org/show_bug.cgi?id=38535
-
- Don't call asFunction if callee is not a FunctionType to prevent assertion failure
- in JSCell::isObject().
+ * wtf/Platform.h: Disabled optimized calls on platforms I didn't test.
+ We can re-enable once we verify that host calls on these platforms are
+ correct.
* debugger/DebuggerCallFrame.cpp:
(JSC::DebuggerCallFrame::functionName):
- (JSC::DebuggerCallFrame::calculatedFunctionName):
-
-2010-05-04 Steve Falkenburg <sfalken@apple.com>
-
- Remove redundant exports to fix Windows build warnings.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2010-05-04 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
-
- Reviewed by Holger Freyther.
-
- Fix a memory leak inside the QScriptValue.
-
- QSciptValuePrivate::toString should release all temporary variables.
-
- [Qt] QScriptValue::toString have a memory leak.
- https://bugs.webkit.org/show_bug.cgi?id=38112
-
- * qt/api/qscriptvalue_p.h:
- (QScriptValuePrivate::toString):
-
-2010-05-04 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk>
-
- Reviewed by Darin Adler.
-
- Does not work on SPARC because of alignment issues
- https://bugs.webkit.org/show_bug.cgi?id=38455
-
- Use AllocAlignmentInteger instead of void* on pageheap_memory to
- avoid crashing at runtime in some architectures. Investigated by
- Mike Hommey <mh@glandium.org>, change suggested by Darin Adler.
-
- * wtf/FastMalloc.cpp:
-
-2010-05-04 Adam Barth <abarth@webkit.org>
-
- Reviewed by Maciej Stachowiak.
-
- Add first WTFURL file
- https://bugs.webkit.org/show_bug.cgi?id=38470
-
- This class represents a component of a URL, such as the scheme or path.
- Essentially, the class is an index into a string buffer.
-
- * wtf/url: Added.
- - There was some discussion about where to put the URL library.
- There are a number of reasonable options, but putting the library
- in the WTF directory seems like a reasonable alternative. This
- location will make more sense once WTF is moved out of
- JavaScriptCore and into a top-level directory.
- * wtf/url/src: Added.
- - I've added this extra directory to the usual structure because we
- eventually want a "public" folder that defines the public
- interface to this library that clients outside of svn.webkit.org
- can rely upon, much like the various subfolders of the WebKit
- directory often define a public API.
- * wtf/url/src/URLComponent.h: Added.
- - I've added this somewhat trivial class to get the ball rolling.
- (WTF::URLComponent::URLComponent):
- (WTF::URLComponent::isValid):
- (WTF::URLComponent::isNonempty):
- (WTF::URLComponent::reset):
- (WTF::URLComponent::operator==):
- (WTF::URLComponent::begin):
- (WTF::URLComponent::setBegin):
- (WTF::URLComponent::length):
- (WTF::URLComponent::setLength):
- (WTF::URLComponent::end):
- * wtf/url/wtfurl.gyp: Added.
- - WTFURL will be an independently buildable library, hence the
- beginnings of a wtfurl.gyp file.
-
-2010-05-03 Stephanie Lewis <slewis@apple.com>
-
- Reviewed by Geoff Garen.
-
- https://bugs.webkit.org/show_bug.cgi?id=38368
- <rdar://problem/7834433> REGRESSSION: 1.5% PLT regression due to 56028
- (return memory quicker).
- Instead of returning everything but the smallest spans spread out
- the spans kept over several size lists.
-
- * wtf/FastMalloc.cpp:
- (WTF::TCMalloc_PageHeap::scavenge):
-
-2010-05-03 James Robinson <jamesr@chromium.org>
-
- Reviewed by Eric Seidel.
-
- Clean up a few compiler warnings
- https://bugs.webkit.org/show_bug.cgi?id=38073
-
- * wtf/text/StringImpl.cpp:
- (WebCore::StringImpl::ascii):
-
-2010-05-03 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (reverting previous commit).
-
- Rolling out r58114 - this introduced memory leaks of
- AtomicStrings then workers terminated.
-
- * GNUmakefile.am:
- * JavaScriptCore.gypi:
- * JavaScriptCore.vcproj/WTF/WTF.vcproj:
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * jit/ThunkGenerators.cpp:
- (JSC::ThunkHelpers::stringImplDataOffset):
- * runtime/Identifier.cpp:
- (JSC::IdentifierTable::~IdentifierTable):
- (JSC::IdentifierTable::add):
- (JSC::IdentifierCStringTranslator::hash):
- (JSC::IdentifierCStringTranslator::equal):
- (JSC::IdentifierCStringTranslator::translate):
- (JSC::Identifier::add):
- (JSC::IdentifierUCharBufferTranslator::hash):
- (JSC::IdentifierUCharBufferTranslator::equal):
- (JSC::IdentifierUCharBufferTranslator::translate):
- (JSC::Identifier::addSlowCase):
- * runtime/Identifier.h:
- * runtime/JSGlobalData.cpp:
- (JSC::JSGlobalData::JSGlobalData):
- (JSC::JSGlobalData::~JSGlobalData):
- * runtime/JSGlobalData.h:
- * wtf/WTFThreadData.cpp:
- (WTF::WTFThreadData::WTFThreadData):
- (WTF::WTFThreadData::~WTFThreadData):
- * wtf/WTFThreadData.h:
- (JSC::IdentifierTable::remove):
- (JSC::IdentifierTable::literalTable):
- (WTF::WTFThreadData::atomicStringTable):
- * wtf/text/AtomicString.cpp:
- (WebCore::AtomicStringTable::create):
- (WebCore::AtomicStringTable::table):
- (WebCore::AtomicStringTable::destroy):
- (WebCore::stringTable):
- (WebCore::CStringTranslator::hash):
- (WebCore::CStringTranslator::equal):
- (WebCore::CStringTranslator::translate):
- (WebCore::operator==):
- (WebCore::AtomicString::add):
- (WebCore::equal):
- (WebCore::UCharBufferTranslator::hash):
- (WebCore::UCharBufferTranslator::equal):
- (WebCore::UCharBufferTranslator::translate):
- (WebCore::HashAndCharactersTranslator::hash):
- (WebCore::HashAndCharactersTranslator::equal):
- (WebCore::HashAndCharactersTranslator::translate):
- (WebCore::AtomicString::find):
- (WebCore::AtomicString::remove):
- * wtf/text/AtomicStringTable.h: Removed.
- * wtf/text/StringImpl.cpp:
- (WebCore::StringImpl::~StringImpl):
- * wtf/text/StringImpl.h:
- (WebCore::StringImpl::inTable):
- (WebCore::StringImpl::setInTable):
- (WebCore::equal):
- * wtf/text/StringImplBase.h:
- (WTF::StringImplBase::StringImplBase):
-
-2010-05-03 Kevin Watters <kevinwatters@gmail.com>
-
- Reviewed by Kevin Ollivier.
-
- [wx] Implement scheduleDispatchFunctionsOnMainThread for wx port.
- https://bugs.webkit.org/show_bug.cgi?id=38480
-
- * wtf/wx/MainThreadWx.cpp:
- (wxCallAfter::wxCallAfter):
- (wxCallAfter::OnCallback):
- (WTF::scheduleDispatchFunctionsOnMainThread):
-
-2010-05-03 Kevin Watters <kevinwatters@gmail.com>
-
- Reviewed by Kevin Ollivier.
-
- [wx] Build and use Mac's ComplexTextController to support complex text in wx.
- https://bugs.webkit.org/show_bug.cgi?id=38482
-
- * wtf/Platform.h:
-
-2010-05-03 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Maciej Stachowiak.
-
- Interpreter crashes due to incorrect refcounting of cached structures.
- https://bugs.webkit.org/show_bug.cgi?id=38491
- rdar://problem/7926160
-
- Make sure we ref/deref structures used for cached custom property getters
-
- * bytecode/CodeBlock.cpp:
- (JSC::CodeBlock::derefStructures):
- (JSC::CodeBlock::refStructures):
-
-2010-05-02 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Eric Seidel.
-
- [Qt] Enable JIT for QtWebKit on Symbian
- https://bugs.webkit.org/show_bug.cgi?id=38339
-
- JIT on Symbian has been stable for quite some time, it
- is time to turn it on by default.
-
- * wtf/Platform.h:
-
-2010-04-29 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- Add codegen support for unsigned right shift
- https://bugs.webkit.org/show_bug.cgi?id=38375
-
- Expose unsigned right shift in the macro assembler, and make use of it
- from the jit. Currently if the result is outside the range 0..2^31-1
- we simply fall back to the slow case, even in JSVALUE64 and JSVALUE32_64
- where technically we could still return an immediate value.
-
- * assembler/MacroAssemblerARM.h:
- (JSC::MacroAssemblerARM::urshift32):
- * assembler/MacroAssemblerARMv7.h:
- (JSC::MacroAssemblerARMv7::urshift32):
- * assembler/MacroAssemblerX86Common.h:
- (JSC::MacroAssemblerX86Common::urshift32):
- * assembler/X86Assembler.h:
- (JSC::X86Assembler::):
- (JSC::X86Assembler::shrl_i8r):
- (JSC::X86Assembler::shrl_CLr):
- Add unsigned right shift to the x86 assembler
- * jit/JIT.cpp:
- (JSC::JIT::privateCompileMainPass):
- (JSC::JIT::privateCompileSlowCases):
- op_rshift no longer simply get thrown to a stub function
- * jit/JIT.h:
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_urshift):
- (JSC::JIT::emitSlow_op_urshift):
- JSVALUE32 and JSVALUE64 implementation. Only supports
- double lhs in JSVALUE64.
- * jit/JITArithmetic32_64.cpp:
- (JSC::JIT::emit_op_rshift):
- (JSC::JIT::emitSlow_op_rshift):
- (JSC::JIT::emit_op_urshift):
- (JSC::JIT::emitSlow_op_urshift):
- Refactor right shift code to have shared implementation between signed
- and unsigned versions.
-
-2010-04-29 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- Handle double on righthand side of a right shift
- https://bugs.webkit.org/show_bug.cgi?id=38363
-
- In 64-bit we support right shift of a double, and there's no
- reason not to in 32-bit either. This is a 1.1% sunspider
- improvement in 32bit.
-
- Given high performance javascript code frequently makes
- use of bit operators to perform double->int conversion i'll
- follow this patch up with similar patches for bitwise 'and'
- and 'or'.
-
- * jit/JITArithmetic32_64.cpp:
- (JSC::JIT::emit_op_rshift):
- (JSC::JIT::emitSlow_op_rshift):
-
-2010-04-29 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Geoff Garen.
-
- Hoist JSVALUE32_64 arithmetic implementations into a separate file.
-
- * GNUmakefile.am:
- * JavaScriptCore.gypi:
- * JavaScriptCore.pro:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emitSlow_op_jnless):
- (JSC::JIT::emitSlow_op_jless):
- (JSC::JIT::emitSlow_op_jnlesseq):
- (JSC::JIT::emit_op_mod):
- (JSC::JIT::compileBinaryArithOpSlowCase):
- (JSC::JIT::emit_op_div):
- (JSC::JIT::compileBinaryArithOp):
- * jit/JITArithmetic32_64.cpp: Added.
- (JSC::JIT::emit_op_negate):
- (JSC::JIT::emitSlow_op_negate):
- (JSC::JIT::emit_op_jnless):
- (JSC::JIT::emitSlow_op_jnless):
- (JSC::JIT::emit_op_jless):
- (JSC::JIT::emitSlow_op_jless):
- (JSC::JIT::emit_op_jnlesseq):
- (JSC::JIT::emitSlow_op_jnlesseq):
- (JSC::JIT::emit_op_lshift):
- (JSC::JIT::emitSlow_op_lshift):
- (JSC::JIT::emit_op_rshift):
- (JSC::JIT::emitSlow_op_rshift):
- (JSC::JIT::emit_op_bitand):
- (JSC::JIT::emitSlow_op_bitand):
- (JSC::JIT::emit_op_bitor):
- (JSC::JIT::emitSlow_op_bitor):
- (JSC::JIT::emit_op_bitxor):
- (JSC::JIT::emitSlow_op_bitxor):
- (JSC::JIT::emit_op_bitnot):
- (JSC::JIT::emitSlow_op_bitnot):
- (JSC::JIT::emit_op_post_inc):
- (JSC::JIT::emitSlow_op_post_inc):
- (JSC::JIT::emit_op_post_dec):
- (JSC::JIT::emitSlow_op_post_dec):
- (JSC::JIT::emit_op_pre_inc):
- (JSC::JIT::emitSlow_op_pre_inc):
- (JSC::JIT::emit_op_pre_dec):
- (JSC::JIT::emitSlow_op_pre_dec):
- (JSC::JIT::emit_op_add):
- (JSC::JIT::emitAdd32Constant):
- (JSC::JIT::emitSlow_op_add):
- (JSC::JIT::emit_op_sub):
- (JSC::JIT::emitSub32Constant):
- (JSC::JIT::emitSlow_op_sub):
- (JSC::JIT::emitBinaryDoubleOp):
- (JSC::JIT::emit_op_mul):
- (JSC::JIT::emitSlow_op_mul):
- (JSC::JIT::emit_op_div):
- (JSC::JIT::emitSlow_op_div):
- (JSC::JIT::emit_op_mod):
- (JSC::JIT::emitSlow_op_mod):
-
-2010-04-29 Zoltan Herczeg <zherczeg@webkit.org>
-
- Reviewed by Oliver Hunt
-
- Add sqrt() instruction support for ARM assembler (using VFP)
- https://bugs.webkit.org/show_bug.cgi?id=38312
-
- * assembler/ARMAssembler.h:
- (JSC::ARMAssembler::):
- (JSC::ARMAssembler::fsqrtd_r):
- * assembler/MacroAssemblerARM.h:
- (JSC::MacroAssemblerARM::supportsFloatingPointSqrt):
- (JSC::MacroAssemblerARM::sqrtDouble):
-
-2010-04-29 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- [Qt] Refactor qtscriptglobal.h
- https://bugs.webkit.org/show_bug.cgi?id=37953
-
- Use the same pattern in qtscriptglobal.h as in
- qwebkitglobal.h without checking for specific OSs.
-
- * qt/api/qtscriptglobal.h:
-
-2010-04-29 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- Small cleanup.
-
- QScriptValuePrivate constructor shouldn't take QScriptEngine pointer
- as a parameter, because it breaks a private / public separation rule.
- QScriptEnginePrivate::get(QScriptEngine*) should return
- a QScriptEnginePrivate pointer instead of a QScriptEnginePtr, it simplifies
- implementation.
-
- [Qt] QScriptValuePrivate class needs some cleanup.
- https://bugs.webkit.org/show_bug.cgi?id=37729
-
- * qt/api/qscriptengine_p.h:
- (QScriptEnginePrivate::get):
- * qt/api/qscriptvalue.cpp:
- (QScriptValue::QScriptValue):
- * qt/api/qscriptvalue_p.h:
- (QScriptValuePrivate::QScriptValuePrivate):
-
-2010-04-29 Kwang Yul Seo <skyul@company100.net>
-
- Reviewed by Simon Hausmann.
-
- [WINCE] Export g_stackBase with JS_EXPORTDATA
- https://bugs.webkit.org/show_bug.cgi?id=37437
-
- Export g_stackBase with JS_EXPORTDATA as it is used by SharedTimerWince.cpp.
-
- * runtime/Collector.cpp:
-
-2010-04-28 Oliver Hunt <oliver@apple.com>
-
- Do an unordered compare so that we don't treat NaN incorrectly.
-
- RS=Gavin Barraclough
-
- * jit/ThunkGenerators.cpp:
- (JSC::powThunkGenerator):
-
-2010-04-28 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- Add fast paths for Math.pow and Math.sqrt
- https://bugs.webkit.org/show_bug.cgi?id=38294
-
- Add specialized thunks for Math.pow and Math.sqrt.
- This requires adding a sqrtDouble function to the MacroAssembler
- and sqrtsd to the x86 assembler.
-
- Math.pow is slightly more complicated, in that we have
- to implement exponentiation ourselves rather than relying
- on hardware support. The inline exponentiation is restricted
- to positive integer exponents on a numeric base. Exponentiation
- is finally performed through the "Exponentiation by Squaring"
- algorithm.
-
- * assembler/AbstractMacroAssembler.h:
- (JSC::AbstractMacroAssembler::ImmPtr::ImmPtr):
- * assembler/MacroAssemblerARM.h:
- (JSC::MacroAssemblerARM::supportsFloatingPointSqrt):
- (JSC::MacroAssemblerARM::loadDouble):
- (JSC::MacroAssemblerARM::sqrtDouble):
- * assembler/MacroAssemblerARMv7.h:
- (JSC::MacroAssemblerARMv7::supportsFloatingPointSqrt):
- (JSC::MacroAssemblerARMv7::sqrtDouble):
- * assembler/MacroAssemblerX86.h:
- (JSC::MacroAssemblerX86::loadDouble):
- (JSC::MacroAssemblerX86::supportsFloatingPointSqrt):
- * assembler/MacroAssemblerX86Common.h:
- (JSC::MacroAssemblerX86Common::sqrtDouble):
- * assembler/MacroAssemblerX86_64.h:
- (JSC::MacroAssemblerX86_64::loadDouble):
- (JSC::MacroAssemblerX86_64::supportsFloatingPointSqrt):
- * assembler/X86Assembler.h:
- (JSC::X86Assembler::):
- (JSC::X86Assembler::movsd_mr):
- (JSC::X86Assembler::sqrtsd_rr):
- (JSC::X86Assembler::X86InstructionFormatter::twoByteOp):
- (JSC::X86Assembler::X86InstructionFormatter::memoryModRM):
- * create_hash_table:
- * jit/JIT.h:
- * jit/JITInlineMethods.h:
- * jit/JITOpcodes.cpp:
- * jit/JITStubs.h:
- (JSC::JITThunks::ctiNativeCallThunk):
- * jit/JSInterfaceJIT.h:
- (JSC::JSInterfaceJIT::emitLoadDouble):
- (JSC::JSInterfaceJIT::emitJumpIfImmediateNumber):
- (JSC::JSInterfaceJIT::emitJumpIfNotImmediateNumber):
- (JSC::JSInterfaceJIT::emitLoadInt32):
- * jit/SpecializedThunkJIT.h:
- (JSC::SpecializedThunkJIT::loadDoubleArgument):
- (JSC::SpecializedThunkJIT::loadInt32Argument):
- (JSC::SpecializedThunkJIT::returnJSValue):
- (JSC::SpecializedThunkJIT::returnDouble):
- (JSC::SpecializedThunkJIT::finalize):
- * jit/ThunkGenerators.cpp:
- (JSC::sqrtThunkGenerator):
- (JSC::powThunkGenerator):
- * jit/ThunkGenerators.h:
- * runtime/Executable.h:
- (JSC::NativeExecutable::NativeExecutable):
- * runtime/JSFunction.cpp:
- (JSC::JSFunction::JSFunction):
-
-2010-04-28 Mike Thole <mthole@apple.com>
-
- Reviewed by Mark Rowe.
-
- Reenable WTF_USE_PROTECTION_SPACE_AUTH_CALLBACK now that an
- exports file for it has been added.
-
- * wtf/Platform.h:
-
-2010-04-28 Mike Thole <mthole@apple.com>
-
- Build fix, not reviewed.
-
- * wtf/Platform.h:
- Disable WTF_USE_PROTECTION_SPACE_AUTH_CALLBACK until an exports file is created.
-
-2010-04-28 Mike Thole <mthole@apple.com>
-
- Reviewed by David Kilzer.
-
- Add canAuthenticateAgainstProtectionSpace() to frame loader so that a protection space
- can be inspected before attempting to authenticate against it
- https://bugs.webkit.org/show_bug.cgi?id=38271
-
- * wtf/Platform.h: Add WTF_USE_PROTECTION_SPACE_AUTH_CALLBACK define.
-
-2010-04-28 Darin Adler <darin@apple.com>
-
- Reviewed by Sam Weinig.
-
- Don't use CFAbsoluteTimeGetCurrent on Mac OS X, since it's just a cover
- for gettimeofday anyway.
-
- * wtf/CurrentTime.cpp:
- (WTF::currentTime): Remove the CF version of this. Change the "other POSIX"
- version to pass 0 for the time zone instead of ignoring a return value.
- Also get rid of unneeded type casts, since operations involving both
- integers and doubles are always evaluated as doubles in C without explicit
- type casting.
-
-2010-04-28 Darin Fisher <darin@chromium.org>
-
- Reviewed by David Levin.
-
- [Chromium] callOnMainThread should equate to MessageLoop::PostTask
- https://bugs.webkit.org/show_bug.cgi?id=38276
-
- * JavaScriptCore.gyp/JavaScriptCore.gyp:
- * wtf/MainThread.cpp:
- * wtf/chromium/ChromiumThreading.h:
- * wtf/chromium/MainThreadChromium.cpp:
- (WTF::initializeMainThread):
- (WTF::callOnMainThread):
- (WTF::callOnMainThreadAndWait):
- (WTF::setMainThreadCallbacksPaused):
- (WTF::isMainThread):
-
-2010-04-28 Simon Hausmann <simon.hausmann@nokia.com>, Kent Hansen <kent.hansen@nokia.com>
-
- Reviewed by Darin Adler.
-
- JSC's currentThreadStackBase is not reentrant on some platforms
- https://bugs.webkit.org/show_bug.cgi?id=37195
-
- This function needs to be reentrant to avoid memory corruption on platforms where
- the implementation uses global variables.
-
- This patch adds a mutex lock where necessary and makes the Symbian implementation
- reentrant.
-
- * runtime/Collector.cpp:
- (JSC::currentThreadStackBaseMutex):
- (JSC::currentThreadStackBase):
-
-2010-04-28 Thiago Macieira <thiago.macieira@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- Fix compilation with gcc 3.4.
-
- AtomicStringImpl.h:29: error: base `WebCore::StringImpl' with only
- non-default constructor in class without a constructor
-
- * wtf/text/AtomicStringImpl.h:
- (WebCore::AtomicStringImpl::AtomicStringImpl): Provide a default constructor.
- * wtf/text/StringImpl.h: Allow AtomicStringImpl to call a StringImpl constructor through a friend declaration.
-
-2010-04-27 Stephanie Lewis <slewis@apple.com>
-
- Fix Tiger build.
-
- * wtf/FastMalloc.cpp:
- (WTF::TCMalloc_PageHeap::Carve):
-
-2010-04-26 Stephanie Lewis <slewis@apple.com>
-
- Reviewed by Geoff Garen.
-
- https://bugs.webkit.org/show_bug.cgi?id=38154 FastMalloc calls madvise too often.
- <rdar://problem/7834433> REGRESSSION: 1.5% PLT regression due to 56028 (return memory quicker).
- To save on madvise calls when recommitting memory recommit the entire span and then carve it
- instead of carving the span up and only committing the part that will be used immediately.
-
- * wtf/FastMalloc.cpp:
- (WTF::TCMalloc_PageHeap::New):
- (WTF::TCMalloc_PageHeap::AllocLarge):
- (WTF::TCMalloc_PageHeap::Carve):
-
-2010-04-26 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Maciej Stachowiak.
-
- Add specialized thunks for a char code related string functions
- https://bugs.webkit.org/show_bug.cgi?id=38177
-
- This is a simple extension to my prior patch. Basically hoist the
- existing character loading logic from the charCodeAt thunk and into
- a helper function, then add a helper to load strings from the small
- string cache. This allows trivial implementations of fromCharCode
- and charAt.
-
- * create_hash_table:
- * jit/SpecializedThunkJIT.h:
- (JSC::SpecializedThunkJIT::returnJSCell):
- (JSC::SpecializedThunkJIT::tagReturnAsJSCell):
- * jit/ThunkGenerators.cpp:
- (JSC::stringCharLoad):
- (JSC::charToString):
- (JSC::charCodeAtThunkGenerator):
- (JSC::charAtThunkGenerator):
- (JSC::fromCharCodeThunkGenerator):
- * jit/ThunkGenerators.h:
- * runtime/SmallStrings.h:
- (JSC::SmallStrings::singleCharacterStrings):
- * runtime/StringConstructor.cpp:
- (JSC::StringConstructor::StringConstructor):
-
-2010-04-27 Thomas Zander <t.zander@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- [Qt] Fix the build on Symbian on Linux using the Makefile based mkspec
-
- * JavaScriptCore.pri: It is necessary to specify the library search path
- when linking against JavaScriptCore.
-
-2010-04-21 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- Compile fix for Visual Studio 2010
- https://bugs.webkit.org/show_bug.cgi?id=37867
-
- Patch by Prasanth Ullattil <prasanth.ullattil@nokia.com>
-
- * runtime/Structure.cpp:
- (JSC::Structure::transitionTableAdd):
- * wtf/MathExtras.h:
- * wtf/Platform.h:
-
-2010-04-27 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- Rename COMPILER(MSVC7) to COMPILER(MSVC7_OR_LOWER)
-
- * config.h:
- (JSC::Structure::transitionTableAdd):
- * wtf/Assertions.h:
- * wtf/Atomics.h:
- * wtf/CurrentTime.h:
- (WTF::getLocalTime):
- * wtf/Platform.h:
- * wtf/StaticConstructors.h:
- * wtf/StringExtras.h:
- * wtf/Vector.h:
- (WTF::::append):
-
-2010-04-15 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
-
- Reviewed by Tor Arne Vestbø.
-
- [Qt] Fix Mac build break.
-
- https://bugs.webkit.org/show_bug.cgi?id=37867
- - Make sure JavaScriptCore's debug_and_release config follows that
- of WebCore.
- - Use different name for JavaScriptCore target in debug and release
- since they might be written in the same path at the same time on
- parallel builds
- - Consolidate the DESTDIR determination logic in JavaScriptCore.pri
-
- * JavaScriptCore.pri:
- * JavaScriptCore.pro:
-
-2010-04-21 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
-
- Reviewed by Kenneth Rohde Christiansen.
-
- [Qt] Make sure WebKit is not compiled using C++0x.
- https://bugs.webkit.org/show_bug.cgi?id=37867
-
- As the rest of Qt compiles in the C++0x mode, people might start
- compiling it in this mode. WebKit don't support this yet.
-
- Patch by Thiago Macieira <thiago.macieira@nokia.com>
-
- * JavaScriptCore.pro:
-
-2010-04-26 Oliver Hunt <oliver@apple.com>
-
- Fix windows
-
- * jit/SpecializedThunkJIT.h:
- (JSC::SpecializedThunkJIT::argumentToVirtualRegister):
-
-2010-04-26 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- Need to support more efficient dispatch of lightweight builtins
- https://bugs.webkit.org/show_bug.cgi?id=38155
-
- The problem with calling lightweight builtins is that marshalling
- the call from the nitro calling convention to the system calling
- convention is very expensive relative to the cost of the actually
- evaluating the function. To work around this problem this patch
- adds the ability to define a custom thunk for a builtin.
-
- This allows us to use high performance custom implementations of
- the common and sensible versions of simple builtins. This patch
- includes a simple (use of which is currently hardcoded) thunk for
- charCodeAt.
-
- This adds a JSInterfaceJIT subclass called SpecializedThunkJIT
- that has helper functions to remove (or at least reduce) the need
- to have separate thunk implementations for each JSValue encoding.
-
- * GNUmakefile.am:
- * JavaScriptCore.pro:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
- * JavaScriptCore.xcodeproj/project.pbxproj:
- Many project file updates
-
- * create_hash_table:
- Add thunk generation callbacks to the hash tables, currently
- we hardcode the script to only support charCodeAt
-
- * jit/JITStubCall.h:
- * jit/JITStubs.cpp:
- (JSC::JITThunks::~JITThunks):
- (JSC::JITThunks::specializedThunk):
- * jit/JITStubs.h:
- * jit/SpecializedThunkJIT.h: Added.
- (JSC::SpecializedThunkJIT::SpecializedThunkJIT):
- (JSC::SpecializedThunkJIT::loadCellArgument):
- (JSC::SpecializedThunkJIT::loadJSStringArgument):
- (JSC::SpecializedThunkJIT::loadInt32Argument):
- (JSC::SpecializedThunkJIT::appendFailure):
- (JSC::SpecializedThunkJIT::returnInt32):
- (JSC::SpecializedThunkJIT::finalize):
- (JSC::SpecializedThunkJIT::argumentToVirtualRegister):
- (JSC::SpecializedThunkJIT::tagReturnAsInt32):
- * jit/ThunkGenerators.cpp: Added.
- (JSC::ThunkHelpers::stringImplDataOffset):
- (JSC::ThunkHelpers::jsStringLengthOffset):
- (JSC::ThunkHelpers::jsStringValueOffset):
- (JSC::charCodeAtThunkGenerator):
- * jit/ThunkGenerators.h: Added.
- * runtime/Executable.h:
- (JSC::NativeExecutable::NativeExecutable):
- * runtime/JSFunction.cpp:
- (JSC::JSFunction::JSFunction):
- * runtime/JSFunction.h:
- * runtime/JSGlobalData.h:
- (JSC::JSGlobalData::getThunk):
- * runtime/JSString.h:
- (JSC::):
- * runtime/JSValue.h:
- Protect some of the JSVALUE32 and JSVALUE32_64 only constants
- and function behind appropriate USE() guards to make it harder
- to use the wrong flags for the target build.
- * runtime/Lookup.cpp:
- (JSC::HashTable::createTable):
- (JSC::setUpStaticFunctionSlot):
- * runtime/Lookup.h:
- (JSC::HashEntry::initialize):
- (JSC::HashEntry::generator):
- (JSC::HashEntry::):
- Make the lookup tables use a specialized thunkGenerator
- if present
- * wtf/text/StringImpl.h:
-
-2010-04-26 Oliver Hunt <oliver@apple.com>
-
- Build fix
-
- * runtime/JSImmediate.h:
- * runtime/JSValue.h:
-
-2010-04-26 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- Factor some basic JS interface logic out of JIT and into a superclass
- https://bugs.webkit.org/show_bug.cgi?id=38163
-
- Create JSInterfaceJIT to hold some common low level functions for
- interacting with the JS RegisterFile. Doing this separately from
- https://bugs.webkit.org/show_bug.cgi?id=38155 to ease reviewing.
-
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * jit/JIT.h:
- * jit/JITInlineMethods.h:
- (JSC::JIT::emitJumpSlowCaseIfNotJSCell):
- * jit/JSInterfaceJIT.h: Added.
- (JSC::JSInterfaceJIT::emitLoadJSCell):
- (JSC::JSInterfaceJIT::emitJumpIfNotJSCell):
- (JSC::JSInterfaceJIT::emitLoadInt32):
- (JSC::JSInterfaceJIT::tagFor):
- (JSC::JSInterfaceJIT::payloadFor):
- (JSC::JSInterfaceJIT::addressFor):
-
-2010-04-26 Sam Weinig <sam@webkit.org>
-
- Fix Tiger build.
-
- * wtf/mac/MainThreadMac.mm:
- (WTF::isMainThread):
-
-2010-04-26 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- <rdar://problem/7766413>
-
- Fixed a crash seen when using the JavaScriptCore API with WebKit.
-
- No layout test because DumpRenderTree doesn't use the JavaScriptCore API
- in this way.
-
- * interpreter/RegisterFile.cpp:
- (JSC::RegisterFile::setGlobalObject):
- (JSC::RegisterFile::clearGlobalObject):
- (JSC::RegisterFile::globalObject):
- * interpreter/RegisterFile.h:
- (JSC::RegisterFile::RegisterFile): Use WeakGCPtr for managing m_globalObject,
- since it's a weak pointer. (We never noticed this error before because,
- in WebKit, global objects always have a self-reference in a global variable,
- so marking the register file's global variables would keep m_globalObject
- alive. In the JavaScriptCore API, you can allocate a global object with
- no self-reference.)
-
- * runtime/JSActivation.h: Removed unneeded #include.
-
- * runtime/JSGlobalObject.cpp:
- (JSC::JSGlobalObject::~JSGlobalObject): Don't use ==, since a weak
- pointer is 0 when the object it points to runs its destructor.
-
- * runtime/WeakGCPtr.h:
- (JSC::WeakGCPtr::clear): Changed to return a bool indicating whether the
- clear actually happened.
- (JSC::WeakGCPtr::assign): Changed to forbid assignment of 0 as a shorthand
- for calling clear(). A client should never clear by assigning 0, since
- clear() should be conditional on whether the object doing the clearing
- is still pointed to by the weak pointer. (Otherwise, a zombie object might
- clear a pointer to a new, valid object.)
-
-2010-04-25 Sam Weinig <sam@webkit.org>
-
- Reviewed by Maciej Stachowiak.
-
- Fix for https://bugs.webkit.org/show_bug.cgi?id=38097
- Disentangle initializing the main thread from initializing threading
-
- This is the first step in getting rid of the WEB_THREAD #define and
- paving the way to allowing mac both WebKit and WebKit2 to use the same
- WebCore.
-
- * JavaScriptCore.exp: Export initializeMainThread and initializeMainThreadToProcessMainThread.
- * JavaScriptCore.xcodeproj/project.pbxproj: Sort files.
-
- * wtf/MainThread.cpp:
- (WTF::mainThreadInitializationMutex):
- (WTF::mainThreadFunctionQueueMutex):
- (WTF::initializeMainThread):
- (WTF::deprecatedInitializeMainThread):
- * wtf/MainThread.h:
- Added Mac only initializeMainThreadToProcessMainThread which sets up callOnMainThread
- and isMainThead calls to assume that WebCore's main thread is also the
- process's main thread. Since it is possible that both initializeMainThread
- and initializeMainThreadToProcessMainThread could be called, the first one called
- wins (either will work).
-
- * wtf/Threading.h: Moved to top of file.
-
- * wtf/ThreadingPthreads.cpp:
- (WTF::initializeThreading): Remove call to initializeMainThread.
- * wtf/ThreadingWin.cpp:
- (WTF::initializeThreading): Ditto.
- * wtf/gtk/ThreadingGtk.cpp:
- (WTF::initializeThreading): Ditto.
-
- * wtf/mac/MainThreadMac.mm:
- (WTF::initializeMainThreadPlatform):
- (WTF::initializeMainThreadToProcessMainThread):
- (WTF::scheduleDispatchFunctionsOnMainThread):
- (WTF::isMainThread):
- Add runtime switch between the old behavior of using the system's main
- thread and a stored pointer to the main thread. Tiger always uses the
- system's main thread.
-
- * wtf/qt/ThreadingQt.cpp:
- (WTF::initializeThreading): Remove call to initializeMainThread.
- * wtf/win/MainThreadWin.cpp:
- (WTF::initializeMainThreadPlatform): Add call to initializeCurrentThreadInternal
- removed from initializeThreading.
-
-2010-04-26 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
-
- Reviewed by Kenneth Rohde Christiansen.
-
- Fix a memory leak in the QScriptString.
-
- QScriptStringPrivate's constructor shouldn't call JSStringRetain as
- QScriptConverter implicitly pass a JSStringRef ownership.
-
- [Qt] QScriptStringPrivate c'tor problem
- https://bugs.webkit.org/show_bug.cgi?id=38110
-
- * qt/api/qscriptstring_p.h:
- (QScriptStringPrivate::QScriptStringPrivate):
-
-2010-04-24 Darin Adler <darin@apple.com>
-
- Reviewed by Dan Bernstein.
-
- REGRESSION (r56560): Crash in parseFloat if passed invalid UTF-16 data
- https://bugs.webkit.org/show_bug.cgi?id=38083
- rdar://problem/7901044
-
- Tests: fast/js/ToNumber.html
- fast/js/parseFloat.html
-
- * runtime/JSGlobalObjectFunctions.cpp:
- (JSC::parseInt): Added a FIXME comment about a problem I noticed.
- (JSC::parseFloat): Added a FIXME comment about a problem I noticed;
- covered by test cases in the test I added.
- * runtime/UString.cpp:
- (JSC::UString::toDouble): Added FIXME comments about two problems I
- noticed; covered by test cases in the tests I added. Added a return
- statement so we don't crash when illegal UTF-16 sequences are present.
-
-2010-04-24 Anton Muhin <antonm@chromium.org>
-
- Reviewed by Darin Adler.
-
- Allow to construct HashTraits<WebCore::QualifiedName>::constructDeletedValue
-
- Former implementation attempted to use AtomicString(HashTableDeletedValue)
- however those values cannot be used that way: one cannot construct
- QualifiedNameImpl out of such AtomicString as we'll try to lookup this string
- in the table, for example.
- https://bugs.webkit.org/show_bug.cgi?id=37722
-
- * wtf/RefPtr.h: expose hash table deleted value
-
-2010-04-23 Sam Weinig <sam@webkit.org>
-
- Reviewed by David Levin.
-
- Fix for https://bugs.webkit.org/show_bug.cgi?id=38060
- Split up Threading.h
-
- Move bits for of Threading.h into 3 new files.
- - Atomics.h for atomic operations.
- - ThreadSafeShared.h for the ThreadSafeShared class.
- - ThreadingPrimitives.h for the primitives and platform types.
-
- Basic threading operations (creation, etc.) remain in Threading.h.
-
- * GNUmakefile.am:
- * JavaScriptCore.gypi:
- * JavaScriptCore.vcproj/WTF/WTF.vcproj:
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * wtf/Atomics.h: Copied from wtf/Threading.h.
- * wtf/ThreadSafeShared.h: Copied from wtf/Threading.h.
- * wtf/Threading.h:
- * wtf/ThreadingPrimitives.h: Copied from wtf/Threading.h.
-
-2010-04-23 Sam Weinig <sam@webkit.org>
-
- Fix Qt build.
-
- * wtf/qt/MainThreadQt.cpp: #include <QThread>
-
-2010-04-22 Sam Weinig <sam@webkit.org>
-
- Reviewed by Anders Carlsson.
-
- Fix for https://bugs.webkit.org/show_bug.cgi?id=38022
- Move isMainThread predicate function to MainThread.h
-
- * wtf/MainThread.cpp:
- (WTF::initializeMainThread):
- (WTF::isMainThread):
- * wtf/MainThread.h:
- * wtf/Threading.h:
- * wtf/ThreadingPthreads.cpp:
- (WTF::initializeThreading):
- * wtf/ThreadingWin.cpp:
- (WTF::initializeThreading):
- * wtf/gtk/ThreadingGtk.cpp:
- (WTF::initializeThreading):
- * wtf/mac/MainThreadMac.mm:
- (WTF::initializeMainThreadPlatform):
- (WTF::isMainThread):
- * wtf/qt/MainThreadQt.cpp:
- (WTF::isMainThread):
- * wtf/qt/ThreadingQt.cpp:
- (WTF::initializeThreading):
- * wtf/text/AtomicString.cpp:
-
-2010-04-23 Gabor Rapcsanyi <rgabor@inf.u-szeged.hu>
-
- Reviewed by Laszlo Gombos.
-
- Add RVCT support for Linux
-
- Developed in cooperation with Gabor Loki.
-
- * API/JSStringRef.h:
- * jit/ExecutableAllocator.h:
- * jit/ExecutableAllocatorPosix.cpp:
- (JSC::ExecutableAllocator::cacheFlush):
- * jit/JITStubs.cpp:
- * wtf/MathExtras.h:
- * wtf/unicode/qt4/UnicodeQt4.h:
-
-2010-04-23 Patrick Gansterer <paroga@paroga.com>
-
- Reviewed by Laszlo Gombos.
-
- [WIN] Move OwnPtrWin.cpp into platform specific folder.
- https://bugs.webkit.org/show_bug.cgi?id=38042
-
- * JavaScriptCore.gypi:
- * JavaScriptCore.vcproj/WTF/WTF.vcproj:
- * wtf/OwnPtrWin.cpp: Removed.
- * wtf/win/OwnPtrWin.cpp: Copied from JavaScriptCore/wtf/OwnPtrWin.cpp.
-
-2010-04-23 Patrick Gansterer <paroga@paroga.com>
-
- Reviewed by Laszlo Gombos.
-
- [BREWMP] Move OwnPtrBrew.cpp into platform specific folder.
- https://bugs.webkit.org/show_bug.cgi?id=38042
-
- * wtf/OwnPtrBrew.cpp: Removed.
- * wtf/brew/OwnPtrBrew.cpp: Copied from JavaScriptCore/wtf/OwnPtrBrew.cpp.
-
-2010-04-22 Steve Block <steveblock@google.com>
-
- Reviewed by Adam Barth.
-
- Update Android to use isfinite, isinf, isnan and signbit from namespace std.
- https://bugs.webkit.org/show_bug.cgi?id=37948
-
- * wtf/MathExtras.h:
-
-2010-04-22 Fumitoshi Ukai <ukai@chromium.org>
-
- Unreviewed build fix.
-
- * wtf/MD5.cpp: fix include path of CString.h
-
-2010-04-22 Fumitoshi Ukai <ukai@chromium.org>
-
- Reviewed by Adam Barth.
-
- MD5 is required for WebSocket new protocol implementation
- https://bugs.webkit.org/show_bug.cgi?id=37913
-
- * GNUmakefile.am:
- * JavaScriptCore.exp:
- * JavaScriptCore.gypi:
- * JavaScriptCore.pro:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/WTF/WTF.vcproj:
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * wtf/MD5.cpp: Added.
- * wtf/MD5.h: Added.
-
-2010-04-22 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (build fix).
- Errk, accidentally committed commenting out two ASSERTs! reverting.
-
- * runtime/Collector.cpp:
- (JSC::Heap::protect):
- (JSC::Heap::unprotect):
-
-2010-04-22 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Geoff Garen.
-
- https://bugs.webkit.org/show_bug.cgi?id=38006
- Change lifetime of JSC::IdentifierTables used by WebCores to match AtomicStringTable
-
- Presently JSC's IdentifierTables are owned by the JSGlobalData. For
- JSGlobalData objects created via the API this should continue to be the case,
- but for the JSGlobalData objects used by WebCore (the main thread's common
- global data, and those for workers) use a IdentifierTable provided (and owned)
- by wtfThreadData. This allow the lifetime of these IdentifierTable to match
- those of the corresponding AtomicStringTables.
-
- * API/APIShims.h:
- (JSC::APIEntryShim::APIEntryShim):
- * API/JSContextRef.cpp:
- (JSContextGroupCreate):
- * runtime/Collector.cpp:
- (JSC::Heap::protect):
- (JSC::Heap::unprotect):
- (JSC::Heap::markRoots):
- * runtime/JSGlobalData.cpp:
- (JSC::JSGlobalData::JSGlobalData):
- (JSC::JSGlobalData::~JSGlobalData):
- (JSC::JSGlobalData::createContextGroup):
- (JSC::JSGlobalData::create):
- (JSC::JSGlobalData::sharedInstance):
- * runtime/JSGlobalData.h:
- (JSC::JSGlobalData::):
- (JSC::JSGlobalData::isSharedInstance):
- * runtime/JSLock.cpp:
- (JSC::JSLock::JSLock):
- (JSC::JSLock::lock):
- (JSC::JSLock::unlock):
- (JSC::JSLock::DropAllLocks::DropAllLocks):
- * wtf/WTFThreadData.cpp:
- (WTF::WTFThreadData::WTFThreadData):
- (WTF::WTFThreadData::~WTFThreadData):
-
-2010-04-22 Sheriff Bot <webkit.review.bot@gmail.com>
-
- Unreviewed, rolling out r58110.
- http://trac.webkit.org/changeset/58110
- https://bugs.webkit.org/show_bug.cgi?id=38007
-
- Caused an internal compiler error on Qt (Requested by abarth
- on #webkit).
-
- * wtf/MathExtras.h:
-
-2010-04-22 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (windows build fix).
-
- * API/JSWeakObjectMapRefPrivate.cpp:
-
-2010-04-22 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (windows build fix).
-
- * API/JSBase.cpp:
- * API/JSCallbackObject.cpp:
-
-2010-04-22 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Geoff Garen.
-
- https://bugs.webkit.org/show_bug.cgi?id=37978
- Unify JSC::IdentifierTable and WebCore::AtomicStringTable implementations.
-
- These two classes both implement a HashSet of uniqued StringImpls, with
- translator classes to avoid unnecessary object creation. The only difference
- between the classes is which flag (isIdentifier or inTable) is set.
- Combine the two classes using a template predicated on which flag to use.
-
- New class AtomicStringTable created, containing all the goodness from
- IdentifierTable & AtomicStringTable, expect for Identifier's literalTable,
- which has been moved onto JSGlobalData. Removed duplicate string translator
- classes. Renamed StringImpl's inTable flag to more explicit 'isAtomic',
- and set this on the empty string (which matches Identifier behaviour, and
- removes a redundant check for zero-length).
-
- * GNUmakefile.am:
- * JavaScriptCore.gypi:
- * JavaScriptCore.vcproj/WTF/WTF.vcproj:
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * runtime/Identifier.cpp:
- (JSC::createLiteralTable):
- (JSC::deleteLiteralTable):
- (JSC::Identifier::add):
- (JSC::Identifier::addSlowCase):
- * runtime/Identifier.h:
- * runtime/JSGlobalData.cpp:
- (JSC::JSGlobalData::JSGlobalData):
- (JSC::JSGlobalData::~JSGlobalData):
- * runtime/JSGlobalData.h:
- * wtf/WTFThreadData.cpp:
- (WTF::WTFThreadData::WTFThreadData):
- (WTF::WTFThreadData::~WTFThreadData):
- * wtf/WTFThreadData.h:
- (WTF::WTFThreadData::atomicStringTable):
- * wtf/text/AtomicString.cpp:
- (WebCore::table):
- (WebCore::operator==):
- (WebCore::AtomicString::add):
- (WebCore::AtomicString::find):
- (WebCore::AtomicString::remove):
- * wtf/text/AtomicStringTable.h: Added.
- (WTF::CStringTranslator::hash):
- (WTF::CStringTranslator::equal):
- (WTF::CStringTranslator::translate):
- (WTF::UCharBufferTranslator::hash):
- (WTF::UCharBufferTranslator::equal):
- (WTF::UCharBufferTranslator::translate):
- (WTF::HashAndCharactersTranslator::hash):
- (WTF::HashAndCharactersTranslator::equal):
- (WTF::HashAndCharactersTranslator::translate):
- (WTF::IdentifierOrAtomicStringTable::remove):
- (WTF::::~IdentifierOrAtomicStringTable):
- (WTF::::add):
- (WTF::::find):
- * wtf/text/StringImpl.cpp:
- (WebCore::StringImpl::~StringImpl):
- * wtf/text/StringImpl.h:
- (WebCore::StringImpl::isAtomic):
- (WebCore::StringImpl::setIsAtomic):
- (WebCore::equal):
- * wtf/text/StringImplBase.h:
- (WTF::StringImplBase::StringImplBase):
-
-2010-04-22 Steve Block <steveblock@google.com>
-
- Reviewed by Adam Barth.
-
- Update Android to use isfinite, isinf, isnan and signbit from namespace std.
- https://bugs.webkit.org/show_bug.cgi?id=37948
-
- * wtf/MathExtras.h:
-
-2010-04-22 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
-
- Reviewed by Kenneth Rohde Christiansen.
-
- [Qt] Remove dependency of JSC to QtGui
- https://bugs.webkit.org/show_bug.cgi?id=37867
-
- The patch also make sure that hal.h is in the include path on Symbian.
- The dependency to QtGui took care of that before.
-
- Patch by Thiago Macieira <thiago.macieira@nokia.com>
- and Rohan McGovern <rohan.mcgovern@nokia.com>
-
- * JavaScriptCore.pri:
- * JavaScriptCore.pro:
-
-2010-04-22 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
-
- Reviewed by Tor Arne Vestbø.
-
- [Qt] Corrects symbols visibility for JavaScriptCore.
-
- https://bugs.webkit.org/show_bug.cgi?id=37867
-
- * JavaScriptCore.pro:
-
-2010-04-22 Gabor Loki <loki@webkit.org>
-
- Reviewed by Gavin Barraclough.
-
- Use BLX and BX to keep happy the return stack predictor above ARMv4
- https://bugs.webkit.org/show_bug.cgi?id=37862
-
- Inspired by Jacob Bramley's patch from JaegerMonkey
-
- * assembler/ARMAssembler.cpp:
- (JSC::ARMAssembler::executableCopy):
- * assembler/ARMAssembler.h:
- (JSC::ARMAssembler::):
- (JSC::ARMAssembler::bx):
- (JSC::ARMAssembler::blx):
- (JSC::ARMAssembler::loadBranchTarget):
- (JSC::ARMAssembler::jmp):
- (JSC::ARMAssembler::getLdrImmAddress):
- * assembler/MacroAssemblerARM.h:
- (JSC::MacroAssemblerARM::jump):
- (JSC::MacroAssemblerARM::nearCall):
- (JSC::MacroAssemblerARM::call):
- (JSC::MacroAssemblerARM::ret):
- (JSC::MacroAssemblerARM::prepareCall):
- (JSC::MacroAssemblerARM::call32):
-
-2010-04-21 Andy Estes <aestes@apple.com>
-
- Rubber stamped by Mark Rowe.
-
- Export WTF::deleteOwnedPtr(HFONT).
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2010-04-21 Gavin Barraclough <barraclough@apple.com>
-
- Rubber Stamped by Oliver Hunt.
-
- Make SmallStrings store an array of RefPtr<StringImpl>,
- instead of a direct array of StringImpls. This allows
- us to remove a friend (and a layering violation) from
- WTF::StringImpl, and makes it so that all StringImpls
- are individually heap allocated.
-
- * runtime/SmallStrings.cpp:
- (JSC::SmallStringsStorage::rep):
- (JSC::SmallStringsStorage::SmallStringsStorage):
- * wtf/text/StringImpl.h:
-
-2010-04-21 Sam Weinig <sam@webkit.org>
-
- Reviewed by Geoffrey Garen.
-
- Fix for https://bugs.webkit.org/show_bug.cgi?id=37937
- Wean JavaScriptCore off calls to isMainThread()
-
- - Replace use of isMainThread() for interpreter reentry checks
- with a stored value on the JSGlobalData.
- - Replace use of isMainThread() for useMainThread only check in the
- collector with a stored exclusive thread.
-
- * API/JSContextRef.cpp:
- (JSContextGroupCreate):
- Always default to a small stack type for uses of the JSC API. It is
- unlikely that the interpreter reentry required on the web will be as
- important for other uses of JavaScriptCore.
-
- * JavaScriptCore.exp:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- Update exports.
-
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::execute):
- (JSC::Interpreter::prepareForRepeatCall):
- Use new stored JSGlobalData::maxReentryDepth instead of isMainThread().
-
- * interpreter/Interpreter.h:
- Rename MaxMainThreadReentryDepth to MaxLargeThreadReentryDepth and
- MaxSecondaryThreadReentryDepth to MaxSmallThreadReentryDepth.
-
- * jsc.cpp:
- (main): Use the a large stack for jsc since it is always using the
- main thread.
-
- * runtime/ArrayPrototype.cpp:
- (JSC::arrayProtoFuncToString):
- (JSC::arrayProtoFuncToLocaleString):
- (JSC::arrayProtoFuncJoin):
- Use new stored JSGlobalData::maxReentryDepth instead of isMainThread().
-
- * runtime/Collector.cpp:
- (JSC::Heap::registerThread):
- Use the concept of making JSC run on an exclusiveThread instead of
- forcing a mainThreadOnly assertion.
-
- * runtime/JSGlobalData.cpp:
- (JSC::JSGlobalData::JSGlobalData):
- (JSC::JSGlobalData::createNonDefault):
- (JSC::JSGlobalData::create):
- (JSC::JSGlobalData::createLeaked):
- (JSC::JSGlobalData::sharedInstance):
- * runtime/JSGlobalData.h:
- Add ThreadStackType argument to JSGlobalData constructors and set
- maxReentryDepth based on it.
-
-2010-04-21 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (windows build fix pt. 3).
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2010-04-21 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (windows build fix pt. 2).
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2010-04-21 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (Qt build fix).
-
- * JavaScriptCore.gypi:
- * JavaScriptCore.pro:
- * wtf/qt/StringQt.cpp: Copied from WebCore/platform/text/qt/StringQt.cpp.
-
-2010-04-21 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (windows build fix).
-
- * API/JSValueRef.cpp:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
- * runtime/Identifier.cpp:
- (JSC::IdentifierTable::~IdentifierTable):
- (JSC::IdentifierTable::add):
- * runtime/Identifier.h:
- * wtf/WTFThreadData.h:
- (JSC::IdentifierTable::remove):
- (JSC::IdentifierTable::literalTable):
- * wtf/text/StringImpl.cpp:
- (WebCore::StringImpl::~StringImpl):
-
-2010-04-20 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt, Darin Adler.
-
- Bug 37906 - Remove JSC::UStringImpl; unify with StringImpl.
-
- JSC::UStringImpl and WebCore::StringImpl (soon to be renamed to
- WTF::StringImpl) are almost identical. Remove duplication of code by unifying
- the two, move missing features from UStringImpl into StringImpl & delete the
- class UStringImpl.
-
- * API/JSClassRef.cpp:
- * API/JSContextRef.cpp:
- * GNUmakefile.am:
- * JavaScriptCore.exp:
- * JavaScriptCore.pro:
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * bytecode/EvalCodeCache.h:
- * bytecode/JumpTable.cpp:
- * profiler/ProfileNode.cpp:
- * runtime/Identifier.cpp:
- (JSC::Identifier::add):
- * runtime/Identifier.h:
- (JSC::Identifier::equal):
- * runtime/UString.cpp:
- * runtime/UString.h:
- (WTF::):
- * runtime/UStringImpl.cpp: Removed.
- * runtime/UStringImpl.h:
- * wtf/text/StringHash.h:
- (WebCore::StringHash::equal):
- (WebCore::CaseFoldingHash::equal):
- * wtf/text/StringImpl.cpp:
- (WebCore::StringImpl::~StringImpl):
- (WebCore::StringImpl::empty):
- (WebCore::StringImpl::sharedBuffer):
- (WebCore::equal):
- * wtf/text/StringImpl.h:
- (WebCore::StringImpl::StringImpl):
- (WebCore::StringImpl::create):
- (WebCore::StringImpl::tryCreateUninitialized):
- (WebCore::StringImpl::cost):
- (WebCore::StringImpl::isIdentifier):
- (WebCore::StringImpl::setIsIdentifier):
- (WebCore::StringImpl::computeHash):
- (WebCore::StringImpl::copyChars):
- (WebCore::StringImpl::):
-
-2010-04-21 Patrick Gansterer <paroga@paroga.com>
-
- Reviewed by Darin Adler.
-
- Added missing #include "Lookup.h" in LUT source files.
- https://bugs.webkit.org/show_bug.cgi?id=37903
-
- * runtime/ArrayPrototype.cpp:
- * runtime/DatePrototype.cpp:
- * runtime/JSONObject.cpp:
- * runtime/MathObject.cpp:
- * runtime/NumberConstructor.cpp:
- * runtime/RegExpConstructor.cpp:
- * runtime/RegExpObject.cpp:
- * runtime/StringPrototype.cpp:
-
-2010-04-21 Gustavo Sverzut Barbieri <barbieri@profusion.mobi>
-
- Reviewed by Nikolas Zimmermann.
-
- Add missing EFL JavaScriptCore file.
- http://webkit.org/b/37854
-
- * wtf/efl: Added.
- * wtf/efl/MainThreadEfl.cpp: Added.
- (WTF::initializeMainThreadPlatform):
- (WTF::timeoutFired):
- (WTF::scheduleDispatchFunctionsOnMainThread):
-
-2010-04-20 Xan Lopez <xlopez@igalia.com>
-
- Another attempt to fix the build.
-
- * GNUmakefile.am:
-
-2010-04-20 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Maciej Stachowiak.
-
- [ES5] RegExp literals are constants that should be persistent across multiple function calls.
- https://bugs.webkit.org/show_bug.cgi?id=37908
-
- Dump the separate RegExp constant pool, and just use the standard JS constant pool
- in codeblock. This allows us to drop op_new_regexp and all associated code as well.
-
- * bytecode/CodeBlock.cpp:
- (JSC::CodeBlock::dump):
- (JSC::CodeBlock::shrinkToFit):
- * bytecode/CodeBlock.h:
- * bytecode/Opcode.h:
- * bytecompiler/BytecodeGenerator.cpp:
- (JSC::BytecodeGenerator::emitLoad):
- * bytecompiler/BytecodeGenerator.h:
- * bytecompiler/NodesCodegen.cpp:
- (JSC::RegExpNode::emitBytecode):
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::privateExecute):
- * jit/JIT.cpp:
- (JSC::JIT::privateCompileMainPass):
- * jit/JIT.h:
- * jit/JITOpcodes.cpp:
- * jit/JITStubs.cpp:
- * jit/JITStubs.h:
- (JSC::):
-
-2010-04-20 Oliver Hunt <oliver@apple.com>
-
- Fix license on create_regex_tables
-
- * create_regex_tables:
-
-2010-04-20 Oliver Hunt <oliver@apple.com>
-
- Reviewed by NOBODY (Build fix).
-
- Fix gtk
-
- * GNUmakefile.am:
- * make-generated-sources.sh:
-
-2010-04-20 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Bug 37895 - Share common code from UStringImplBase with StringImpl
-
- The implementation of StringImpl & UStringImpl is very similar. Restructure
- StringImpl to match UStringImpl, moving the flags and length into a base class,
- so that this can be shared between both string types to increase code reuse.
-
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * runtime/RopeImpl.h:
- (JSC::RopeImpl::RopeImpl):
- * runtime/UStringImpl.h:
- (JSC::UStringImpl::UStringImpl):
- * wtf/text/StringImpl.h:
- (WebCore::StringImpl::StringImpl):
- (WebCore::StringImpl::characters):
- * wtf/text/StringImplBase.h: Copied from JavaScriptCore/runtime/UStringImpl.h.
- (WTF::StringImplBase::length):
- (WTF::StringImplBase::operator new):
- (WTF::StringImplBase::StringImplBase):
-
-2010-04-20 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- Autogenerate yarr character tables
- https://bugs.webkit.org/show_bug.cgi?id=37877
-
- Use a python script to automatically generate character tables
- for the builtin YARR character classes. This allows us to generate
- actual tables as well, by using these tables we can both increase
- performance of the check (for complex builtins) and reduce the actual
- code size.
-
- 4-8% win on string-unpack-code, but lots of noise on other tests so
- i'm only confident saying its a 1% win overall.
-
- * DerivedSources.make:
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * assembler/AbstractMacroAssembler.h:
- (JSC::AbstractMacroAssembler::ExtendedAddress::ExtendedAddress):
- * assembler/MacroAssembler.h:
- (JSC::MacroAssembler::branchTest8):
- * assembler/MacroAssemblerX86Common.h:
- (JSC::MacroAssemblerX86Common::branchTest8):
- * assembler/MacroAssemblerX86_64.h:
- (JSC::MacroAssemblerX86_64::branchTest8):
- * assembler/X86Assembler.h:
- (JSC::X86Assembler::cmpb_im):
- (JSC::X86Assembler::testb_im):
- * bytecode/SamplingTool.cpp:
- (JSC::SamplingTool::dump):
- * create_regex_tables: Added.
- * yarr/RegexCompiler.cpp:
- (JSC::Yarr::CharacterClassConstructor::charClass):
- * yarr/RegexJIT.cpp:
- (JSC::Yarr::RegexGenerator::matchCharacterClass):
- (JSC::Yarr::RegexGenerator::generatePatternCharacterGreedy):
- (JSC::Yarr::RegexGenerator::generatePatternCharacterNonGreedy):
- (JSC::Yarr::RegexGenerator::generateCharacterClassGreedy):
- * yarr/RegexPattern.h:
- (JSC::Yarr::CharacterClassTable::create):
- (JSC::Yarr::CharacterClassTable::CharacterClassTable):
- (JSC::Yarr::CharacterClass::CharacterClass):
-
-2010-04-20 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (speculative windows fix - missed a bit!).
-
- * wtf/text/AtomicString.h:
-
-2010-04-20 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (speculative windows fix).
-
- * wtf/text/AtomicString.h:
-
-2010-04-20 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (windows build fix).
-
- Add missing .def file entries.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2010-04-20 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Geoff Garen.
-
- Bug 37869 - Move URopeImpl to its own .h/.cpp
-
- Currently Ropes are implemented by the class URopeImpl, which is defined in
- UStringImpl.h, and then typedefed to the name JSString::Rope. Remove the
- typedef, and rename all uses of URopeImpl and JSString::Rope to just RopeImpl.
-
- Move RopeImpl to its own header, and remove all remaining references to ropes
- from UStringImpl (rename UStringOrRopeImpl to UStringImplBase, rename or move
- the isRope & deref methods from UStringOrRopeImpl).
-
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * runtime/JSString.cpp:
- (JSC::JSString::resolveRope):
- * runtime/JSString.h:
- (JSC::):
- (JSC::RopeBuilder::JSString):
- (JSC::RopeBuilder::~JSString):
- (JSC::RopeBuilder::appendStringInConstruct):
- (JSC::RopeBuilder::JSStringFinalizerStruct::):
- * runtime/RopeImpl.cpp: Copied from JavaScriptCore/runtime/UStringImpl.cpp.
- (JSC::RopeImpl::derefFibersNonRecursive):
- (JSC::RopeImpl::destructNonRecursive):
- * runtime/RopeImpl.h: Copied from JavaScriptCore/runtime/UStringImpl.h.
- (JSC::RopeImpl::tryCreateUninitialized):
- (JSC::RopeImpl::isRope):
- (JSC::RopeImpl::deref):
- (JSC::RopeImpl::RopeImpl):
- * runtime/UStringImpl.cpp:
- * runtime/UStringImpl.h:
- (JSC::UStringImplBase::isInvalid):
- (JSC::UStringImplBase::ref):
- (JSC::UStringImplBase::UStringImplBase):
- (JSC::UStringImplBase::):
- (JSC::UStringImpl::UStringImpl):
-
-2010-04-20 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Geoff Garen.
-
- Bug 37828 - Move WebCore's String classes to WTF
-
- Move these classes up to WTF so they are available to all clients of WTF (in
- particular JSC).
-
- As a first patch, making the most minimal change possible, since this patch
- could easily grow rather large since we'll have to change every class forward
- declaration ( e.g. every "namespace WebCore { class String; }" much change to
- "namespace WTF { class String; }").
-
- Moving the files, but leaving the classes logically in the WebCore namespace -
- which is technically a layering violation - I'll come back and fix this up in a
- subsequent patch.
-
- * Android.mk:
- * Android.v8.wtf.mk:
- * GNUmakefile.am:
- * JavaScriptCore.exp:
- * JavaScriptCore.gypi:
- * JavaScriptCore.pro:
- * JavaScriptCore.vcproj/WTF/WTF.vcproj:
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * config.h:
- * wtf/StaticConstructors.h: Copied from WebCore/platform/StaticConstructors.h.
- * wtf/text/AtomicString.cpp: Copied from WebCore/platform/text/AtomicString.cpp.
- * wtf/text/AtomicString.h: Copied from WebCore/platform/text/AtomicString.h.
- * wtf/text/AtomicStringImpl.h: Copied from WebCore/platform/text/AtomicStringImpl.h.
- * wtf/text/StringBuffer.h: Copied from WebCore/platform/text/StringBuffer.h.
- * wtf/text/StringHash.h: Copied from WebCore/platform/text/StringHash.h.
- * wtf/text/StringImpl.cpp: Copied from WebCore/platform/text/StringImpl.cpp.
- * wtf/text/StringImpl.h: Copied from WebCore/platform/text/StringImpl.h.
- * wtf/text/WTFString.cpp: Copied from WebCore/platform/text/String.cpp.
- (WebCore::charactersToFloat):
- * wtf/text/WTFString.h: Copied from WebCore/platform/text/PlatformString.h.
-
-2010-04-20 Csaba Osztrogonác <ossy@webkit.org>
-
- [Qt] Unreviewed speculative buildfix for WinCE after r57882
- https://bugs.webkit.org/show_bug.cgi?id=37701
-
- * JavaScriptCore.pri: missing wince* case added.
-
-2010-04-20 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (build fix).
- Speculative Chromium/Win build fix, attempt #2.
-
- * config.h:
-
-2010-04-20 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (build fix).
- Speculative Chromium/Win build fix.
-
- * config.h: JS_EXPORTDATA should do nothing on !JSC builds.
-
-2010-04-20 Csaba Osztrogonác <ossy@webkit.org>
-
- Reviewed by Simon Hausmann.
-
- [Qt] Target(WebCore,jsc,...) must depends on static library of JavaScriptCore
- https://bugs.webkit.org/show_bug.cgi?id=37701
-
- * JavaScriptCore.pri: dependency added.
-
-2010-04-20 Gavin Barraclough <barraclough@apple.com>
-
- Rubber stamped by Maciej Stachowiak (relanding r57829).
- Added missing JS_EXPORTDATA
-
- * API/APIShims.h:
- (JSC::APIEntryShimWithoutLock::APIEntryShimWithoutLock):
- (JSC::APIEntryShimWithoutLock::~APIEntryShimWithoutLock):
- (JSC::APICallbackShim::APICallbackShim):
- (JSC::APICallbackShim::~APICallbackShim):
- * API/JSContextRef.cpp:
- * Android.mk:
- * Android.v8.wtf.mk:
- * GNUmakefile.am:
- * JavaScriptCore.exp:
- * JavaScriptCore.gypi:
- * JavaScriptCore.pro:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/WTF/WTF.vcproj:
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * runtime/Completion.cpp:
- (JSC::checkSyntax):
- (JSC::evaluate):
- * runtime/Identifier.cpp:
- (JSC::Identifier::remove):
- (JSC::Identifier::checkCurrentIdentifierTable):
- * runtime/Identifier.h:
- * runtime/InitializeThreading.cpp:
- (JSC::initializeThreadingOnce):
- * runtime/JSGlobalData.cpp:
- (JSC::JSGlobalData::create):
- * wtf/WTFThreadData.cpp: Copied from JavaScriptCore/wtf/WTFThreadData.cpp.
- * wtf/WTFThreadData.h: Copied from JavaScriptCore/wtf/WTFThreadData.h.
-
-2010-04-19 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (rolling out r57829).
- This broke windows.
-
- * API/APIShims.h:
- (JSC::APIEntryShimWithoutLock::APIEntryShimWithoutLock):
- (JSC::APIEntryShimWithoutLock::~APIEntryShimWithoutLock):
- (JSC::APICallbackShim::APICallbackShim):
- (JSC::APICallbackShim::~APICallbackShim):
- * API/JSContextRef.cpp:
- * Android.mk:
- * Android.v8.wtf.mk:
- * GNUmakefile.am:
- * JavaScriptCore.exp:
- * JavaScriptCore.gypi:
- * JavaScriptCore.pro:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/WTF/WTF.vcproj:
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * runtime/Completion.cpp:
- (JSC::checkSyntax):
- (JSC::evaluate):
- * runtime/Identifier.cpp:
- (JSC::Identifier::remove):
- (JSC::Identifier::checkCurrentIdentifierTable):
- (JSC::createIdentifierTableSpecificCallback):
- (JSC::createIdentifierTableSpecific):
- * runtime/Identifier.h:
- (JSC::ThreadIdentifierTableData::ThreadIdentifierTableData):
- (JSC::defaultIdentifierTable):
- (JSC::setDefaultIdentifierTable):
- (JSC::currentIdentifierTable):
- (JSC::setCurrentIdentifierTable):
- (JSC::resetCurrentIdentifierTable):
- * runtime/InitializeThreading.cpp:
- (JSC::initializeThreadingOnce):
- * runtime/JSGlobalData.cpp:
- (JSC::JSGlobalData::create):
- * wtf/WTFThreadData.cpp: Removed.
- * wtf/WTFThreadData.h: Removed.
-
-2010-04-19 Douglas Gregor <dgregor@apple.com>
-
- Reviewed and landed by Anders Carlsson.
-
- * runtime/UStringImpl.h:
- Fix class/struct declaration mismatches.
-
-2010-04-19 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Beth Dakin.
-
- Checked in these tests I wrote becuase Balazs Kelemen wanted to use them.
-
- * tests/perf: Added.
- * tests/perf/bench-allocate-nonretained.js: Added.
- * tests/perf/bench-allocate-retained.js: Added.
-
-2010-04-19 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (windows build fix).
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2010-04-16 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Sam Weinig.
-
- https://bugs.webkit.org/show_bug.cgi?id=37745
- Move string uniquing tables to (new) WTFThreadData class.
-
- Remove AtomicString's dependency on ThreadGlobalData so that we can move
- WebCore's string classes up to WTF.
-
- WTFThreadData.cpp/.h are based on ThreadGlobalData from WebCore.
- Moved JSC & WebCore's string uniquing tables to this class.
-
- This patch introduces a temporary layering violation in providing forward
- declarations of classes from JSC and WTF; this will be resolved as we move
- more string code up to WTF.
-
- * API/APIShims.h:
- (JSC::APIEntryShimWithoutLock::APIEntryShimWithoutLock):
- (JSC::APIEntryShimWithoutLock::~APIEntryShimWithoutLock):
- (JSC::APICallbackShim::APICallbackShim):
- (JSC::APICallbackShim::~APICallbackShim):
- * API/JSContextRef.cpp:
- * JavaScriptCore.exp:
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * runtime/Completion.cpp:
- (JSC::checkSyntax):
- (JSC::evaluate):
- * runtime/Identifier.cpp:
- (JSC::Identifier::remove):
- (JSC::Identifier::checkCurrentIdentifierTable):
- * runtime/Identifier.h:
- * runtime/InitializeThreading.cpp:
- (JSC::initializeThreadingOnce):
- * runtime/JSGlobalData.cpp:
- (JSC::JSGlobalData::create):
- * wtf/WTFThreadData.cpp: Copied from WebCore/platform/ThreadGlobalData.cpp.
- (WTF::WTFThreadData::WTFThreadData):
- (WTF::WTFThreadData::~WTFThreadData):
- * wtf/WTFThreadData.h: Copied from WebCore/platform/ThreadGlobalData.h.
- (WTF::WTFThreadData::atomicStringTable):
- (WTF::WTFThreadData::initializeIdentifierTable):
- (WTF::WTFThreadData::currentIdentifierTable):
- (WTF::WTFThreadData::setCurrentIdentifierTable):
- (WTF::WTFThreadData::resetCurrentIdentifierTable):
- (WTF::wtfThreadData):
-
-2010-04-19 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- [Qt] Build fix for WinCE.
-
- Moved the include of the non-existing errno.h header file inside
- platform guard macros.
-
- * jit/ExecutableAllocatorFixedVMPool.cpp:
-
-2010-04-18 Kwang Yul Seo <skyul@company100.net>
-
- Reviewed by Laszlo Gombos.
-
- [WINCE] Don't define WTF_CPU_MIDDLE_ENDIAN=1
- https://bugs.webkit.org/show_bug.cgi?id=37434
-
- Windows CE supports little-endian format only, so don't define
- WTF_CPU_MIDDLE_ENDIAN=1.
-
- * wtf/Platform.h:
-
-2010-04-18 Simon Hausmann <simon.hausmann@nokia.com>
-
- Reviewed by Laszlo Gombos.
-
- [Qt] Fix JavaScriptCore's include path for WinCE builds
-
- https://bugs.webkit.org/show_bug.cgi?id=36751
-
- * JavaScriptCore.pri:
-
-2010-04-16 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by nobody, build fix.
-
-2010-04-16 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by nobody, build fix.
+ (JSC::DebuggerCallFrame::calculatedFunctionName): Updated for change to
+ ExecState::callee().
-2010-04-16 Gavin Barraclough <barraclough@apple.com>
+ (JSC::DebuggerCallFrame::thisObject): Updated for removal of ExecState::thisValue().
- Reviewed by Oliver Hunt.
-
- Bug 37730 - Remove JSC::UString dependencies from WebCore::StringImpl
- (Following on from bug #37675).
-
- Make the argument ordering for UStringImpl's constructor & create
- methods match, when passed a shared buffer.
-
- * JavaScriptCore.exp:
- * runtime/UStringImpl.cpp:
- (JSC::UStringImpl::create):
- * runtime/UStringImpl.h:
-
-2010-04-15 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
-
- Reviewed by Kenneth Rohde Christiansen.
-
- Fix memory leak in QScriptEngine::evaluate().
-
- QScriptEnginePrivate::evaluate should release temporary variables.
-
- [Qt] QScriptEngine::evaluate has memory leak.
- https://bugs.webkit.org/show_bug.cgi?id=37596
-
- * qt/api/qscriptengine_p.cpp:
- (QScriptEnginePrivate::evaluate):
- * qt/api/qscriptengine_p.h:
-
-2010-04-14 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
-
- Reviewed by Kenneth Rohde Christiansen.
-
- Fix a memory leak in QScriptValue::inherits.
-
- [Qt] QScriptValue::inherits has a memory leak.
- https://bugs.webkit.org/show_bug.cgi?id=37617
-
- * qt/api/qscriptvalue_p.h:
- (QScriptValuePrivate::inherits):
-
-2010-04-14 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
-
- Reviewed by Kenneth Rohde Christiansen.
-
- Fix a few memory leaks in QScriptEngine.
-
- Syntax checking caused memory leak, not all temporary variables were released.
-
- [Qt] Syntax checking in the QtScript cause a memory leak.
- https://bugs.webkit.org/show_bug.cgi?id=37610
-
- * qt/api/qscriptengine_p.cpp:
- (QScriptEnginePrivate::checkSyntax):
- * qt/api/qscriptsyntaxcheckresult.cpp:
- (QScriptSyntaxCheckResultPrivate::errorMessage):
- (QScriptSyntaxCheckResultPrivate::errorLineNumber):
-
-2010-04-14 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
-
- Reviewed by Kenneth Rohde Christiansen.
-
- Fix memory leak inside QScriptEnginePrivate::makeJSValue.
-
- QScriptEnginePrivate::makeJSValue should release temporary JSStringRef variable.
-
- [Qt] tst_QScriptValue::toString has a memory leak.
- https://bugs.webkit.org/show_bug.cgi?id=37598
-
- * qt/api/qscriptengine_p.h:
- (QScriptEnginePrivate::makeJSValue):
-
-2010-04-14 Peter Varga <pvarga@inf.u-szeged.hu>
-
- Reviewed by Geoffrey Garen.
-
- Move the YARR JIT fallback detection from RegexJIT.cpp to
- RegexCompiler.cpp.
-
- https://bugs.webkit.org/show_bug.cgi?id=37571
-
- * yarr/RegexCompiler.cpp:
- (JSC::Yarr::RegexPatternConstructor::atomBackReference):
- (JSC::Yarr::RegexPatternConstructor::quantifyAtom):
- * yarr/RegexJIT.cpp:
- (JSC::Yarr::RegexGenerator::generateTerm):
- (JSC::Yarr::RegexGenerator::RegexGenerator):
- (JSC::Yarr::jitCompileRegex):
- * yarr/RegexJIT.h:
- (JSC::Yarr::RegexCodeBlock::operator!):
- * yarr/RegexPattern.h:
- (JSC::Yarr::RegexPattern::RegexPattern):
- (JSC::Yarr::RegexPattern::reset):
-
-2010-04-14 Kent Hansen <kent.hansen@nokia.com>
-
- Reviewed by Maciej Stachowiak.
-
- Mac OS X: Use deployment target to determine whether memory tagging should be enabled
- https://bugs.webkit.org/show_bug.cgi?id=34888
-
- When building on (Snow) Leopard but targeting Tiger
- (TARGETING_TIGER defined, BUILDING_ON_TIGER not defined),
- WebKit would crash on Tiger because the tags passed to mmap
- caused those function calls to fail.
-
- Conversely, when building on Tiger but targeting Leopard
- (BUILDING_ON_TIGER defined, TARGETING_LEOPARD defined), WebKit
- would crash on Leopard because the tags passed to vm_map and
- vm_allocate caused those function calls to fail.
-
- Solution: Use TARGETING_TIGER rather than BUILDING_ON_TIGER to
- govern the tag definitions. Use the same tags for vm_map and
- vm_allocate regardless of target, since they work on
- both. Fall back to the mmap tags that work on Tiger (that is,
- "no tags") if targeting Tiger, since those tags also work on
- Leopard.
-
- * wtf/VMTags.h:
-
-2010-04-12 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
-
- Reviewed by nobody, build fix.
-
- [Qt] Build fix for Mac when building with build-webkit --qt
-
- Specifying no configuration on Mac builds WebCore both in debug
- and release. JavaScriptCore has to follow this rule as well.
-
- * JavaScriptCore.pro:
-
-2010-04-11 Mark Rowe <mrowe@apple.com>
-
- Reviewed by Sam Weinig.
-
- <rdar://problem/7851332> Fix the build.
-
- * wtf/FastMalloc.cpp:
- (WTF::TCMallocStats::): Initialize extra members of malloc_introspection_t to zero.
-
-2010-04-09 Mikhail Naganov <mnaganov@chromium.org>
-
- Reviewed by Pavel Feldman.
-
- Make CallIdentifier constructor to handle null urls.
-
- https://bugs.webkit.org/show_bug.cgi?id=37341
-
- * profiler/CallIdentifier.h:
- (JSC::CallIdentifier::CallIdentifier):
-
-2010-04-09 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- [Qt] Fix crashes with package builds in release
-
- Add NDEBUG to the defines for package build in JavaScriptCore.pri,
- so that it's consistently used for JavaScriptCore, WebCore, jsc and all
- other tools using wtf, etc. data structures directly. Mixing NDEBUG with
- non-NDEBUG builds causes crashes due to differences in data structures when
- assertions/checks are enabled.
-
- * JavaScriptCore.pri:
-
-2010-04-09 Patrick Gansterer <paroga@paroga.com>
-
- Reviewed by Darin Adler.
-
- Implement NO_RETURN for COMPILER(MSVC).
- https://bugs.webkit.org/show_bug.cgi?id=33056
-
- Added NO_RETURN_WITH_VALUE for functions with non-void return type.
-
- * jsc.cpp:
- * wtf/AlwaysInline.h:
- * wtf/FastMalloc.cpp:
-
-2010-04-08 Kwang Yul Seo <skyul@company100.net>
-
- Reviewed by Simon Hausmann.
-
- [WINCE] Check if ARM or _ARM_ is defined
- https://bugs.webkit.org/show_bug.cgi?id=37200
-
- MSVC defines ARM and _ARM_ for Windows CE ARM. Define WTF_CPU_ARM=1
- when either ARM or _ARM_ is defined.
-
- * wtf/Platform.h:
-
-2010-04-08 Csaba Osztrogonác <ossy@webkit.org>
-
- Reviewed Oliver Hunt.
-
- [Qt]r57240 broke Qt build (might be a gcc bug)
- https://bugs.webkit.org/show_bug.cgi?id=37253
-
- Workaround until fix. On PLATFORM(QT) use inline instead of ALWAYS_INLINE.
-
- * wtf/PassRefPtr.h: Qt guards added.
-
-2010-04-07 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Anders Carlsson.
-
- Vector<UString> makes many needless calls to UString::UString and UString::~UString
-
- Add a VectorTrait<UString> specialisation to allow vector to simply memset/memcpy
- data around. Only difference from the VectorTrait<RefPtr<T> > traits is the inability
- to use memset to initialize data.
-
- * runtime/UString.h:
- (WTF::):
-
-2010-04-07 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Geoff Garen.
-
- Beat gcc with a clue bat -- force inlining of refIfNotNull and derefIfNotNull
-
- * wtf/PassRefPtr.h:
-
-2010-04-07 Kwang Yul Seo <skyul@company100.net>
-
- Reviewed by Darin Adler.
-
- Replace isprint with isASCIIPrintable
- https://bugs.webkit.org/show_bug.cgi?id=37223
-
- WebKit does not use functions in <ctype.h> as they are dependent on the current
- locale. Use the equivalent functions in <wtf/ASCIICType.h>. isASCIIPrintable
- replaces isprint.
-
- * pcre/pcre_exec.cpp:
- (pchars):
-
-2010-04-07 Enrica Casucci <enrica@apple.com>
-
- Reviewed by Darin Adler.
-
- https://bugs.webkit.org/show_bug.cgi?id=37219
-
- This change disables text caret for the iPhone platflorm.
-
- * wtf/Platform.h: Disabled text caret for iPhone.
-
-2010-04-06 Adam Barth <abarth@webkit.org>
-
- Reviewed by Eric Seidel.
-
- REGRESSION: Worker termination via JS timeout may cause worker tests like fast/workers/worker-terminate.html fail.
- https://bugs.webkit.org/show_bug.cgi?id=36646
+ * interpreter/CallFrame.cpp:
+ * interpreter/CallFrame.h:
+ (JSC::ExecState::callee):
+ (JSC::ExecState::scopeChain):
+ (JSC::ExecState::init): Changed callee() to be JSObject* instead of
+ JSFunction* -- now, it might be some other callable host object.
- Add a new exception type for forcibly terminating a JavaScript stack.
- The new exception functions similarly to the
- InterruptedExecutionException but is conceptually different because
- execution is terminated instead of just interrupted.
+ (JSC::ExecState::hostThisRegister):
+ (JSC::ExecState::hostThisValue):
+ (JSC::ExecState::argumentCount):
+ (JSC::ExecState::argumentCountIncludingThis):
+ (JSC::ExecState::argument):
+ (JSC::ExecState::setArgumentCountIncludingThis):
+ (JSC::ExecState::setCallee): Added convenient accessors for arguments
+ from within a host function. Removed thisValue() because it was too
+ tempting to use incorrectly, and it only had one or two clients, anyway.
- * GNUmakefile.am:
- - Added new Terminator.h file.
- * JavaScriptCore.gypi:
- - Added new Terminator.h file.
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
- - Added new Terminator.h file.
- * JavaScriptCore.xcodeproj/project.pbxproj:
- - Added new Terminator.h file.
* interpreter/Interpreter.cpp:
- (JSC::Interpreter::throwException):
- - Fully unwind the stack for TerminatedExecutionException.
- (JSC::Interpreter::privateExecute):
- - Check if we've been terminated at the same time we check if we've
- timed out.
- * jit/JITStubs.cpp:
- (JSC::DEFINE_STUB_FUNCTION):
- - Check if we've been terminated at the same time we check if we've
- timed out.
- * runtime/Completion.cpp:
- - Some exceptions define special completion types so that calls can
- see why we terminated evaluation.
- (JSC::evaluate):
- * runtime/Completion.h:
- - Define a new completion type for termination.
- (JSC::):
- * runtime/ExceptionHelpers.cpp:
- - Define TerminatedExecutionException and refactor pseudo-RTTI
- virtual function to be more semantic.
- (JSC::InterruptedExecutionError::exceptionType):
- (JSC::TerminatedExecutionError::TerminatedExecutionError):
- (JSC::TerminatedExecutionError::exceptionType):
- (JSC::TerminatedExecutionError::toString):
- (JSC::createTerminatedExecutionException):
- * runtime/ExceptionHelpers.h:
- - Entry point for generating a TerminatedExecutionException.
- * runtime/JSGlobalData.cpp:
- (JSC::JSGlobalData::JSGlobalData):
- - Add a Terminator object that can be used to asynchronously
- terminate a JavaScript execution stack.
- * runtime/JSGlobalData.h:
- * runtime/JSObject.h:
- (JSC::JSObject::exceptionType):
- - Define that, by default, thrown objects have a normal exception
- type.
- * runtime/Terminator.h: Added.
- - Added a new controller object that can be used to terminate
- execution asynchronously. This object is more or less a
- glorified bool.
- (JSC::Terminator::Terminator):
- (JSC::Terminator::termianteSoon):
- (JSC::Terminator::shouldTerminate):
-
-2010-04-05 Oliver Hunt <oliver@apple.com>
-
- And another one.
-
- * JavaScriptCore.vcproj/jsc/jscCommon.vsprops:
-
-2010-04-05 Oliver Hunt <oliver@apple.com>
-
- And another build fix.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
-
-2010-04-05 Oliver Hunt <oliver@apple.com>
-
- Build fix
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
-
-2010-04-05 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- Support weak maps in JSC
- https://bugs.webkit.org/show_bug.cgi?id=37132
-
- Expose an API to allow creation of a map for storing
- weak JS references.
-
- * API/JSWeakObjectMapRefInternal.h: Added.
- (OpaqueJSWeakObjectMap::create):
- (OpaqueJSWeakObjectMap::map):
- (OpaqueJSWeakObjectMap::~OpaqueJSWeakObjectMap):
- (OpaqueJSWeakObjectMap::OpaqueJSWeakObjectMap):
- * API/JSWeakObjectMapRefPrivate.cpp: Added.
- * API/JSWeakObjectMapRefPrivate.h: Added.
- * JavaScriptCore.exp:
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * runtime/JSGlobalObject.h:
- (JSC::JSGlobalObject::registerWeakMap):
- (JSC::JSGlobalObject::deregisterWeakMap):
-
-2010-04-05 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Kenneth Rohde Christiansen.
-
- [Symbian] Consolidate Symbian WINSCW environment configuration
- https://bugs.webkit.org/show_bug.cgi?id=37100
-
- Move the "undefinition" of WIN32 and _WIN32 from WebCore/config.h
- to JavaScriptCore/wtf/Platform.h as it is not specific to WebCore.
-
- PLATFORM(WIN) and OS(WIN) no longer needs to be undefined as
- undefining WIN32 takes care of it.
-
- * wtf/Platform.h:
-
-2010-04-03 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- https://bugs.webkit.org/show_bug.cgi?id=37068
- Change UString to use a 0 rep for null strings instead of a null object.
-
- No performance impact.
-
- * JavaScriptCore.exp:
- * runtime/InternalFunction.cpp:
- (JSC::InternalFunction::InternalFunction):
- * runtime/JSString.h:
- (JSC::RopeBuilder::JSString):
- * runtime/UString.cpp:
- (JSC::initializeUString):
- * runtime/UString.h:
- (JSC::UString::UString):
- (JSC::UString::data):
- (JSC::UString::size):
- (JSC::UString::isNull):
- (JSC::UString::isEmpty):
- (JSC::UString::cost):
-
-2010-04-03 Balazs Kelemen <kb@inf.u-szeged.hu>
+ (JSC::Interpreter::callEval): Updated for removal of ExecState::thisValue().
- Reviewed by Oliver Hunt.
-
- Fix uninitalised members in CallLinkInfo and BytecodeGenerator.
-
- https://bugs.webkit.org/show_bug.cgi?id=36816
-
- * bytecode/CodeBlock.cpp:
- (JSC::CodeBlock::CodeBlock):
- * bytecode/CodeBlock.h:
- (JSC::CallLinkInfo::CallLinkInfo):
-
-2010-04-03 yael aharon <yael.aharon@nokia.com>
-
- Reviewed by Darin Adler.
-
- Enable HTMLProgressElement for Safari on OSX
- https://bugs.webkit.org/show_bug.cgi?id=36961
-
- * Configurations/FeatureDefines.xcconfig:
-
-2010-04-02 Ruben Van Boxem <vanboxem.ruben@gmail.com>
-
- Reviewed by Eric Seidel.
-
- Mingw-w64 fixes for JavaScriptCore
- https://bugs.webkit.org/show_bug.cgi?id=35607
-
- * runtime/Collector.cpp: use the msvc code for mingw-w64 (but not mingw-w32)
- (JSC::Heap::allocateBlock):
- (JSC::Heap::freeBlockPtr):
- (JSC::currentThreadStackBase):
- (JSC::currentThreadStackBase):
- * wtf/Platform.h: added COMPILER(MINGW64) check to differentiate between mingw.org and mingw-w64 functions
-
-2010-04-02 Geoffrey Garen <ggaren@apple.com>
-
- Build fix: updated the .def file.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ (JSC::Interpreter::throwException): Be sure to shrink the register file
+ before invoking the exception handler, to reduce the chances that the
+ handler will re-throw in the case of stack overflow. (Re-throwing is now
+ more likely than it used to be, since standardizing the calling convention
+ implicitly added stack overflow checks to some places where they used to be missing.)
-2010-04-02 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Inlined toThisString and toThisJSString to avoid virtual function call overhead
- https://bugs.webkit.org/show_bug.cgi?id=37039
-
- Maybe a 1% speedup on iBench JS.
-
- * JavaScriptCore.exp: New exports.
-
- * runtime/JSCell.cpp:
- * runtime/JSCell.h:
- * runtime/JSNumberCell.cpp:
- * runtime/JSNumberCell.h:
- * runtime/JSString.cpp:
- * runtime/JSString.h:
- * runtime/JSValue.h:
- * runtime/JSZombie.h:
- (JSC::JSZombie::toThisObject): Nixed the old virtual-type implementation.
-
- * runtime/JSObject.h:
- (JSC::JSValue::toThisString):
- (JSC::JSValue::toThisJSString): Added the inlined implementation.
-
-2010-04-02 Jeremy Moskovich <jeremy@chromium.org>
-
- Reviewed by Geoffrey Garen.
-
- Beef up documentation for ASSERT* and CRASH macros a bit.
-
- https://bugs.webkit.org/show_bug.cgi?id=36527
-
- * wtf/Assertions.h:
-
-2010-04-02 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Unreviewed, minor build fix.
-
- Change the order of the member initialisation list
- in constructor to match declaration order
-
- * runtime/Collector.cpp:
- (JSC::Heap::Heap):
+ (JSC::Interpreter::execute): Clarified the scope of DynamicGlobalObjectScope.
+ Updated for CallFrame::init API change.
-2010-04-01 Kinuko Yasuda <kinuko@chromium.org>
+ (JSC::Interpreter::executeCall): Clarified scope of DynamicGlobalObjectScope.
+ Updated for CallFrame::init API change. Added support for calling a host
+ function.
- Reviewed by Dmitry Titov.
+ (JSC::Interpreter::executeConstruct): Clarified scope of DynamicGlobalObjectScope.
+ Updated for CallFrame::init API change.
- Add FileThread for async file operation support in FileReader and FileWriter
- https://bugs.webkit.org/show_bug.cgi?id=36896
+ (JSC::Interpreter::prepareForRepeatCall): Updated for CallFrame::init API change.
- Add ENABLE_FILE_READER and ENABLE_FILE_WRITER flags.
-
- * Configurations/FeatureDefines.xcconfig:
-
-2010-03-31 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (windows build fix pt II).
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2010-03-31 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (windows build fix).
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2010-03-31 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Geoff Garen.
-
- Bug 36871 - Remove JSC::CString
- Use WTF::CString instead (which until recently was WebCore::CString).
-
- * JavaScriptCore.exp:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * runtime/UString.cpp:
- * runtime/UString.h:
-
-2010-03-31 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Unreviewed, fix after r56842.
-
- Add UNUSED_PARAM a to silence warning.
-
- * jit/JITStubs.cpp:
- (JSC::DEFINE_STUB_FUNCTION):
-
-2010-03-31 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Unreviewed, Symbian build fix.
-
- Refactor JITStubs.cpp so that the list of STUB_FUNCTIONs
- are not dependent on the JSVALUE32_64 guard.
-
- * jit/JITStubs.cpp: Place the JSVALUE32_64 guard inside
- the body of cti_op_eq_strings.
- * jit/JITStubs.h: Remove JSVALUE32_64 guard from
- cti_op_eq_strings stub.
-
-2010-03-30 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (windows build fix).
-
- Fixing b0rked version of JavaScriptCore.vcproj - added lines were truncated.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
-
-2010-03-30 Gavin Barraclough <barraclough@apple.com>
-
- Rubber stamped by Sam Weinig.
-
- https://bugs.webkit.org/show_bug.cgi?id=36866
- Move CString to WTF
-
- * Android.mk:
- * GNUmakefile.am:
- * JavaScriptCore.exp:
- * JavaScriptCore.gypi:
- * JavaScriptCore.pro:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
- * JavaScriptCore.vcproj/WTF/WTF.vcproj:
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * wtf/text: Added.
- * wtf/text/CString.cpp: Copied from WebCore/platform/text/CString.cpp.
- * wtf/text/CString.h: Copied from WebCore/platform/text/CString.h.
- (WTF::CStringBuffer::data):
- (WTF::CStringBuffer::length):
- (WTF::CStringBuffer::create):
- (WTF::CStringBuffer::CStringBuffer):
- (WTF::CStringBuffer::mutableData):
- (WTF::CString::CString):
- (WTF::CString::isNull):
- (WTF::CString::buffer):
- (WTF::operator!=):
+ (JSC::Interpreter::privateExecute): Updated for CallFrame::init API change.
+ Added some explicit JSValue(JSObject*) initialization, since relaxing
+ the JSFunction* restriction on callee has made register types more ambiguous.
+ Removed toThisObject() conversion, since all callees do it themselves now.
+ Updated host function call for new host function signature. Updated for
+ change to ExecState::argumentCount() API.
-2010-03-30 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
-
- Reviewed by nobody, build break.
-
- [Qt] Fix build break on Qt Mac.
-
- DESTDIR path on Mac do not include the configuration path by default
- like on Windows. Have to force it.
-
- * JavaScriptCore.pro:
-
-2010-03-29 Alice Liu <alice.liu@apple.com>
-
- Reviewed by NOBODY (build fix).
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
- add JSObjectRefPrivate.h
-
-2010-03-29 Chao-ying Fu <fu@mips.com>
-
- Reviewed by Oliver Hunt.
-
- MIPS JIT Supports
- https://bugs.webkit.org/show_bug.cgi?id=30144
-
- The following changes enable MIPS JIT.
+ * interpreter/Register.h:
+ (JSC::Register::):
+ (JSC::Register::operator=):
+ (JSC::Register::function): Changed callee() to be JSObject* instead of
+ JSFunction* -- now, it might be some other callable host object.
- * assembler/MIPSAssembler.h:
- (JSC::MIPSAssembler::lbu):
- (JSC::MIPSAssembler::linkWithOffset):
- * assembler/MacroAssemblerMIPS.h:
- (JSC::MacroAssemblerMIPS::load8):
- (JSC::MacroAssemblerMIPS::branch8):
- (JSC::MacroAssemblerMIPS::branchTest8):
- (JSC::MacroAssemblerMIPS::setTest8):
- (JSC::MacroAssemblerMIPS::setTest32):
- * jit/JIT.h:
- * jit/JITInlineMethods.h:
- (JSC::JIT::preserveReturnAddressAfterCall):
- (JSC::JIT::restoreReturnAddressBeforeReturn):
* jit/JITOpcodes.cpp:
- * jit/JITStubs.cpp:
- (JSC::JITThunks::JITThunks):
- * jit/JITStubs.h:
- (JSC::JITStackFrame::returnAddressSlot):
- * wtf/Platform.h:
-
-2010-02-26 Kenneth Rohde Christiansen <kenneth@webkit.org>
-
- Reviewed by Simon Fraser.
-
- Add support for Widgets 1.0: View Mode Media Feature
- https://bugs.webkit.org/show_bug.cgi?id=35446
-
- Add an enable flag for the Widgets (http://www.w3.org/TR/widgets-reqs/)
- and turn it on for Qt only.
-
- * wtf/Platform.h:
-
-2010-03-29 Patrick Gansterer <paroga@paroga.com>
-
- Reviewed by Darin Adler.
-
- Corrected name of (u)int64_t compile time assert.
- https://bugs.webkit.org/show_bug.cgi?id=36739
-
- int64_t_is_four_bytes -> int64_t_is_eight_bytes
-
- * os-win32/stdint.h:
-
-2010-03-29 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- [Qt] Use the -l syntax for linking against JavaScriptCore on Windows.
- This allow qmake to extract dependencies correctly when generating VS
- solutions.
-
- * JavaScriptCore.pri:
-
-2010-03-29 Thomas Zander <t.zander@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- https://bugs.webkit.org/show_bug.cgi?id=36742
-
- gcc for Symbian doesn't support gcc extensions like atomicity.h - disable
-
- * wtf/Threading.h: also detect os symbian
-
-2010-03-28 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- [Qt] Remove the definition of WTF_CHANGES guards from the build system
- https://bugs.webkit.org/show_bug.cgi?id=31670
-
- * JavaScriptCore.pro: Remove the definition of WTF_CHANGES
- as it is already defined in config.h
-
-2010-03-28 Kent Hansen <kent.hansen@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- [Qt] Add API for reporting additional memory cost of JavaScript objects
- https://bugs.webkit.org/show_bug.cgi?id=36650
-
- * qt/api/qscriptengine.cpp:
- (QScriptEngine::reportAdditionalMemoryCost):
- * qt/api/qscriptengine.h:
- * qt/api/qscriptengine_p.h:
- (QScriptEnginePrivate::reportAdditionalMemoryCost):
- * qt/tests/qscriptengine/tst_qscriptengine.cpp:
- (tst_QScriptEngine::reportAdditionalMemoryCost):
-
-2010-03-28 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- QScriptEngine API was enriched by globalObject() method
- which give an access to the global object.
-
- [Qt] QScriptEngine doesn't give an access to global object
- https://bugs.webkit.org/show_bug.cgi?id=36603
-
- * qt/api/qscriptengine.cpp:
- (QScriptEngine::globalObject):
- * qt/api/qscriptengine.h:
- * qt/api/qscriptengine_p.cpp:
- (QScriptEnginePrivate::globalObject):
- * qt/api/qscriptengine_p.h:
- * qt/tests/qscriptengine/tst_qscriptengine.cpp:
- (tst_QScriptEngine::globalObject):
-
-2010-03-26 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- [Qt] Build JavaScriptCore as a static library.
- https://bugs.webkit.org/show_bug.cgi?id=36590
-
- This patch takes what was left of the unused JavaScriptCore.pro
- and moved the compilation logic from JavaScriptCore.pri to
- JavaScriptCore.pro.
-
- * JavaScriptCore.pri:
- * JavaScriptCore.pro:
- * jsc.pro:
- * qt/api/QtScript.pro:
-
-2010-03-25 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (build fix).
-
- * profiler/ProfileGenerator.cpp:
- (JSC::ProfileGenerator::willExecute):
- (JSC::ProfileGenerator::didExecute):
-
-2010-03-25 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Geoff Garen.
-
- Bug 36611 - Cleanup JSC::CString
- Rename CString::c_str() -> CString::data(), CString::size() -> CString::length(),
- remove UString::getCString() (all uses are wrong, should use UString::UTF8String()).
-
- * bytecode/CodeBlock.cpp:
- (JSC::CodeBlock::printUnaryOp):
- (JSC::CodeBlock::printBinaryOp):
- (JSC::CodeBlock::printConditionalJump):
- (JSC::CodeBlock::printGetByIdOp):
- (JSC::CodeBlock::printPutByIdOp):
- (JSC::printGlobalResolveInfo):
- (JSC::printStructureStubInfo):
- (JSC::CodeBlock::printStructure):
- (JSC::CodeBlock::printStructures):
- (JSC::CodeBlock::dump):
- * jsc.cpp:
- (functionPrint):
- (functionDebug):
- (runInteractive):
- (fillBufferWithContentsOfFile):
- * profiler/CallIdentifier.h:
- (JSC::CallIdentifier::c_str):
- * profiler/Profile.cpp:
- (JSC::Profile::debugPrintDataSampleStyle):
- * profiler/ProfileNode.cpp:
- (JSC::ProfileNode::debugPrintData):
- (JSC::ProfileNode::debugPrintDataSampleStyle):
- * runtime/DateConversion.cpp:
- (JSC::parseDate):
- * runtime/JSGlobalObjectFunctions.cpp:
- (JSC::encode):
- (JSC::globalFuncJSCPrint):
- * runtime/UString.cpp:
- (JSC::operator==):
- (JSC::UString::toDouble):
- * runtime/UString.h:
- (JSC::CString::length):
- (JSC::CString::data):
-
-2010-03-25 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
-
- Reviewed by nobody, build fix.
-
- [Qt] Build fix on MSVC. Reverts r55633 for stdint.h
-
- This file gets included in generated moc files which don't
- include the prefix header.
-
- * os-win32/stdint.h:
-
-2010-03-24 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (windows build fix).
-
-2010-03-24 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Sam Weinig.
-
- Switch String::latin1, String::utf8, String::fromUTF8 to
- use WTF's Unicode conversion methods rather than TextEncoder.
- These methods only perform simple conversion, and don't need
- really require TextEncoder's full capability (to look up arbitrary
- encodings by name), switching to only be dependent on WTF will
- make it easier if we chose to move WebCore::String to WTF.
-
- * JavaScriptCore.exp:
-
-2010-03-24 Alexey Proskuryakov <ap@apple.com>
-
- Reviewed by Geoff Garen.
-
- * wtf/FastMalloc.h: Added a using directive for fastMallocSize, like we do for all public
- WTF symbols. Also sorted the list alphabetically.
-
-2010-03-23 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (speculative windows build fix part II).
-
-2010-03-23 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (speculative windows build fix).
-
-2010-03-23 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Bug 36519 - JSGlobalContextRelease is unnecessarily slow
-
- Since [ http://trac.webkit.org/changeset/35917 ], calling
- JSGlobalContextRelease always triggers a GC heap collection
- (if not a full destroy). As per 35917's changelog "This is
- only really necessary when the (JSGlobalObject's) last
- reference is released, but there is no way to determine that,
- and no harm in collecting slightly more often."
-
- Well, we now know of cases of API clients who are harmed by
- the performance penalty of collecting too often, so it's time
- to add a way to determine whether a call to JSGlobalContextRelease
- is removing the last protect from it's global object. If further
- protects are retaining the global object (likely from other
- JSGlobalContextRefs), then don't trigger a GC collection.
-
- * API/JSContextRef.cpp:
- * runtime/Collector.cpp:
- (JSC::Heap::unprotect): return a boolean indicating that the value is now unprotected.
- * runtime/Collector.h:
- * wtf/HashCountedSet.h:
- (WTF::::remove): return a boolean indicating whether the value was removed from the set.
-
-2010-03-23 Mark Rowe <mrowe@apple.com>
-
- Build fix.
-
- * runtime/ArrayPrototype.cpp:
- (JSC::arrayProtoFuncSplice): Some versions of GCC emit a warning about the implicit 64- to 32-bit truncation
- that takes place here. An explicit cast is sufficient to silence it.
-
-2010-03-23 Alexey Proskuryakov <ap@apple.com>
-
- Build fix.
-
- * runtime/ArrayPrototype.cpp: (JSC::arrayProtoFuncSplice): Fixed a typo - length doesn't
- need to be converted with toInteger().
-
-2010-03-23 Alexey Proskuryakov <ap@apple.com>
-
- Reviewed by Geoff Garen.
-
- https://bugs.webkit.org/show_bug.cgi?id=36511
- <rdar://problem/7753498> Safari freezes when using SPUTNIK JavaScript conformance check
-
- Test: fast/js/sputnik-S15.4.4.12_A3_T3.html
-
- * runtime/ArrayPrototype.cpp: (JSC::arrayProtoFuncSplice): We were incorrectly computing
- the start offset, and iterated over (almost) all integers. Note that this can be fixed
- without using doubles, but the code would be much more complicated, and there is no important
- reason to stick to integers here.
-
-2010-03-23 Kent Hansen <kent.hansen@nokia.com>
-
- Reviewed by Darin Adler.
-
- Fix compilation on Itanium in 32-bit mode
- https://bugs.webkit.org/show_bug.cgi?id=36494
-
- * wtf/Platform.h: Introduce CPU(IA64_32). Don't define
- WTF_USE_JSVALUE64 if the CPU is in 32-bit mode.
-
-2010-03-23 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Mark Rowe.
-
- Interpreter fix for <rdar://problem/7728196> REGRESSION (r46701): -(-2147483648)
- evaluates to -2147483648 on 32 bit (35842)
-
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::privateExecute): Only take the fast negate path if
- a bit other than bit 31 is set. If none of bits 0-30 are set, then the
- value we're negating can only be 0 or -2147483648, and neither can be
- negated in int space.
-
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_negate):
- (JSC::JIT::emitSlow_op_negate): Updated the JIT implementation to match
- the interpreter, since it's slightly simpler.
-
-2010-03-22 Siddharth Mathur <siddharth.mathur@nokia.com>
-
- Reviewed by Laszlo Gombos.
-
- [Symbian] More efficient aligned memory allocation for JSC Collector
- https://bugs.webkit.org/show_bug.cgi?id=34350
-
- * JavaScriptCore.pri: Added 2 new Symbian source files and HAL linkage
-
- * runtime/Collector.cpp: Reduced port-specific code and added private data member
- (JSC::Heap::Heap):
- (JSC::Heap::~Heap):
- (JSC::Heap::destroy):
- (JSC::Heap::allocateBlock):
- (JSC::Heap::freeBlockPtr):
-
- * runtime/Collector.h: Added private data member
-
- * wtf/symbian: Added.
- * wtf/symbian/BlockAllocatorSymbian.cpp: Added.
- (WTF::AlignedBlockAllocator::AlignedBlockAllocator): Helper class to allocate
- aligned blocks more efficiently as required by Collector
- (WTF::AlignedBlockAllocator::alloc):
- (WTF::AlignedBlockAllocator::free):
- (WTF::AlignedBlockAllocator::destroy):
- (WTF::AlignedBlockAllocator::~AlignedBlockAllocator):
- * wtf/symbian/BlockAllocatorSymbian.h: Added.
-
-2010-03-22 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Fixed <rdar://problem/7728196> REGRESSION (r46701): -(-2147483648)
- evaluates to -2147483648 on 32 bit (35842)
-
- Two ways to fix the same bug:
-
- 1. Check for overflow when negating, since negating the largest negative
- int causes overflow.
-
- 2. Constant-fold even when negating a negative, since, like they say in
- high school, "math works."
-
- * assembler/MacroAssemblerARM.h:
- (JSC::MacroAssemblerARM::branchNeg32):
- * assembler/MacroAssemblerX86Common.h:
- (JSC::MacroAssemblerX86Common::branchNeg32): Added a branching version
- of the negate operator.
-
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_negate): Use the branching version of the negate
- operator to check for overflow.
-
- (JSC::JIT::emitSlow_op_negate): Link the check for overflow to a slow case.
- (We could emit inline code for this, since we know what the result would
- be, but that's probably just a waste of generated code.)
-
- * parser/Grammar.y: Constant fold even when negating a negative.
-
-2010-03-22 David Kilzer <ddkilzer@apple.com>
-
- <http://webkit.org/b/36431> Clean up 'int' use in UString.cpp after r54789
-
- Reviewed by Darin Adler.
-
- * runtime/UString.cpp:
- (JSC::UString::from): Changed argument type from 'unsigned int'
- to 'unsigned' to match WebKit coding style.
- (JSC::UString::find): Changed static_cast<int>() to
- static_cast<unsigned>() now that this method returns unsigned.
- (JSC::UString::rfind): Ditto.
- * runtime/UString.h:
- (JSC::UString::from): Changed argument type from 'unsigned int'
- to 'unsigned' to match WebKit coding style.
-
-2010-03-22 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
-
- Reviewed by Kenneth Rohde Christiansen.
-
- Add support for syntax checking in the QtScript API.
-
- New class was created; the QScriptSyntaxCheckResult which main
- responsibility is to provide results of the ECMA Script code
- syntax check. The class is not fully functional as the JSC C API
- doesn't expose an error column number, but it is a good start point
- for a future development.
-
- [Qt] QtScript functionality should be extended by syntax checking.
- https://bugs.webkit.org/show_bug.cgi?id=36123
-
- * qt/api/QtScript.pro:
- * qt/api/qscriptengine.cpp:
- (QScriptEngine::checkSyntax):
- * qt/api/qscriptengine.h:
- * qt/api/qscriptengine_p.cpp:
- (QScriptEnginePrivate::checkSyntax):
- * qt/api/qscriptengine_p.h:
- * qt/api/qscriptsyntaxcheckresult.cpp: Added.
- (QScriptSyntaxCheckResult::QScriptSyntaxCheckResult):
- (QScriptSyntaxCheckResult::~QScriptSyntaxCheckResult):
- (QScriptSyntaxCheckResult::operator=):
- (QScriptSyntaxCheckResult::state):
- (QScriptSyntaxCheckResult::errorLineNumber):
- (QScriptSyntaxCheckResult::errorColumnNumber):
- (QScriptSyntaxCheckResult::errorMessage):
- * qt/api/qscriptsyntaxcheckresult.h: Added.
- * qt/api/qscriptsyntaxcheckresult_p.cpp: Added.
- (QScriptSyntaxCheckResultPrivate::~QScriptSyntaxCheckResultPrivate):
- (QScriptSyntaxCheckResultPrivate::errorMessage):
- (QScriptSyntaxCheckResultPrivate::errorLineNumber):
- * qt/api/qscriptsyntaxcheckresult_p.h: Added.
- (QScriptSyntaxCheckResultPrivate::get):
- (QScriptSyntaxCheckResultPrivate::QScriptSyntaxCheckResultPrivate):
- (QScriptSyntaxCheckResultPrivate::state):
- (QScriptSyntaxCheckResultPrivate::errorColumnNumber):
- * qt/tests/qscriptengine/tst_qscriptengine.cpp:
- (tst_QScriptEngine::checkSyntax_data):
- (tst_QScriptEngine::checkSyntax):
-
-2010-03-21 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- New class; QScriptProgram.
-
- The class should be used to evaluate the same script multiple times
- more efficiently.
-
- [Qt] QtScript should have QScriptProgram class
- https://bugs.webkit.org/show_bug.cgi?id=36008
-
- * qt/api/QtScript.pro:
- * qt/api/qscriptengine.cpp:
- (QScriptEngine::evaluate):
- * qt/api/qscriptengine.h:
- * qt/api/qscriptengine_p.cpp:
- (QScriptEnginePrivate::evaluate):
- * qt/api/qscriptengine_p.h:
- (QScriptEnginePrivate::evaluate):
- * qt/api/qscriptprogram.cpp: Added.
- (QScriptProgram::QScriptProgram):
- (QScriptProgram::~QScriptProgram):
- (QScriptProgram::operator=):
- (QScriptProgram::isNull):
- (QScriptProgram::sourceCode):
- (QScriptProgram::fileName):
- (QScriptProgram::firstLineNumber):
- (QScriptProgram::operator==):
- (QScriptProgram::operator!=):
- * qt/api/qscriptprogram.h: Added.
- * qt/api/qscriptprogram_p.h: Added.
- (QScriptProgramPrivate::get):
- (QScriptProgramPrivate::QScriptProgramPrivate):
- (QScriptProgramPrivate::~QScriptProgramPrivate):
- (QScriptProgramPrivate::isNull):
- (QScriptProgramPrivate::sourceCode):
- (QScriptProgramPrivate::fileName):
- (QScriptProgramPrivate::firstLineNumber):
- (QScriptProgramPrivate::operator==):
- (QScriptProgramPrivate::operator!=):
- (QScriptProgramPrivate::program):
- (QScriptProgramPrivate::file):
- (QScriptProgramPrivate::line):
- * qt/tests/qscriptengine/tst_qscriptengine.cpp:
- (tst_QScriptEngine::evaluateProgram):
-
-2010-03-21 David Kilzer <ddkilzer@apple.com>
-
- Blind attempt #2 to fix the Windows build after r56314
-
- * API/tests/testapi.c: Include JSObjectRefPrivate.h for the new
- methods instead of declaring them locally (and non-extern).
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- Backed out previous change.
-
-2010-03-21 David Kilzer <ddkilzer@apple.com>
-
- Blind attempt to fix the Windows build after r56314
-
- Try to fix the following errors on the Windows buildbot:
-
- Linking...
- testapi.obj : error LNK2001: unresolved external symbol "bool __cdecl JSObjectSetPrivateProperty(struct OpaqueJSContext const *,struct OpaqueJSValue *,struct OpaqueJSString *,struct OpaqueJSValue const *)" (?JSObjectSetPrivateProperty@@YA_NPBUOpaqueJSContext@@PAUOpaqueJSValue@@PAUOpaqueJSString@@PBU2@@Z)
- testapi.obj : error LNK2001: unresolved external symbol "struct OpaqueJSValue const * __cdecl JSObjectGetPrivateProperty(struct OpaqueJSContext const *,struct OpaqueJSValue *,struct OpaqueJSString *)" (?JSObjectGetPrivateProperty@@YAPBUOpaqueJSValue@@PBUOpaqueJSContext@@PAU1@PAUOpaqueJSString@@@Z)
- C:\cygwin\home\buildbot\slave\win-release\build\WebKitBuild\bin\testapi.exe : fatal error LNK1120: 2 unresolved externals
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Added
- missing symbols to be exported.
-
-2010-03-21 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Maciej Stachowiak.
-
- Documentation fix for previous patch.
-
- * API/JSObjectRefPrivate.h:
-
-2010-03-20 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Maciej Stachowiak.
-
- JSC needs an API to allow custom objects to have aprivate GC-accessible properties
- https://bugs.webkit.org/show_bug.cgi?id=36420
-
- Add new API methods to support "private" properties on custom
- objects.
-
- * API/JSCallbackObject.h:
- (JSC::JSCallbackObjectData::JSCallbackObjectData):
- (JSC::JSCallbackObjectData::~JSCallbackObjectData):
- (JSC::JSCallbackObjectData::getPrivateProperty):
- (JSC::JSCallbackObjectData::setPrivateProperty):
- (JSC::JSCallbackObjectData::deletePrivateProperty):
- (JSC::JSCallbackObjectData::markChildren):
- (JSC::JSCallbackObjectData::JSPrivatePropertyMap::getPrivateProperty):
- (JSC::JSCallbackObjectData::JSPrivatePropertyMap::setPrivateProperty):
- (JSC::JSCallbackObjectData::JSPrivatePropertyMap::deletePrivateProperty):
- (JSC::JSCallbackObjectData::JSPrivatePropertyMap::markChildren):
- (JSC::JSCallbackObject::getPrivateProperty):
- (JSC::JSCallbackObject::setPrivateProperty):
- (JSC::JSCallbackObject::deletePrivateProperty):
- (JSC::JSCallbackObject::markChildren):
- * API/JSObjectRef.cpp:
- (JSObjectGetPrivateProperty):
- (JSObjectSetPrivateProperty):
- (JSObjectDeletePrivateProperty):
- * API/JSObjectRefPrivate.h: Added.
- * API/tests/testapi.c:
- (main):
- * JavaScriptCore.exp:
- * JavaScriptCore.xcodeproj/project.pbxproj:
-
-2010-03-20 Kevin Ollivier <kevino@theolliviers.com>
-
- [wx] Build fixes after introduction of Brew files.
-
- * wscript:
-
-2010-03-18 Tom Callaway <tcallawa@redhat.com>
-
- Reviewed by Darin Adler.
-
- Bug 35429: Fix compile on SPARC64
- https://bugs.webkit.org/show_bug.cgi?id=35429
-
- * wtf/Platform.h: Set WTF_USE_JSVALUE64 for SPARC64
-
-2010-03-18 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Sam Weinig.
-
- Add API to directly expose JSON parsing
- https://bugs.webkit.org/show_bug.cgi?id=34887
-
- Add API to expose JSON parsing directly, and add tests to testapi
-
- * API/JSValueRef.cpp:
- (JSValueMakeFromJSONString):
- (JSValueCreateJSONString):
- * API/tests/testapi.c:
- (main):
- * JavaScriptCore.exp:
- * runtime/JSONObject.cpp:
- (JSC::JSONStringify):
- * runtime/JSONObject.h:
-
-2010-03-16 Sam Weinig <sam@webkit.org>
-
- Reviewed by Darin Adler and Mark Rowe.
-
- Update WebKit availability macros for release after 4.0.
-
- * API/WebKitAvailability.h:
-
-2010-03-17 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- undefined, NaN, and Infinity should be ReadOnly
- https://bugs.webkit.org/show_bug.cgi?id=36263
-
- Simply add the ReadOnly flag to these properties.
-
- * runtime/JSGlobalObject.cpp:
- (JSC::JSGlobalObject::reset):
-
-2010-03-17 Darin Adler <darin@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Speed up Math.round a little by removing unneeded special case
- https://bugs.webkit.org/show_bug.cgi?id=36107
-
- Test: fast/js/math.html
-
- * runtime/MathObject.cpp:
- (JSC::mathProtoFuncRound): This function had a special case for numbers
- between -0.5 and -0.0 to return -0.0. But the algorithm in the function
- already yields -0.0 for those cases, so the extra checking and branching
- is unneeded.
-
-2010-03-17 Mike Homey <glandium@debian.org>
-
- Reviewed by Gustavo Noronha.
-
- Build fix for SPARC. Fix missing macro value.
-
- * wtf/Platform.h:
-
-2010-03-16 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt, Darin Adler.
-
- Bug 36083 - REGRESSION (r55772-r55834): Crash in JavaScriptCore RegExp code on PowerPC
-
- The problem is a bug in our port of PCRE - that a read may take place from the first character in an
- empty string. For the time being, revert to using a valid pointer in the data segment rather than
- an invalid non-null pointer into the zero-page for the empty string's data pointer. A better fix for
- this will be to remove PCRE.
-
- * runtime/UStringImpl.cpp:
- (JSC::UStringImpl::empty):
-
-2010-03-16 Darin Adler <darin@apple.com>
-
- Rolled out r56081 since it broke the Windows build.
-
-2010-03-16 Zoltan Horvath <zoltan@webkit.org>
-
- Reviewed by Darin Adler.
-
- Remove extra <new> include and add guards to operator new/delete definitions
- https://bugs.webkit.org/show_bug.cgi?id=35967
-
- Remove extra <new> header include from FastAlloc.cpp since it is included in
- FastAlloc.h. Add ENABLE(GLOBAL_FASTMALLOC_NEW) macro guard to operator
- new/delete/new []/delete [] definitions.
-
- * wtf/FastMalloc.cpp:
-
-2010-03-15 Kwang Yul Seo <skyul@company100.net>
-
- Reviewed by Eric Seidel.
-
- [BREWMP] Add a function to create a BREW instance without local variable declarations.
- https://bugs.webkit.org/show_bug.cgi?id=34705
-
- Add a template function to create a BREW instance in one line.
-
- * wtf/brew/ShellBrew.h: Added.
- (WTF::createInstance):
-
-2010-03-15 Geoffrey Garen <ggaren@apple.com>
-
- Not reviewed.
-
- Removed a now-incorrect comment I forgot to remove in my last check-in.
-
- * wtf/FastMalloc.cpp:
- (WTF::TCMalloc_PageHeap::scavenge):
-
-2010-03-15 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Fixed a portion of:
- <rdar://problem/7165917> | https://bugs.webkit.org/show_bug.cgi?id=28676
- Safari 4 does not release memory back to the operating system fast enough (28676)
-
- Every few seconds, release a percentage of the minimum unused page count
- during that time period.
-
- SunSpider reports no change, command-line or in-browser, Mac or Windows.
-
- * wtf/FastMalloc.cpp:
- (WTF::TCMalloc_PageHeap::init):
- (WTF::TCMalloc_PageHeap::signalScavenger):
- (WTF::TCMalloc_PageHeap::initializeScavenger): Renamed shouldContinueScavenging
- to shouldScavenge, since scavenging is no longer something that we interrupt.
-
- (WTF::TCMalloc_PageHeap::scavenge): The new scavenging algorithm. Fixes
- a bug where the old code would release only one item from each size class
- per scavenge, potentially leaving large numbers of large-sized objects
- unreleased for a long time.
-
- (WTF::TCMalloc_PageHeap::shouldScavenge):
- (WTF::TCMalloc_PageHeap::New):
- (WTF::TCMalloc_PageHeap::AllocLarge):
- (WTF::TCMalloc_PageHeap::Delete):
- (WTF::TCMalloc_PageHeap::GrowHeap):
- (WTF::TCMalloc_PageHeap::scavengerThread):
- (WTF::TCMalloc_PageHeap::periodicScavenge): Updated to track the minimum
- value of free_committed_pages_ during a given scavenge period.
-
-2010-03-15 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Sam Weinig.
-
- https://bugs.webkit.org/show_bug.cgi?id=35843
- Re-land reverted fix to JSString::getIndex()
-
- Calling getIndex() on a JSString in rope form may result in a JSException being thrown
- if there is insuficient memory so value(exec) returns UString() with length zero,
- which will be passed to jsSingleCharacterSubstring.
- Add a slow case function to trap the error & return a safe null value, until the
- exception is handled.
-
- * runtime/JSString.cpp:
- (JSC::JSString::getIndexSlowCase):
- (JSC::JSString::getStringPropertyDescriptor):
- * runtime/JSString.h:
- (JSC::jsSingleCharacterSubstring):
- (JSC::JSString::getIndex):
- (JSC::jsSingleCharacterString):
- (JSC::JSString::getStringPropertySlot):
-
-2010-03-04 Kenneth Rohde Christiansen <kenneth@webkit.org>
-
- Reviewed by Adam Roben.
-
- Add a long long version of abs() for MSVC.
-
- * wtf/MathExtras.h:
- (abs):
-
-2010-03-15 Gabor Loki <loki@webkit.org>
-
- Reviewed by Gavin Barraclough.
-
- Combine ctiTrampolines on ARM and Thumb-2
- https://bugs.webkit.org/show_bug.cgi?id=36014
+ (JSC::JIT::privateCompileCTINativeCall):
+ * jit/JITOpcodes32_64.cpp:
+ (JSC::JIT::privateCompileCTINativeCall): Deleted a bunch of code that
+ set up the arguments to host functions -- all but one of the arguments
+ are gone now. This is the actual optimization.
* jit/JITStubs.cpp:
- (JSC::JITThunks::JITThunks):
-
-2010-03-12 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (build fix).
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2010-03-12 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (build fix).
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2010-03-11 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Bug 36075 - Clean up screwyness re static string impls & Identifiers.
-
- * API/JSClassRef.cpp:
- (OpaqueJSClass::~OpaqueJSClass): Classname may be null/empty, and these are an identifer. This is okay, since the null/empty strings are shared across all threads.
- * JavaScriptCore.exp:
- * runtime/Identifier.cpp:
- (JSC::Identifier::add): No need to explicitly hash null reps, this is done in the ststic UStringImpl constructor.
- (JSC::Identifier::addSlowCase): UStringImpl::empty() handled & checkCurrentIdentifierTable now called in the header.
- (JSC::Identifier::checkCurrentIdentifierTable): Replaces checkSameIdentifierTable (this no longer checked the rep since the identifierTable pointer was removed from UString::Rep long ago).
- * runtime/Identifier.h:
- (JSC::Identifier::add): Replace call to checkSameIdentifierTable with call to checkCurrentIdentifierTable at head of function.
- * runtime/UStringImpl.cpp:
- (JSC::UStringImpl::~UStringImpl): Remove call to checkConsistency - this function no longer checks anything interesting.
- * runtime/UStringImpl.h:
- (JSC::UStringOrRopeImpl::UStringOrRopeImpl): Set s_refCountFlagIsIdentifier in static constructor.
- (JSC::UStringImpl::UStringImpl): remove calls to checkConsistency (see above), add new ASSERT to substring constructor.
- (JSC::UStringImpl::setHash): ASSERT not static (static strings set the hash in their constructor, should not reach this code path).
- (JSC::UStringImpl::create): Add missing ASSERT.
- (JSC::UStringImpl::setIsIdentifier): ASSERT !isStatic() (static strings hash set in constructor).
-
-2010-03-12 Peter Varga <pvarga@inf.u-szeged.hu>
-
- Reviewed by David Levin.
-
- Two functions tryConsumeCharacter() and tryConsumeCharacterClass() are
- removed from yarr/RegexInterpreter.cpp because they are never called.
-
- * yarr/RegexInterpreter.cpp:
-
-2010-03-11 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- The JSNative state was renamed to JSPrimitive. The new name better
- coresponds to the ECMAScript standard.
-
- Enum QScriptValuePrivate::States was renamed to State to obey Qt
- coding style rules ("States" name suggests that a state could
- mixed together with an other state using bitwise logic operators.
-
- [Qt] QScriptValuePrivate::States has naming issues
- https://bugs.webkit.org/show_bug.cgi?id=35968
-
- * qt/api/qscriptvalue_p.h:
- (QScriptValuePrivate::):
- (QScriptValuePrivate::QScriptValuePrivate):
- (QScriptValuePrivate::isBool):
- (QScriptValuePrivate::isNumber):
- (QScriptValuePrivate::isNull):
- (QScriptValuePrivate::isString):
- (QScriptValuePrivate::isUndefined):
- (QScriptValuePrivate::toString):
- (QScriptValuePrivate::toNumber):
- (QScriptValuePrivate::toBool):
- (QScriptValuePrivate::assignEngine):
- (QScriptValuePrivate::refinedJSValue):
-
-2010-03-11 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (Windows build fix).
-
- Add export.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2010-03-11 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (Windows build fix).
-
- Add export.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2010-03-11 Gavin Barraclough <barraclough@apple.com>
-
- Rubber stamped by Oliver Hunt.
-
- Remove nonsense comments used in development & commited in error.
-
- * runtime/UStringImpl.h:
-
-2010-03-11 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (Windows build fix).
-
- Remove export.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2010-03-11 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- https://bugs.webkit.org/show_bug.cgi?id=36041
- Remove unnecessary differences in common code between WebCore::StringImpl & JSC::UStringImpl
-
- Much of the code in WebCore::StringImpl and JSC::UStringImpl is now very similar,
- but has trivial and unnecessary formatting differences, such as the exact wording
- of comments, missing ASSERTs, functions implemented in the .h vs .cpp etc.
-
- * runtime/Identifier.cpp:
- (JSC::Identifier::add): UStringImpl::empty() now automatically hashes, uas per WebCore strings.
- (JSC::Identifier::addSlowCase): UStringImpl::empty() now automatically hashes, uas per WebCore strings.
- * runtime/UStringImpl.cpp:
- (JSC::UStringImpl::~UStringImpl): Only call bufferOwnership() once, add missing ASSERTs.
- (JSC::UStringImpl::createUninitialized): Move from .h, not commonly called, no need to inline.
- (JSC::UStringImpl::create): Move from .h, not commonly called, no need to inline.
- (JSC::UStringImpl::sharedBuffer): Rewritten to more closely match WebCore implementation, remove need for separate baseSharedBuffer() method.
- * runtime/UStringImpl.h:
- (JSC::UStringImpl::UStringImpl): Automatically hash static strings, ASSERT m_data & m_length are non-null/non-zero in non-static strings.
- (JSC::UStringImpl::setHash): Add missing ASSERT.
- (JSC::UStringImpl::create): Moved to .cpp / added missing check for empty string creation.
- (JSC::UStringImpl::adopt): Vector.size() returns size_t, not unsigned.
- (JSC::UStringImpl::cost): Renamed m_bufferSubstring -> m_substringBuffer
- (JSC::UStringImpl::hash): Reordered in file.
- (JSC::UStringImpl::existingHash): Reordered in file.
- (JSC::UStringImpl::computeHash): Reordered in file, renamed parameter.
- (JSC::UStringImpl::checkConsistency): rewrote ASSERT.
- (JSC::UStringImpl::bufferOwnership): Return type should be BufferOwnership.
- (JSC::UStringImpl::): Moved friends to head of class.
-
-2010-03-11 Mark Rowe <mrowe@apple.com>
-
- Reviewed by David Kilzer.
-
- <rdar://problem/7745082> Make it possible to build WebKit for older Mac OS X versions from the current Mac OS X version
-
- Default to using the appropriate SDK if the target Mac OS X version is not the current Mac OS X version.
-
- * Configurations/Base.xcconfig:
-
-2010-03-11 Mark Rowe <mrowe@apple.com>
-
- Reviewed by Tim Hatcher.
-
- <rdar://problem/7745082> Make it possible to build WebKit for older Mac OS X versions from the current Mac OS X version
-
- Introduce TARGET_MAC_OS_X_VERSION_MAJOR to represent the Mac OS X version that is being targeted. It defaults to the
- current Mac OS X version unless otherwise specified.
-
- Key off TARGET_MAC_OS_X_VERSION_MAJOR where we'd previously been keying off MAC_OS_X_VERSION_MAJOR.
-
- Explicitly map from the target Mac OS X version to the preferred compiler since Xcode's default compiler choice
- may not be usable when targetting a different Mac OS X version.
-
- Key off TARGET_GCC_VERSION rather than MAC_OS_X_VERSION_MAJOR in locations where we'd previously been keying off
- MAC_OS_X_VERSION_MAJOR but the decision is really related to the compiler version being used.
-
- * Configurations/Base.xcconfig:
- * Configurations/DebugRelease.xcconfig:
- * Configurations/FeatureDefines.xcconfig:
- * Configurations/JavaScriptCore.xcconfig:
- * Configurations/Version.xcconfig:
-
-2010-03-11 Simon Fraser <simon.fraser@apple.com>
-
- Reviewed by Mark Rowe.
-
- Sort the project file.
-
- * JavaScriptCore.xcodeproj/project.pbxproj:
-
-2010-03-11 Simon Fraser <simon.fraser@apple.com>
-
- Reviewed by Mark Rowe.
-
- Sort the project file .
-
- * JavaScriptCore.xcodeproj/project.pbxproj:
-
-2010-03-11 Gabor Loki <loki@webkit.org>
-
- Reviewed by Gavin Barraclough.
-
- Buildfix for Thumb-2 after r55684. Add branch8 and branchTest8 functions.
- https://bugs.webkit.org/show_bug.cgi?id=35892
-
- * assembler/ARMv7Assembler.h:
- (JSC::ARMv7Assembler::):
- (JSC::ARMv7Assembler::ldrb):
- * assembler/MacroAssemblerARMv7.h:
- (JSC::MacroAssemblerARMv7::load8):
- (JSC::MacroAssemblerARMv7::branch8):
- (JSC::MacroAssemblerARMv7::branchTest8):
- (JSC::MacroAssemblerARMv7::setTest8):
-
-2010-03-10 Gavin Barraclough <barraclough@apple.com>
-
- Rubber stamped by Oliver Hunt.
+ (JSC::DEFINE_STUB_FUNCTION): Updated for ExecState and Register API
+ changes noted above. Removed toThisObject() conversion, since all callees
+ do it themselves now.
- Rename JSC::UStringImpl::data() to characters(), to match WebCore::StringImpl.
-
- * API/JSClassRef.cpp:
- (OpaqueJSClassContextData::OpaqueJSClassContextData):
- * bytecompiler/BytecodeGenerator.cpp:
- (JSC::keyForCharacterSwitch):
- * bytecompiler/NodesCodegen.cpp:
- (JSC::processClauseList):
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::privateExecute):
- * jit/JITStubs.cpp:
- (JSC::DEFINE_STUB_FUNCTION):
- * runtime/ArrayPrototype.cpp:
- (JSC::arrayProtoFuncToString):
- * runtime/Identifier.cpp:
- (JSC::Identifier::equal):
- (JSC::Identifier::addSlowCase):
- * runtime/JSString.cpp:
- (JSC::JSString::resolveRope):
- * runtime/UString.cpp:
- (JSC::UString::toStrictUInt32):
- (JSC::equal):
- * runtime/UString.h:
- (JSC::UString::data):
- * runtime/UStringImpl.h:
- (JSC::UStringImpl::characters):
- (JSC::UStringImpl::hash):
- (JSC::UStringImpl::setHash):
-
-2010-03-10 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Darin Adler, Geoffrey Garen, Maciej Stachowiak.
-
- https://bugs.webkit.org/show_bug.cgi?id=35991
- Would be faster to not use a thread specific to implement StringImpl::empty()
-
- Change JSC::UStringImpl's implementation of empty() match to match StringImpl's new implementation
- (use a static defined within the empty() method), and change the interface to match too (return
- a pointer not a reference).
-
- ~0% performance impact (possible minor progression from moving empty() from .h to .cpp).
-
- * JavaScriptCore.exp:
- * runtime/Identifier.cpp:
- (JSC::Identifier::add):
- (JSC::Identifier::addSlowCase):
- * runtime/PropertyNameArray.cpp:
- (JSC::PropertyNameArray::add):
- * runtime/UString.cpp:
- (JSC::initializeUString):
- (JSC::UString::UString):
- * runtime/UStringImpl.cpp:
- (JSC::UStringImpl::empty):
- (JSC::UStringImpl::create):
- * runtime/UStringImpl.h:
- (JSC::UStringImpl::adopt):
- (JSC::UStringImpl::createUninitialized):
- (JSC::UStringImpl::tryCreateUninitialized):
-
-2010-03-10 Dmitry Titov <dimich@chromium.org>
-
- Not reviewed, fixing Snow Leopard build.
-
- * wtf/mac/MainThreadMac.mm: Forgot 'static' for a new local function.
- (WTF::postTimer):
-
-2010-03-10 Dmitry Titov <dimich@chromium.org>
-
- Reviewed by Darin Adler.
-
- Make Document::postTask to use a single queue of tasks, to fire them in order
- https://bugs.webkit.org/show_bug.cgi?id=35943
-
- The patch uses CFRunLoopTimer to schedule execution of tasks instead of performSelectorOnMainThread which apparently can starve other event sources.
- The timer is used when the schedule request is coming on the main thread itself. This happens when the task is posted on the main thread or
- when too many tasks are posted and the queue does 'stop and re-schedule' to make sure run loop has a chance to execute other events.
-
- * wtf/mac/MainThreadMac.mm:
- (WTF::timerFired):
- (WTF::postTimer):
- (WTF::scheduleDispatchFunctionsOnMainThread): Use timer posted to the current RunLoop if scheduling the task execution while on the main thread.
-
-2010-03-10 Geoffrey Garen <ggaren@apple.com>
-
- Windows build fix: added new symbol.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2010-03-10 Geoffrey Garen <ggaren@apple.com>
-
- Windows build fix: removed old symbol.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2010-03-09 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Alexey Proskuryakov, Darin Adler, and Sam Weinig.
-
- Refactored fastCheckConsistency to match some review comments:
- - renamed fastCheckConsistency to fastMallocSize, and changed ValueCheck
- to ASSERT that a pointer's fastMallocSize is not 0.
- - implemented a version of fastMallocSize for tcmalloc.
-
- Also moved some pre-existing code around to avoid a problem related to
- mismatched #define/#undef of malloc/free in this source file.
-
- * JavaScriptCore.exp:
- * wtf/FastMalloc.cpp:
- (WTF::fastMallocSize): Renamed. Fixed indentation.
-
- (WTF::TCMalloc_PageHeap::scavenge): Removed an incorrect ASSERT that
- got in the way of testing the tcmalloc implementation. (More information
- on why this ASSERT is incorrect is in <rdar://problem/7165917>.)
-
- (WTF::TCMallocStats::fastMallocSize): Implemented for tcmalloc.
-
- * wtf/FastMalloc.h: Updated for rename.
-
- * wtf/ValueCheck.h:
- (WTF::): Moved the ASSERT that used to be in fastCheckConsistency here.
-
-2010-03-10 Kevin Ollivier <kevino@theolliviers.com>
-
- Reviewed by Eric Seidel.
-
- Make global new/delete operators configurable for all ports and disable it
- for the wx port for now.
-
- * wtf/FastMalloc.h:
- * wtf/Platform.h:
-
-2010-03-09 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (reverting r54510).
-
- This caused a performance regression, by breaking the code
- generator's logic to calculate the skip level for resolving
- variables (traced by rdar:7683350) Reverting for now.
-
- * parser/Grammar.y:
- * parser/NodeConstructors.h:
- (JSC::ContinueNode::ContinueNode):
- (JSC::BreakNode::BreakNode):
- (JSC::ForInNode::ForInNode):
- * runtime/CommonIdentifiers.cpp:
- (JSC::CommonIdentifiers::CommonIdentifiers):
- * runtime/CommonIdentifiers.h:
- * runtime/FunctionPrototype.cpp:
- (JSC::FunctionPrototype::FunctionPrototype):
- * runtime/Identifier.cpp:
- (JSC::Identifier::add):
- * runtime/PropertyNameArray.cpp:
- (JSC::PropertyNameArray::add):
-
-2010-03-09 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Darin Adler.
-
- Changed FastMalloc statistics reporting to be a bit clearer. We now
- report:
- - Reserved VM Bytes: the VM that has been mapped into the process.
- - Committed VM Bytes: the subset of Reserved VM Bytes actually in use.
- - Free List Bytes: the subset of Committed VM Bytes in a free list.
-
- * wtf/FastMalloc.cpp:
- (WTF::fastMallocStatistics):
- (WTF::TCMallocStats::fastMallocStatistics): Updated to report the statistics
- above. Standardized use of "ifdef WTF_CHANGES". Added a SpinLockHolder
- around all statistics gathering, since it reads from the page heap.
-
- * wtf/FastMalloc.h: Updated to report the statistics above.
-
-2010-03-09 Gabor Loki <loki@webkit.org>
-
- Rubber-stamped by Maciej Stachowiak.
-
- Buildfix for ARM after r55684. Add branch8 and branchTest8 functions.
- https://bugs.webkit.org/show_bug.cgi?id=35892
-
- * assembler/ARMAssembler.cpp:
- (JSC::ARMAssembler::dataTransfer32):
- * assembler/ARMAssembler.h:
- (JSC::ARMAssembler::):
- * assembler/MacroAssemblerARM.h:
- (JSC::MacroAssemblerARM::load8):
- (JSC::MacroAssemblerARM::branch8):
- (JSC::MacroAssemblerARM::branchTest8):
-
-2010-03-08 Geoffrey Garen <ggaren@apple.com>
-
- Windows build fix: 'P' is not a type. Luckily, 'void' is.
-
- * wtf/FastMalloc.cpp:
- (WTF::fastCheckConsistency):
-
-2010-03-08 Geoffrey Garen <ggaren@apple.com>
-
- Windows build fix: export a new symbol.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2010-03-08 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Maciej Stachowiak.
-
- Switching malloc implementations requires a world rebuild
- https://bugs.webkit.org/show_bug.cgi?id=35899
-
- * wtf/FastMalloc.cpp:
- (WTF::fastCheckConsistency):
- (WTF::TCMallocStats::fastCheckConsistency):
- * wtf/FastMalloc.h:
- * wtf/ValueCheck.h:
- (WTF::): Moved pointer checking into a helper function in FastMalloc.cpp,
- so you can switch malloc implementations without rebuilding the world.
-
-2010-03-07 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Darin Adler.
-
- TypeInfo is unnecessarily large
- https://bugs.webkit.org/show_bug.cgi?id=35850
-
- Reduce the size of the type and flags members to a single
- byte each, reducing the size of Structure by 8 bytes.
-
- * assembler/MacroAssemblerX86Common.h:
- (JSC::MacroAssemblerX86Common::branch8):
- (JSC::MacroAssemblerX86Common::branchTest8):
- (JSC::MacroAssemblerX86Common::setTest8):
- Add single byte branches, and correct setTest8 to do a
- single byte read from memory, and actually store the result
- * assembler/X86Assembler.h:
- (JSC::X86Assembler::):
- (JSC::X86Assembler::cmpb_im):
- (JSC::X86Assembler::testb_im):
- * jit/JITCall.cpp:
- (JSC::JIT::emit_op_construct_verify):
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_instanceof):
- (JSC::JIT::emit_op_jeq_null):
- (JSC::JIT::emit_op_jneq_null):
- (JSC::JIT::emit_op_get_pnames):
- (JSC::JIT::emit_op_convert_this):
- (JSC::JIT::emit_op_construct_verify):
- (JSC::JIT::emit_op_to_jsnumber):
- (JSC::JIT::emit_op_eq_null):
- (JSC::JIT::emit_op_neq_null):
- * runtime/JSTypeInfo.h:
- (JSC::TypeInfo::TypeInfo):
- (JSC::TypeInfo::type):
-
-2010-03-08 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (reverting regression).
-
- Reverting 55035, this caused a regression.
- (https://bugs.webkit.org/show_bug.cgi?id=35843)
-
- * runtime/JSString.cpp:
- (JSC::JSString::resolveRope):
- (JSC::JSString::getStringPropertyDescriptor):
- * runtime/JSString.h:
- (JSC::jsSingleCharacterSubstring):
- (JSC::JSString::getIndex):
- (JSC::JSString::getStringPropertySlot):
- * runtime/UStringImpl.cpp:
- * runtime/UStringImpl.h:
-
-2010-03-08 Stuart Morgan <stuartmorgan@chromium.org>
-
- Reviewed by Darin Adler.
-
- Added a new USE definition for secure text mode on the Mac.
- https://bugs.webkit.org/show_bug.cgi?id=31265
-
- * wtf/Platform.h:
-
-2010-03-08 Jian Li <jianli@chromium.org>
-
- Reviewed by Dmitry Titov.
-
- Blob.slice support.
- https://bugs.webkit.org/show_bug.cgi?id=32993
-
- Add ENABLE_BLOB_SLICE feature define.
- Also fix a problem that JSValue.toInteger is not exposed on Windows.
-
- * Configurations/FeatureDefines.xcconfig:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2010-03-07 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- Small performance fix in the QScriptConverter::toString().
-
- The QByteArray was replaced by the QVarLengthArray which doesn't
- have to allocate any memory on heap.
-
- [Qt] QScriptConverter::toString() should use QVarLengthArray instead of QByteArray
- https://bugs.webkit.org/show_bug.cgi?id=35577
-
- * qt/api/qscriptconverter_p.h:
- (QScriptConverter::toString):
-
-2010-03-06 Mark Rowe <mrowe@apple.com>
-
- Rubber-stamped by Sam Weinig.
-
- Remove unnecessary includes of wtf/Platform.h. This is already pulled in by config.h.
-
- * API/APICast.h:
- * API/JSCallbackFunction.cpp:
- * API/JSContextRef.cpp:
- * API/JSObjectRef.cpp:
- * API/JSValueRef.cpp:
- * assembler/ARMAssembler.h:
- * assembler/ARMv7Assembler.h:
- * assembler/AbstractMacroAssembler.h:
- * assembler/AssemblerBuffer.h:
- * assembler/AssemblerBufferWithConstantPool.h:
- * assembler/CodeLocation.h:
- * assembler/LinkBuffer.h:
- * assembler/MIPSAssembler.h:
- * assembler/MacroAssembler.h:
- * assembler/MacroAssemblerARM.h:
- * assembler/MacroAssemblerARMv7.h:
- * assembler/MacroAssemblerCodeRef.h:
- * assembler/MacroAssemblerMIPS.h:
- * assembler/MacroAssemblerX86.h:
- * assembler/MacroAssemblerX86Common.h:
- * assembler/MacroAssemblerX86_64.h:
- * assembler/RepatchBuffer.h:
- * assembler/X86Assembler.h:
- * jit/JIT.h:
- * jit/JITCode.h:
- * jit/JITInlineMethods.h:
- * jit/JITStubs.h:
- * os-win32/stdint.h:
- * runtime/JSAPIValueWrapper.h:
- * runtime/JSImmediate.h:
- * wtf/ASCIICType.h:
- * wtf/StdLibExtras.h:
- * wtf/VMTags.h:
- * yarr/RegexCompiler.h:
- * yarr/RegexInterpreter.h:
- * yarr/RegexJIT.h:
- * yarr/RegexParser.h:
- * yarr/RegexPattern.h:
-
-2010-03-06 Kwang Yul Seo <skyul@company100.net>
-
- Reviewed by Eric Seidel.
-
- [BREWMP] Share OwnPtr.
- https://bugs.webkit.org/show_bug.cgi?id=35776
-
- Share OwnPtr implementation with BREW MP and remove OwnPtrBrew.
-
- * wtf/OwnPtrBrew.cpp: Added.
- (WTF::deleteOwnedPtr):
- * wtf/OwnPtrCommon.h:
- * wtf/brew/OwnPtrBrew.cpp: Removed.
- * wtf/brew/OwnPtrBrew.h: Removed.
-
-2010-03-06 Patrick Gansterer <paroga@paroga.com>
-
- Reviewed by Eric Seidel.
-
- Implemented JIT_OPTIMIZE_NATIVE_CALL for WinCE
- https://bugs.webkit.org/show_bug.cgi?id=33426
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::privateCompileCTIMachineTrampolines):
-
-2010-03-05 Oliver Hunt <oliver@apple.com>
-
- Reviewed by NOBODY (build fix).
-
- Add enw exports to windows
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2010-03-05 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- JSC should cache int to Identifier conversion as it does for ordinary strings
- https://bugs.webkit.org/show_bug.cgi?id=35814
-
- Make the NumericStrings cache cache unsigned ints in addition to signed.
- We keep them separate from the int cache as it both simplifies code, and
- also because the unsigned path is exclusive to property access and therefore
- seems to have different usage patterns.
-
- The primary trigger for the unsigned to Identifier propertyName conversion
- is the construction of array-like objects out of normal objects. Given these
- tend to be relative small numbers, and the array-like behaviour lends itself
- to sequential values this patch also adds a non-colliding cache for all small
- numbers.
-
- * JavaScriptCore.exp:
- * runtime/Identifier.cpp:
- (JSC::Identifier::from):
- * runtime/Identifier.h:
- * runtime/NumericStrings.h:
- (JSC::NumericStrings::add):
- (JSC::NumericStrings::lookup):
- (JSC::NumericStrings::lookupSmallString):
-
-2010-03-03 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- Allow static property getters to interact with JSCs caching
- https://bugs.webkit.org/show_bug.cgi?id=35716
-
- Add new opcodes for handling cached lookup of static value getters.
- More or less the same as with JS getters, all that changes is that
- instead of calling through a JSFunction we always know that we have
- a C function to call.
-
- For the patching routines in the JIT we now need to pass a few
- new parameters to allow us to pass enough information to the stub
- function to allow us to call the C function correctly. Logically
- this shouldn't actually be necessary as all of these functions ignore
- the identifier, but removing the ident parameter would require
- somewhat involved changes to the way we implement getOwnPropertySlot,
- etc.
-
- * bytecode/CodeBlock.cpp:
- (JSC::CodeBlock::dump):
- (JSC::CodeBlock::derefStructures):
- (JSC::CodeBlock::refStructures):
- * bytecode/Instruction.h:
- (JSC::Instruction::Instruction):
- (JSC::Instruction::):
- * bytecode/Opcode.h:
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::tryCacheGetByID):
- (JSC::Interpreter::privateExecute):
- * jit/JIT.cpp:
- (JSC::JIT::privateCompileMainPass):
- * jit/JIT.h:
- (JSC::JIT::compileGetByIdProto):
- (JSC::JIT::compileGetByIdSelfList):
- (JSC::JIT::compileGetByIdProtoList):
- (JSC::JIT::compileGetByIdChainList):
- (JSC::JIT::compileGetByIdChain):
- * jit/JITPropertyAccess.cpp:
- (JSC::JIT::privateCompileGetByIdProto):
- (JSC::JIT::privateCompileGetByIdSelfList):
- (JSC::JIT::privateCompileGetByIdProtoList):
- (JSC::JIT::privateCompileGetByIdChainList):
- (JSC::JIT::privateCompileGetByIdChain):
- * jit/JITPropertyAccess32_64.cpp:
- (JSC::JIT::privateCompileGetByIdProto):
- (JSC::JIT::privateCompileGetByIdSelfList):
- (JSC::JIT::privateCompileGetByIdProtoList):
- (JSC::JIT::privateCompileGetByIdChainList):
- (JSC::JIT::privateCompileGetByIdChain):
- * jit/JITStubs.cpp:
- (JSC::JITThunks::tryCacheGetByID):
- (JSC::DEFINE_STUB_FUNCTION):
- * jit/JITStubs.h:
- (JSC::):
- * runtime/JSFunction.cpp:
- (JSC::JSFunction::getOwnPropertySlot):
- * runtime/Lookup.h:
- (JSC::getStaticPropertySlot):
- (JSC::getStaticValueSlot):
- * runtime/PropertySlot.h:
- (JSC::PropertySlot::):
- (JSC::PropertySlot::PropertySlot):
- (JSC::PropertySlot::cachedPropertyType):
- (JSC::PropertySlot::isCacheable):
- (JSC::PropertySlot::isCacheableValue):
- (JSC::PropertySlot::setValueSlot):
- (JSC::PropertySlot::setCacheableCustom):
- (JSC::PropertySlot::setGetterSlot):
- (JSC::PropertySlot::setCacheableGetterSlot):
- (JSC::PropertySlot::clearOffset):
- (JSC::PropertySlot::customGetter):
-
-2010-03-04 Shinichiro Hamaji <hamaji@chromium.org>
-
- Unreviewed. Remove a non-ASCII character introduced in the following bug.
-
- put_by_id does will incorrectly cache writes where a specific value exists, where at the point of caching the same value is being written.
- https://bugs.webkit.org/show_bug.cgi?id=35537
-
- * runtime/JSObject.h:
- (JSC::JSObject::putDirectInternal):
-
-2010-03-04 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
-
- Reviewed by Tor Arne Vestbø.
-
- [Qt] Make the OUTPUT_DIR variable in qmake projects independent of build-webkit's logic.
-
- This also allows shadow builds relying only on qmake to work properly.
- * jsc.pro:
- * qt/api/QtScript.pro:
- * qt/tests/qscriptengine/qscriptengine.pro:
- * qt/tests/qscriptvalue/qscriptvalue.pro:
- * qt/tests/tests.pri:
-
-2010-03-03 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- QScriptValue::isObject fix.
-
- Fix broken internal state evaluation from JSValue to JSNative / JSObject.
- New function was introduced which should take care about promoting
- JSValue state inside QScriptValuePrivate. It should be used instead of a
- direct JSC C API call.
-
- The bug exposed a weakness in autotest suite, as the QScriptValuePrivate
- is based on state machine with lazy state evaluation, there is a possibility
- that serial sequencial calls to the same public const function could return
- different results. The patch fix the issue.
-
- [Qt] Sometimes QScriptValue::isObject returns an incorrect value
- https://bugs.webkit.org/show_bug.cgi?id=35387
-
- * qt/api/qscriptvalue_p.h:
- (QScriptValuePrivate::isBool):
- (QScriptValuePrivate::isNumber):
- (QScriptValuePrivate::isNull):
- (QScriptValuePrivate::isString):
- (QScriptValuePrivate::isUndefined):
- (QScriptValuePrivate::isError):
- (QScriptValuePrivate::isObject):
- (QScriptValuePrivate::isFunction):
- (QScriptValuePrivate::call):
- (QScriptValuePrivate::refineJSValue):
- * qt/tests/qscriptvalue/tst_qscriptvalue_generated.cpp:
- (tst_QScriptValue::initScriptValues):
- (tst_QScriptValue::isValid_makeData):
- (tst_QScriptValue::isValid_test):
- (tst_QScriptValue::isBool_makeData):
- (tst_QScriptValue::isBool_test):
- (tst_QScriptValue::isBoolean_makeData):
- (tst_QScriptValue::isBoolean_test):
- (tst_QScriptValue::isNumber_makeData):
- (tst_QScriptValue::isNumber_test):
- (tst_QScriptValue::isFunction_test):
- (tst_QScriptValue::isNull_makeData):
- (tst_QScriptValue::isNull_test):
- (tst_QScriptValue::isString_makeData):
- (tst_QScriptValue::isString_test):
- (tst_QScriptValue::isUndefined_makeData):
- (tst_QScriptValue::isUndefined_test):
- (tst_QScriptValue::isObject_makeData):
- (tst_QScriptValue::isObject_test):
- (tst_QScriptValue::toString_makeData):
- (tst_QScriptValue::toString_test):
- (tst_QScriptValue::toNumber_makeData):
- (tst_QScriptValue::toNumber_test):
- (tst_QScriptValue::toBool_makeData):
- (tst_QScriptValue::toBool_test):
- (tst_QScriptValue::toBoolean_makeData):
- (tst_QScriptValue::toBoolean_test):
- (tst_QScriptValue::toInteger_makeData):
- (tst_QScriptValue::toInteger_test):
- (tst_QScriptValue::toInt32_makeData):
- (tst_QScriptValue::toInt32_test):
- (tst_QScriptValue::toUInt32_makeData):
- (tst_QScriptValue::toUInt32_test):
- (tst_QScriptValue::toUInt16_makeData):
- (tst_QScriptValue::toUInt16_test):
-
-2010-03-03 Chao-ying Fu <fu@mips.com>
-
- Reviewed by Gavin Barraclough.
-
- MIPS JIT Supports
- https://bugs.webkit.org/show_bug.cgi?id=30144
-
- The following changes enable MIPS YARR and YARR_JIT.
-
- * assembler/AbstractMacroAssembler.h:
- (JSC::AbstractMacroAssembler::Imm32::Imm32):
- * assembler/MIPSAssembler.h: Added.
- (JSC::MIPSRegisters::):
- (JSC::MIPSAssembler::MIPSAssembler):
- (JSC::MIPSAssembler::):
- (JSC::MIPSAssembler::JmpSrc::JmpSrc):
- (JSC::MIPSAssembler::JmpDst::JmpDst):
- (JSC::MIPSAssembler::JmpDst::isUsed):
- (JSC::MIPSAssembler::JmpDst::used):
- (JSC::MIPSAssembler::emitInst):
- (JSC::MIPSAssembler::nop):
- (JSC::MIPSAssembler::loadDelayNop):
- (JSC::MIPSAssembler::copDelayNop):
- (JSC::MIPSAssembler::move):
- (JSC::MIPSAssembler::li):
- (JSC::MIPSAssembler::lui):
- (JSC::MIPSAssembler::addiu):
- (JSC::MIPSAssembler::addu):
- (JSC::MIPSAssembler::subu):
- (JSC::MIPSAssembler::mult):
- (JSC::MIPSAssembler::mfhi):
- (JSC::MIPSAssembler::mflo):
- (JSC::MIPSAssembler::mul):
- (JSC::MIPSAssembler::andInsn):
- (JSC::MIPSAssembler::andi):
- (JSC::MIPSAssembler::nor):
- (JSC::MIPSAssembler::orInsn):
- (JSC::MIPSAssembler::ori):
- (JSC::MIPSAssembler::xorInsn):
- (JSC::MIPSAssembler::xori):
- (JSC::MIPSAssembler::slt):
- (JSC::MIPSAssembler::sltu):
- (JSC::MIPSAssembler::sltiu):
- (JSC::MIPSAssembler::sll):
- (JSC::MIPSAssembler::sllv):
- (JSC::MIPSAssembler::sra):
- (JSC::MIPSAssembler::srav):
- (JSC::MIPSAssembler::lw):
- (JSC::MIPSAssembler::lwl):
- (JSC::MIPSAssembler::lwr):
- (JSC::MIPSAssembler::lhu):
- (JSC::MIPSAssembler::sw):
- (JSC::MIPSAssembler::jr):
- (JSC::MIPSAssembler::jalr):
- (JSC::MIPSAssembler::jal):
- (JSC::MIPSAssembler::bkpt):
- (JSC::MIPSAssembler::bgez):
- (JSC::MIPSAssembler::bltz):
- (JSC::MIPSAssembler::beq):
- (JSC::MIPSAssembler::bne):
- (JSC::MIPSAssembler::bc1t):
- (JSC::MIPSAssembler::bc1f):
- (JSC::MIPSAssembler::newJmpSrc):
- (JSC::MIPSAssembler::appendJump):
- (JSC::MIPSAssembler::addd):
- (JSC::MIPSAssembler::subd):
- (JSC::MIPSAssembler::muld):
- (JSC::MIPSAssembler::lwc1):
- (JSC::MIPSAssembler::ldc1):
- (JSC::MIPSAssembler::swc1):
- (JSC::MIPSAssembler::sdc1):
- (JSC::MIPSAssembler::mtc1):
- (JSC::MIPSAssembler::mfc1):
- (JSC::MIPSAssembler::truncwd):
- (JSC::MIPSAssembler::cvtdw):
- (JSC::MIPSAssembler::ceqd):
- (JSC::MIPSAssembler::cngtd):
- (JSC::MIPSAssembler::cnged):
- (JSC::MIPSAssembler::cltd):
- (JSC::MIPSAssembler::cled):
- (JSC::MIPSAssembler::cueqd):
- (JSC::MIPSAssembler::coled):
- (JSC::MIPSAssembler::coltd):
- (JSC::MIPSAssembler::culed):
- (JSC::MIPSAssembler::cultd):
- (JSC::MIPSAssembler::label):
- (JSC::MIPSAssembler::align):
- (JSC::MIPSAssembler::getRelocatedAddress):
- (JSC::MIPSAssembler::getDifferenceBetweenLabels):
- (JSC::MIPSAssembler::size):
- (JSC::MIPSAssembler::executableCopy):
- (JSC::MIPSAssembler::getCallReturnOffset):
- (JSC::MIPSAssembler::linkJump):
- (JSC::MIPSAssembler::linkCall):
- (JSC::MIPSAssembler::linkPointer):
- (JSC::MIPSAssembler::relinkJump):
- (JSC::MIPSAssembler::relinkCall):
- (JSC::MIPSAssembler::repatchInt32):
- (JSC::MIPSAssembler::repatchPointer):
- (JSC::MIPSAssembler::repatchLoadPtrToLEA):
- (JSC::MIPSAssembler::relocateJumps):
- (JSC::MIPSAssembler::linkWithOffset):
- (JSC::MIPSAssembler::linkCallInternal):
- * assembler/MacroAssembler.h:
- * assembler/MacroAssemblerMIPS.h: Added.
- (JSC::MacroAssemblerMIPS::MacroAssemblerMIPS):
- (JSC::MacroAssemblerMIPS::):
- (JSC::MacroAssemblerMIPS::add32):
- (JSC::MacroAssemblerMIPS::and32):
- (JSC::MacroAssemblerMIPS::lshift32):
- (JSC::MacroAssemblerMIPS::mul32):
- (JSC::MacroAssemblerMIPS::not32):
- (JSC::MacroAssemblerMIPS::or32):
- (JSC::MacroAssemblerMIPS::rshift32):
- (JSC::MacroAssemblerMIPS::sub32):
- (JSC::MacroAssemblerMIPS::xor32):
- (JSC::MacroAssemblerMIPS::load32):
- (JSC::MacroAssemblerMIPS::load32WithUnalignedHalfWords):
- (JSC::MacroAssemblerMIPS::load32WithAddressOffsetPatch):
- (JSC::MacroAssemblerMIPS::loadPtrWithPatchToLEA):
- (JSC::MacroAssemblerMIPS::loadPtrWithAddressOffsetPatch):
- (JSC::MacroAssemblerMIPS::load16):
- (JSC::MacroAssemblerMIPS::store32WithAddressOffsetPatch):
- (JSC::MacroAssemblerMIPS::store32):
- (JSC::MacroAssemblerMIPS::supportsFloatingPoint):
- (JSC::MacroAssemblerMIPS::supportsFloatingPointTruncate):
- (JSC::MacroAssemblerMIPS::pop):
- (JSC::MacroAssemblerMIPS::push):
- (JSC::MacroAssemblerMIPS::move):
- (JSC::MacroAssemblerMIPS::swap):
- (JSC::MacroAssemblerMIPS::signExtend32ToPtr):
- (JSC::MacroAssemblerMIPS::zeroExtend32ToPtr):
- (JSC::MacroAssemblerMIPS::branch32):
- (JSC::MacroAssemblerMIPS::branch32WithUnalignedHalfWords):
- (JSC::MacroAssemblerMIPS::branch16):
- (JSC::MacroAssemblerMIPS::branchTest32):
- (JSC::MacroAssemblerMIPS::jump):
- (JSC::MacroAssemblerMIPS::branchAdd32):
- (JSC::MacroAssemblerMIPS::branchMul32):
- (JSC::MacroAssemblerMIPS::branchSub32):
- (JSC::MacroAssemblerMIPS::breakpoint):
- (JSC::MacroAssemblerMIPS::nearCall):
- (JSC::MacroAssemblerMIPS::call):
- (JSC::MacroAssemblerMIPS::ret):
- (JSC::MacroAssemblerMIPS::set32):
- (JSC::MacroAssemblerMIPS::setTest32):
- (JSC::MacroAssemblerMIPS::moveWithPatch):
- (JSC::MacroAssemblerMIPS::branchPtrWithPatch):
- (JSC::MacroAssemblerMIPS::storePtrWithPatch):
- (JSC::MacroAssemblerMIPS::tailRecursiveCall):
- (JSC::MacroAssemblerMIPS::makeTailRecursiveCall):
- (JSC::MacroAssemblerMIPS::loadDouble):
- (JSC::MacroAssemblerMIPS::storeDouble):
- (JSC::MacroAssemblerMIPS::addDouble):
- (JSC::MacroAssemblerMIPS::subDouble):
- (JSC::MacroAssemblerMIPS::mulDouble):
- (JSC::MacroAssemblerMIPS::convertInt32ToDouble):
- (JSC::MacroAssemblerMIPS::insertRelaxationWords):
- (JSC::MacroAssemblerMIPS::branchTrue):
- (JSC::MacroAssemblerMIPS::branchFalse):
- (JSC::MacroAssemblerMIPS::branchEqual):
- (JSC::MacroAssemblerMIPS::branchNotEqual):
- (JSC::MacroAssemblerMIPS::branchDouble):
- (JSC::MacroAssemblerMIPS::branchTruncateDoubleToInt32):
- (JSC::MacroAssemblerMIPS::linkCall):
- (JSC::MacroAssemblerMIPS::repatchCall):
- * jit/ExecutableAllocator.h:
- (JSC::ExecutableAllocator::cacheFlush):
- * wtf/Platform.h:
- * yarr/RegexJIT.cpp:
- (JSC::Yarr::RegexGenerator::generateEnter):
- (JSC::Yarr::RegexGenerator::generateReturn):
-
-2010-03-03 Steve Falkenburg <sfalken@apple.com>
-
- Windows build fix.
-
- * JavaScriptCore.vcproj/jsc/jsc.vcproj:
- * JavaScriptCore.vcproj/jsc/jscCommon.vsprops:
-
-2010-03-03 Steve Falkenburg <sfalken@apple.com>
-
- Windows build fix.
-
- * JavaScriptCore.vcproj/jsc/jsc.vcproj:
-
-2010-03-03 Mark Rowe <mrowe@apple.com>
-
- Reviewed by Geoff Garen.
-
- Add virtual memory tags for TCMalloc and WebCore's purgeable buffers.
-
- * wtf/TCSystemAlloc.cpp:
- (TryMmap): Use the VM tag.
- * wtf/VMTags.h: Make use of VM_MEMORY_TCMALLOC and VM_MEMORY_WEBCORE_PURGEABLE_BUFFERS.
-
-2010-03-03 Steve Falkenburg <sfalken@apple.com>
-
- Rubber stamped by Adam Roben.
-
- Fix bogus xcopy that was polluting source tree at build time.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
-
-2010-03-02 Fridrich Strba <fridrich.strba@bluewin.ch>
-
- Reviewed by Oliver Hunt.
-
- Allow building smoothly on win32 and win64 using GCC
- https://bugs.webkit.org/show_bug.cgi?id=35607
-
- * jit/JITStubs.h:
- * runtime/Collector.cpp:
- (JSC::Heap::allocateBlock):
- (JSC::Heap::freeBlockPtr):
- (JSC::currentThreadStackBase):
-
-2010-03-02 Jeremy Orlow <jorlow@chromium.org>
-
- Reviewed by David Levin.
-
- Revert database thread changes that are no longer required
- https://bugs.webkit.org/show_bug.cgi?id=35519
-
- Jochen Eisinger created 55214 and 55247 to track which database
- owns which thread. Dmitry suggested that this could also
- be done via TLS, though. After exploring the options, Jochen
- chose to go the TLS route, so these patches are no longer needed.
-
- * wtf/Threading.h:
- * wtf/ThreadingNone.cpp:
- (WTF::isMainThread):
- * wtf/ThreadingPthreads.cpp:
- (WTF::identifierByPthreadHandle):
- (WTF::establishIdentifierForPthreadHandle):
- (WTF::pthreadHandleForIdentifier):
- (WTF::createThreadInternal):
- (WTF::currentThread):
- * wtf/ThreadingWin.cpp:
- (WTF::threadMap):
- (WTF::storeThreadHandleByIdentifier):
- (WTF::threadHandleForIdentifier):
- (WTF::createThreadInternal):
-
-2010-03-02 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- Fix QScriptValue::toString().
-
- More ECMA Script compliance, especially for values as NaN, Inifinite
- and really big/small numbers.
-
- [Qt] QScriptValue::toString() returns incorrect values
- https://bugs.webkit.org/show_bug.cgi?id=34850
-
- * qt/api/qscriptconverter_p.h:
- (QScriptConverter::toString):
- * qt/api/qscriptvalue_p.h:
- (QScriptValuePrivate::toString):
- * qt/tests/qscriptvalue/tst_qscriptvalue.cpp:
- * qt/tests/qscriptvalue/tst_qscriptvalue.h:
- * qt/tests/qscriptvalue/tst_qscriptvalue_generated.cpp:
- (tst_QScriptValue::toString_initData):
- (tst_QScriptValue::toString_makeData):
- (tst_QScriptValue::toString_test):
-
-2010-03-02 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- Introduce a new class; QScriptString.
-
- The QScriptString class should act as a handle to "interned"
- strings in a QScriptEngine.
-
- [Qt] QtScript should provide QScriptString
- https://bugs.webkit.org/show_bug.cgi?id=34843
-
- * qt/api/QtScript.pro:
- * qt/api/qscriptengine.cpp:
- (QScriptEngine::toStringHandle):
- * qt/api/qscriptengine.h:
- * qt/api/qscriptengine_p.h:
- (QScriptEnginePrivate::toStringHandle):
- * qt/api/qscriptstring.cpp: Added.
- (QScriptString::QScriptString):
- (QScriptString::~QScriptString):
- (QScriptString::operator=):
- (QScriptString::isValid):
- (QScriptString::operator==):
- (QScriptString::operator!=):
- (QScriptString::toArrayIndex):
- (QScriptString::toString):
- (QScriptString::operator QString):
- (qHash):
- * qt/api/qscriptstring.h: Added.
- * qt/api/qscriptstring_p.h: Added.
- (QScriptStringPrivate::QScriptStringPrivate):
- (QScriptStringPrivate::~QScriptStringPrivate):
- (QScriptStringPrivate::get):
- (QScriptStringPrivate::isValid):
- (QScriptStringPrivate::operator==):
- (QScriptStringPrivate::operator!=):
- (QScriptStringPrivate::toArrayIndex):
- (QScriptStringPrivate::toString):
- (QScriptStringPrivate::id):
- * qt/tests/qscriptstring/qscriptstring.pro: Added.
- * qt/tests/qscriptstring/tst_qscriptstring.cpp: Added.
- (tst_QScriptString::tst_QScriptString):
- (tst_QScriptString::~tst_QScriptString):
- (tst_QScriptString::test):
- (tst_QScriptString::hash):
- (tst_QScriptString::toArrayIndex_data):
- (tst_QScriptString::toArrayIndex):
- * qt/tests/tests.pro:
-
-2010-03-02 Oliver Hunt <oliver@apple.com>
-
- Reviewed by NOBODY (Build fix).
-
- Export function on windows.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2010-03-01 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Maciej Stachowiak.
+ * runtime/ArgList.h:
+ (JSC::ArgList::ArgList): ArgList is getting close to unused. Added a
+ temporary shim for converting from ExecState* to ArgList where it's still
+ necessary.
- Refactor named getter function signature to be in line with indexing getter signature
- https://bugs.webkit.org/show_bug.cgi?id=35563
+ * runtime/Arguments.h:
+ (JSC::Arguments::getArgumentsData):
+ (JSC::Arguments::Arguments): Updated for ExecState and Register API
+ changes noted above.
- This removes the PropertySlot argument from getter functions, and makes them directly
- pass the slot base. This makes the semantics for the functions match that of the
- indexing getters.
+ * runtime/CallData.cpp:
+ (JSC::call): Changed call always to call Interpreter::executeCall, even
+ for host functions. This ensures that the normal calling convention is
+ set up in the RegsiterFile when calling from C++ to host function.
- On the down side, this means that we can no longer simply use a proxy function for
- JS getters, so we now add another marker value to indicate that a getter is present
- and branch accordingly.
+ * runtime/CallData.h: Changed host function signature as described above.
- Against all rationality sunspider reports this as a perf win, but i suspect it's just noise.
+ * runtime/ConstructData.cpp:
+ (JSC::construct): Moved JSFunction::construct code here so I could nix
+ JSFunction::call and JSFunction::call. We want a JSFunction-agnostic
+ way to call and construct, so that everything works naturally for non-
+ JSFunction objects.
- * API/JSCallbackObject.h:
- * API/JSCallbackObjectFunctions.h:
- (JSC::::staticValueGetter):
- (JSC::::staticFunctionGetter):
- (JSC::::callbackGetter):
- * JavaScriptCore.exp:
- * runtime/JSActivation.cpp:
- (JSC::JSActivation::argumentsGetter):
- * runtime/JSActivation.h:
* runtime/JSFunction.cpp:
- (JSC::JSFunction::argumentsGetter):
- (JSC::JSFunction::callerGetter):
- (JSC::JSFunction::lengthGetter):
- * runtime/JSFunction.h:
- * runtime/NumberConstructor.cpp:
- (JSC::numberConstructorNaNValue):
- (JSC::numberConstructorNegInfinity):
- (JSC::numberConstructorPosInfinity):
- (JSC::numberConstructorMaxValue):
- (JSC::numberConstructorMinValue):
- * runtime/PropertySlot.cpp:
- (JSC::PropertySlot::functionGetter):
- * runtime/PropertySlot.h:
- (JSC::PropertySlot::getValue):
- (JSC::PropertySlot::setGetterSlot):
- (JSC::PropertySlot::setCacheableGetterSlot):
- * runtime/RegExpConstructor.cpp:
- (JSC::regExpConstructorDollar1):
- (JSC::regExpConstructorDollar2):
- (JSC::regExpConstructorDollar3):
- (JSC::regExpConstructorDollar4):
- (JSC::regExpConstructorDollar5):
- (JSC::regExpConstructorDollar6):
- (JSC::regExpConstructorDollar7):
- (JSC::regExpConstructorDollar8):
- (JSC::regExpConstructorDollar9):
- (JSC::regExpConstructorInput):
- (JSC::regExpConstructorMultiline):
- (JSC::regExpConstructorLastMatch):
- (JSC::regExpConstructorLastParen):
- (JSC::regExpConstructorLeftContext):
- (JSC::regExpConstructorRightContext):
- * runtime/RegExpObject.cpp:
- (JSC::regExpObjectGlobal):
- (JSC::regExpObjectIgnoreCase):
- (JSC::regExpObjectMultiline):
- (JSC::regExpObjectSource):
- (JSC::regExpObjectLastIndex):
-
-2010-03-01 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- PropertySlot::getValue(ExecState, unsigned) unnecessarily converts index to an Identifier
- https://bugs.webkit.org/show_bug.cgi?id=35561
-
- Fix this by defining a separate property getter function for index getters. This allows
- us to pass an unsigned number without the conversion to an Identifier. We then update
- setCustomIndex to take this new getter type.
-
- * runtime/PropertySlot.h:
- (JSC::PropertySlot::getValue):
- (JSC::PropertySlot::setCustom):
- (JSC::PropertySlot::setCustomIndex):
-
-2010-03-01 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Bug 35537 - put_by_id does will incorrectly cache writes where a specific value exists,
- where at the point of caching the same value is being written.
-
- When performing a put_by_id that is replacing a property already present on the object,
- there are three interesting cases regarding the state of the specific value:
-
- (1) No specific value set - nothing to do, leave the structure in it's current state,
- can cache.
- (2) A specific value was set, the new put is not of a specified value (i.e. function),
- or is of a different specific value - in these cases we need to perform a despecifying
- transition to clear the specific value in the structure, but having done so this is a
- normal property so as such we can again cache normally.
- (3) A specific value was set, and we are overwriting with the same value - in these cases
- leave the structure unchanged, but since a specific value is set we cannot cache this
- put (we would need the JIT to dynamically check the value being written matched).
-
- Unfortunately, the current behaviour does not match this. the checks for a specific value
- being present & the value matching are combined in such a way that in case (2), above we
- will unnecessarily prevent the transition being cached, but in case (3) we will incorrectly
- fail to prevent caching.
-
- The bug exposes itself if multiple puts of the same specific value are performed to a
- property, and erroneously the put is allowed to be cached by the JIT. Method checks may be
- generated caching calls of this structure. Subsequent puts performed from JIT code may
- write different values without triggering a despecify transition, and as such cached method
- checks will continue to pass, despite the value having changed.
-
- * runtime/JSObject.h:
- (JSC::JSObject::putDirectInternal):
-
-2010-03-01 Tor Arne Vestbø <tor.arne.vestbo@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- Fix the Qt build on Mac OS X/Cocoa 64-bit
-
- * JavaScriptCore.pri: Add missing implementation file to resolve JSC symbols
-
-2010-02-26 Gavin Barraclough <barraclough@apple.com>
-
- Rubber Stamped by Geoff Garen.
-
- Remove wrec. All builds should have switched to yarr by now.
-
- * Android.mk:
- * GNUmakefile.am:
- * JavaScriptCore.gypi:
- * JavaScriptCore.pri:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
- * JavaScriptCore.vcproj/jsc/jscCommon.vsprops:
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * runtime/RegExp.cpp:
- (JSC::RegExp::match):
- * runtime/RegExp.h:
- * wrec: Removed.
- * wrec/CharacterClass.cpp: Removed.
- * wrec/CharacterClass.h: Removed.
- * wrec/CharacterClassConstructor.cpp: Removed.
- * wrec/CharacterClassConstructor.h: Removed.
- * wrec/Escapes.h: Removed.
- * wrec/Quantifier.h: Removed.
- * wrec/WREC.cpp: Removed.
- * wrec/WREC.h: Removed.
- * wrec/WRECFunctors.cpp: Removed.
- * wrec/WRECFunctors.h: Removed.
- * wrec/WRECGenerator.cpp: Removed.
- * wrec/WRECGenerator.h: Removed.
- * wrec/WRECParser.cpp: Removed.
- * wrec/WRECParser.h: Removed.
- * wscript:
-
-2010-02-26 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Geoff Garen.
-
- Make the lookup table generator include an explicit cast to expected
- type of the function. We do this because otherwise the blind intptr_t
- cast that is subsequently applied allows incorrectly typed functions
- to be inserted into the table, where they will only fail at runtime.
- This change makes such errors produce a compile time failure.
-
- * create_hash_table:
-
-2010-02-26 Janne Koskinen <janne.p.koskinen@digia.com>
-
- Reviewed by Simon Hausmann.
-
- [Qt] Symbian specific getCPUTime implemetation
- https://bugs.webkit.org/show_bug.cgi?id=34742
-
- Default implementation doesn't work on Symbian devices.
- This change adds a proper implementation by
- asking thread execution time from the current thread.
-
- * runtime/TimeoutChecker.cpp:
- (JSC::getCPUTime):
-
-2010-02-25 Alexey Proskuryakov <ap@apple.com>
-
- Reviewed by Anders Carlsson.
-
- https://bugs.webkit.org/show_bug.cgi?id=35406
- <rdar://problem/6945502> Make generic array methods work with JavaArray
-
- Renamed lazyCreationData to subclassData. This is extra data that can be used by JSArray
- subclasses (you can't add new data members, because it wouldn't fit in JSCell otherwise).
-
- * JavaScriptCore.exp:
- * runtime/JSArray.cpp:
- (JSC::JSArray::JSArray):
- (JSC::JSArray::subclassData):
- (JSC::JSArray::setSubclassData):
- * runtime/JSArray.h:
- * runtime/RegExpConstructor.cpp:
- (JSC::RegExpMatchesArray::RegExpMatchesArray):
- (JSC::RegExpMatchesArray::~RegExpMatchesArray):
- (JSC::RegExpMatchesArray::fillArrayInstance):
- * runtime/RegExpMatchesArray.h:
- (JSC::RegExpMatchesArray::getOwnPropertySlot):
- (JSC::RegExpMatchesArray::getOwnPropertyDescriptor):
- (JSC::RegExpMatchesArray::put):
- (JSC::RegExpMatchesArray::deleteProperty):
- (JSC::RegExpMatchesArray::getOwnPropertyNames):
-
-2010-02-25 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Geoff Garen.
-
- JSC crashes like crazy in the JSPropertyNameIterator destructor
-
- Add back null check of m_cachedStructure. Curse last minute changes.
-
- * runtime/JSPropertyNameIterator.cpp:
- (JSC::JSPropertyNameIterator::~JSPropertyNameIterator):
-
-2010-02-25 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Maciej Stachowiak.
-
- Race condition in JSPropertyNameIterator and Structure destruction
- https://bugs.webkit.org/show_bug.cgi?id=35398
-
- JSPropertyNameIterator and Structure have a cyclic dependency that they
- manage by clearing the appropriate reference in each other during their
- destruction. However if the Structure is destroyed while the
- JSPropertyNameIterator is dead but not yet finalized the Structures
- WeakGCPtr will return null, and so prevent Structure from clearing
- the m_cachedStructure pointer of the iterator. When the iterator is
- then finalised the m_cachedStructure is invalid, and the attempt to
- clear the structures back reference fails.
-
- To fix this we simply make JSPropertyNameIterator keep the Structure
- alive, using the weak pointer to break the ref cycle.
-
- * runtime/JSPropertyNameIterator.cpp:
- (JSC::JSPropertyNameIterator::~JSPropertyNameIterator):
- The iterator now keeps m_cachedStructure alive itself, so no longer needs
- to check for it being cleared
- * runtime/JSPropertyNameIterator.h:
- (JSC::JSPropertyNameIterator::setCachedStructure):
- Add an assertion to ensure correct usage
- (JSC::JSPropertyNameIterator::cachedStructure):
- Add .get()
- * runtime/Structure.cpp:
- (JSC::Structure::~Structure):
- Add an assertion that our iterator isn't already dead, and remove
- the now unnecessary attempt to clear the ref in the iterator
- * runtime/WeakGCPtr.h:
- (JSC::WeakGCPtr::hasDeadObject):
- An assert-only function to allow us to assert correct behaviour
- in the Structure destructor
-
-2010-02-25 Jochen Eisinger <jochen@chromium.org>
+ (JSC::callHostFunctionAsConstructor):
+ * runtime/JSFunction.h: Updated for ExecState and Register API changes
+ noted above. Nixed JSFunction::call and JSFunction::construct, noted above.
- Reviewed by Jeremy Orlow.
-
- Make the context that was passed to the ThreadFunction accessible.
- https://bugs.webkit.org/show_bug.cgi?id=35379
-
- When a database is opened, right now you
- don't have any context from where it is opened. The problem is that
- the actual calls that open a database go through the sqlite3 vfs
- layer, so there's no easy way to pass this function down to to
- platform/sql/chromium/SQLFileSystemChromium*.cpp
-
- This patch will allow you to get from anywhere within webkit a pointer
- to the Thread object that actually created the thread you're currently
- on (in case of the database, this can be either a thread forked of
- from the main thread or from a worker thread), and query the object
- for context information.
-
- * wtf/Threading.h:
- * wtf/ThreadingNone.cpp:
- (WTF::threadContext):
- * wtf/ThreadingPthreads.cpp:
- (WTF::):
- (WTF::identifierByPthreadHandle):
- (WTF::establishIdentifierForPthreadHandle):
- (WTF::pthreadHandleForIdentifier):
- (WTF::contextForIdentifier):
- (WTF::createThreadInternal):
- (WTF::currentThread):
- (WTF::threadContext):
- * wtf/ThreadingWin.cpp:
- (WTF::):
- (WTF::threadMap):
- (WTF::storeThreadHandleByIdentifier):
- (WTF::threadHandleForIdentifier):
- (WTF::contextForIdentifier):
- (WTF::createThreadInternal):
- (WTF::threadContext):
-
-2010-02-25 Jeremy Orlow <jorlow@chromium.org>
-
- Reverting to re-submit with better change log.
-
- * wtf/Threading.h:
- * wtf/ThreadingNone.cpp:
- (WTF::isMainThread):
- * wtf/ThreadingPthreads.cpp:
- (WTF::identifierByPthreadHandle):
- (WTF::establishIdentifierForPthreadHandle):
- (WTF::pthreadHandleForIdentifier):
- (WTF::createThreadInternal):
- (WTF::currentThread):
- * wtf/ThreadingWin.cpp:
- (WTF::threadMap):
- (WTF::storeThreadHandleByIdentifier):
- (WTF::threadHandleForIdentifier):
- (WTF::createThreadInternal):
-
-2010-02-25 Jochen Eisinger <jochen@chromium.org>
-
- Reviewed by Jeremy Orlow.
-
- Make the context that was passed to the ThreadFunction accessible.
- https://bugs.webkit.org/show_bug.cgi?id=35379
-
- * wtf/Threading.h:
- * wtf/ThreadingNone.cpp:
- (WTF::threadContext):
- * wtf/ThreadingPthreads.cpp:
- (WTF::):
- (WTF::identifierByPthreadHandle):
- (WTF::establishIdentifierForPthreadHandle):
- (WTF::pthreadHandleForIdentifier):
- (WTF::contextForIdentifier):
- (WTF::createThreadInternal):
- (WTF::currentThread):
- (WTF::threadContext):
- * wtf/ThreadingWin.cpp:
- (WTF::):
- (WTF::threadMap):
- (WTF::storeThreadHandleByIdentifier):
- (WTF::threadHandleForIdentifier):
- (WTF::contextForIdentifier):
- (WTF::createThreadInternal):
- (WTF::threadContext):
-
-2010-02-24 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Geoffrey Garen.
-
- [REGRESSION in r55185] EXC_BAD_ACCESS on opening inspector.
- https://bugs.webkit.org/show_bug.cgi?id=35335
-
- compileGetDirectOffset modifies the contents of the object register
- when the object is not using the inline storage array. As the object
- register contains our 'this' pointer we can't allow it to be clobbered.
- The fix is simply to copy the register into a separate scratch register
- when we're loading off an object that doesn't use inline storage.
-
- * jit/JITPropertyAccess.cpp:
- (JSC::JIT::privateCompileGetByIdSelfList):
- * jit/JITPropertyAccess32_64.cpp:
- (JSC::JIT::privateCompileGetByIdSelfList):
-
-2010-02-24 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- Speed up getter performance in the jit
- https://bugs.webkit.org/show_bug.cgi?id=35332
-
- Implement getter lookup caching in the interpreter.
- The getter stubs are generated through basically the
- same code paths as the normal get_by_id caching.
- Instead of simply loading a property and returning,
- we load the getter slot, and pass the getter, base value
- and return address to a shared stub used for getter
- dispatch.
-
- * jit/JIT.h:
- (JSC::JIT::compileGetByIdProto):
- (JSC::JIT::compileGetByIdSelfList):
- (JSC::JIT::compileGetByIdProtoList):
- (JSC::JIT::compileGetByIdChainList):
- (JSC::JIT::compileGetByIdChain):
- * jit/JITPropertyAccess.cpp:
- (JSC::JIT::privateCompileGetByIdProto):
- (JSC::JIT::privateCompileGetByIdSelfList):
- (JSC::JIT::privateCompileGetByIdProtoList):
- (JSC::JIT::privateCompileGetByIdChainList):
- (JSC::JIT::privateCompileGetByIdChain):
- * jit/JITPropertyAccess32_64.cpp:
- (JSC::JIT::privateCompileGetByIdProto):
- (JSC::JIT::privateCompileGetByIdSelfList):
- (JSC::JIT::privateCompileGetByIdProtoList):
- (JSC::JIT::privateCompileGetByIdChainList):
- (JSC::JIT::privateCompileGetByIdChain):
- * jit/JITStubs.cpp:
- (JSC::JITThunks::tryCacheGetByID):
- (JSC::DEFINE_STUB_FUNCTION):
- * jit/JITStubs.h:
- (JSC::):
- * runtime/GetterSetter.h:
-
-2010-02-23 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Maciej Stachowiak.
-
- Web Inspector: Regression: r55027+: Inspector broken
- https://bugs.webkit.org/show_bug.cgi?id=35253
-
- op_get_by_id_getter_chain was not passing the correct this parameter.
- The bug was caused by incorrect use of baseCell instead of baseValue,
- baseValue contains the original object for the lookup (and hence the
- correct this object), baseCell is clobbered as part of walking the
- prototype chain.
-
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::privateExecute):
-
-2010-02-23 Gustavo Noronha Silva <gns@gnome.org>
-
- Rubber-stamped by Dimitri Glazkov.
-
- Chromium build fix.
-
- * JavaScriptCore.gyp/JavaScriptCore.gyp:
-
-2010-02-23 Leandro Pereira <leandro@profusion.mobi>
-
- Reviewed by Gustavo Noronha Silva.
-
- Changes references of GOwnPtr to reflect their new place.
- http://webkit.org/b/35084
-
- * JavaScriptCore/JavaScriptCore.gypi:
- * JavaScriptCore/wtf/Threading.h:
- * JavaScriptCore/wtf/unicode/glib/UnicodeGLib.h:
-
-2010-02-23 Leandro Pereira <leandro@profusion.mobi>
-
- Reviewed by Kenneth Rohde Christiansen.
-
- Adding the EFL implementation of JavaScriptCore.
- See https://bugs.webkit.org/show_bug.cgi?id=35084 for details.
-
- * GNUmakefile.am: Updated to reflect the new location of GOwnPtr and
- GRefPtr.
- * wtf/efl/MainThreadEfl.cpp: Added.
- * wtf/gobject/GOwnPtr.cpp: Moved from wtf/gtk.
- * wtf/gobject/GOwnPtr.h: Moved from wtf/gtk.
- * wtf/gobject/GRefPtr.cpp: Moved from wtf/gtk.
- * wtf/gobject/GRefPtr.h: Moved from wtf/gtk.
-
-2010-02-22 Julien Chaffraix <jchaffraix@webkit.org>
-
- Reviewed by Darin Adler.
-
- Remove auto_ptr usage in JavaScriptCore.
- https://bugs.webkit.org/show_bug.cgi?id=35221
-
- * parser/Nodes.h: Removed now unneeded adopt method.
- * parser/Parser.cpp: Removed <memory> include as it is not required anymore.
- * wtf/OwnPtr.h: Removed the constructor from auto_ptr.
- * wtf/VectorTraits.h: Removed a template specialization for auto_ptr.
- * wtf/unicode/Collator.h: Made userDefault return a PassOwnPtr.
- * wtf/unicode/CollatorDefault.cpp:
- (WTF::Collator::userDefault): Changed the method to match the next signature.
- * wtf/unicode/icu/CollatorICU.cpp:
- (WTF::Collator::userDefault): Ditto.
-
-2010-02-22 Huahui Wu <hwu@google.com>
-
- Reviewed by Eric Seidel.
-
- Add code that enables SquirrelFish Extreme (a.k.a JSCX, JSC JIT)
- in Android. It's disabled by default, but is enabled when the
- enveronment variable ENABLE_JSC_JIT is set to true.
- https://bugs.webkit.org/show_bug.cgi?id=34855
-
- * Android.mk:
- * wtf/Platform.h:
-
-2010-02-22 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- JSStringBuilder should not CRASH if allocation fails, it should throw a JSException.
-
- * runtime/JSGlobalObjectFunctions.cpp:
- * runtime/JSStringBuilder.h:
- (JSC::JSStringBuilder::JSStringBuilder):
- (JSC::JSStringBuilder::append):
- (JSC::JSStringBuilder::build):
- * runtime/StringBuilder.h:
- (JSC::StringBuilder::build):
- * wtf/Vector.h:
- (WTF::VectorBufferBase::tryAllocateBuffer):
- (WTF::):
- (WTF::VectorBuffer::tryAllocateBuffer):
- (WTF::::tryExpandCapacity):
- (WTF::::tryReserveCapacity):
- (WTF::::tryAppend):
-
-2010-02-22 Kwang Yul Seo <skyul@company100.net>
-
- Reviewed by Eric Seidel.
-
- [BREWMP] Map FastMalloc to BREW memory allocator
- https://bugs.webkit.org/show_bug.cgi?id=33570
-
- Use MALLOC macro instead of the standard malloc function.
- Although RVCT provides malloc, we can't use it in BREW
- because the loader does not initialize the base address properly.
-
- * wtf/FastMalloc.cpp:
- * wtf/brew/SystemMallocBrew.h: Added.
- (mallocBrew):
- (callocBrew):
- (freeBrew):
- (reallocBrew):
-
-2010-02-22 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk>
-
- Build fix for make distcheck.
-
- * GNUmakefile.am:
-
-2010-02-22 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Unreviewed build fix.
-
- [Qt] Build fix for RVCT.
-
- Fix after r55024. The "-i" option is for perl not for the
- script.
-
- * DerivedSources.pro:
-
-2010-02-21 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Make UString::m_data be const, and make the UChar owned/ref-counted by CrossThreadRefCounted be const too.
-
- * runtime/UStringImpl.cpp:
- (JSC::UStringImpl::baseSharedBuffer):
- (JSC::UStringImpl::~UStringImpl):
- * runtime/UStringImpl.h:
- (JSC::UStringImpl::create):
- (JSC::UStringImpl::data):
- (JSC::UStringImpl::UStringImpl):
- * wtf/OwnFastMallocPtr.h:
- (WTF::OwnFastMallocPtr::~OwnFastMallocPtr):
-
-2010-02-21 Yuta Kitamura <yutak@chromium.org>
-
- Reviewed by Darin Adler.
-
- HashMapTranslatorAdapter::translate() needs to set the mapped value.
-
- HTTPHeaderMap::add(const char*, const String&) does not work
- https://bugs.webkit.org/show_bug.cgi?id=35227
-
- * wtf/HashMap.h:
- (WTF::HashMapTranslatorAdapter::translate):
-
-2010-02-19 Maciej Stachowiak <mjs@apple.com>
-
- Reviewed by David Levin.
-
- Add an ENABLE flag for sandboxed iframes to make it possible to disable it in releases
- https://bugs.webkit.org/show_bug.cgi?id=35147
-
- * Configurations/FeatureDefines.xcconfig:
-
-2010-02-19 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- JSString::getIndex() calls value() to resolve the string value (is a rope)
- to a UString, then passes the result to jsSingleCharacterSubstring without
- checking for an exception. In case of out-of-memory the returned UString
- is null(), which may result in an out-of-buounds substring being created.
- This is bad.
-
- Simple fix is to be able to get an index from a rope without resolving to
- UString. This may be a useful optimization in some test cases.
-
- The same bug exists in some other methods is JSString, these can be fixed
- by changing them to call getIndex().
-
- * runtime/JSString.cpp:
- (JSC::JSString::resolveRope):
- (JSC::JSString::getStringPropertyDescriptor):
- * runtime/JSString.h:
- (JSC::jsSingleCharacterSubstring):
- (JSC::JSString::getIndex):
- (JSC::jsSingleCharacterString):
- (JSC::JSString::getStringPropertySlot):
- * runtime/UStringImpl.cpp:
- (JSC::singleCharacterSubstring):
- * runtime/UStringImpl.h:
- (JSC::UStringImpl::singleCharacterSubstring):
-
-2010-02-19 Oliver Hunt <oliver@apple.com>
-
- RS = Gavin Barraclough.
-
- Split the 32/64 version of JITPropertyAccess into a separate file.
-
- * GNUmakefile.am:
- * JavaScriptCore.gypi:
- * JavaScriptCore.pri:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * jit/JITPropertyAccess.cpp:
- * jit/JITPropertyAccess32_64.cpp: Added.
- (JSC::JIT::emit_op_put_by_index):
- (JSC::JIT::emit_op_put_getter):
- (JSC::JIT::emit_op_put_setter):
- (JSC::JIT::emit_op_del_by_id):
- (JSC::JIT::emit_op_method_check):
- (JSC::JIT::emitSlow_op_method_check):
- (JSC::JIT::emit_op_get_by_val):
- (JSC::JIT::emitSlow_op_get_by_val):
- (JSC::JIT::emit_op_put_by_val):
- (JSC::JIT::emitSlow_op_put_by_val):
- (JSC::JIT::emit_op_get_by_id):
- (JSC::JIT::emitSlow_op_get_by_id):
- (JSC::JIT::emit_op_put_by_id):
- (JSC::JIT::emitSlow_op_put_by_id):
- (JSC::JIT::compileGetByIdHotPath):
- (JSC::JIT::compileGetByIdSlowCase):
- (JSC::JIT::compilePutDirectOffset):
- (JSC::JIT::compileGetDirectOffset):
- (JSC::JIT::testPrototype):
- (JSC::JIT::privateCompilePutByIdTransition):
- (JSC::JIT::patchGetByIdSelf):
- (JSC::JIT::patchMethodCallProto):
- (JSC::JIT::patchPutByIdReplace):
- (JSC::JIT::privateCompilePatchGetArrayLength):
- (JSC::JIT::privateCompileGetByIdProto):
- (JSC::JIT::privateCompileGetByIdSelfList):
- (JSC::JIT::privateCompileGetByIdProtoList):
- (JSC::JIT::privateCompileGetByIdChainList):
- (JSC::JIT::privateCompileGetByIdChain):
- (JSC::JIT::emit_op_get_by_pname):
- (JSC::JIT::emitSlow_op_get_by_pname):
-
-2010-02-19 Patrick Gansterer <paroga@paroga.com>
-
- Reviewed by Laszlo Gombos.
-
- Added additional parameter to create_rvct_stubs
- for setting the regularexpression prefix.
- Renamed it because it now works for other platforms too.
- https://bugs.webkit.org/show_bug.cgi?id=34951
-
- * DerivedSources.pro:
- * create_jit_stubs: Copied from JavaScriptCore/create_rvct_stubs.
- * create_rvct_stubs: Removed.
-
-2010-02-18 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- Improve interpreter getter performance
- https://bugs.webkit.org/show_bug.cgi?id=35138
-
- Improve the performance of getter dispatch by making it possible
- for the interpreter to cache the GetterSetter object lookup.
-
- To do this we simply need to make PropertySlot aware of getters
- as a potentially cacheable property, and record the base and this
- objects for a getter access. This allows us to use more-or-less
- identical code to that used by the normal get_by_id caching, with
- the dispatch being the only actual difference.
-
- I'm holding off of implementing this in the JIT until I do some
- cleanup to try and making coding in the JIT not be as horrible
- as it is currently.
-
- * bytecode/CodeBlock.cpp:
- (JSC::CodeBlock::dump):
- (JSC::CodeBlock::derefStructures):
- (JSC::CodeBlock::refStructures):
- * bytecode/Opcode.h:
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::resolveGlobal):
- (JSC::Interpreter::tryCacheGetByID):
- (JSC::Interpreter::privateExecute):
- * jit/JIT.cpp:
- (JSC::JIT::privateCompileMainPass):
- * jit/JITStubs.cpp:
- (JSC::JITThunks::tryCacheGetByID):
- (JSC::DEFINE_STUB_FUNCTION):
- * runtime/JSObject.cpp:
- (JSC::JSObject::fillGetterPropertySlot):
- * runtime/PropertySlot.cpp:
- (JSC::PropertySlot::functionGetter):
- * runtime/PropertySlot.h:
- (JSC::PropertySlot::isGetter):
- (JSC::PropertySlot::isCacheable):
- (JSC::PropertySlot::isCacheableValue):
- (JSC::PropertySlot::setValueSlot):
- (JSC::PropertySlot::setGetterSlot):
- (JSC::PropertySlot::setCacheableGetterSlot):
- (JSC::PropertySlot::clearOffset):
- (JSC::PropertySlot::thisValue):
-
-2010-02-17 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Fixed a portion of:
- <rdar://problem/7165917> | https://bugs.webkit.org/show_bug.cgi?id=28676
- Safari 4 does not release memory back to the operating system fast enough (28676)
-
- This patch fixes a surprisingly common edge case in which the page heap
- would have only one free span, but that span would be larger than the
- minimum free size, so we would decide not to free it, even though it
- could be as large as 100MB or more!
-
- SunSpider reports no change on Mac or Windows.
-
- * wtf/FastMalloc.cpp:
- (WTF::TCMalloc_PageHeap::scavenge): Call shouldContinueScavenging() instead
- of doing the math ourselves. Don't keep a local value for pagesDecommitted
- because that lets free_committed_pages_ be wrong temporarily. Instead,
- update free_committed_pages_ as we go. ASSERT that we aren't releasing
- a span that has already been released, because we think this is impossible.
- Finally, don't be afraid to release all free memory in the page heap when
- scavenging. We only scavenge after 5 seconds of the application's working
- set not growing, and we keep both thread caches and a central cache on
- top of the page heap, so the extra free pages in the page heap were just
- overkill.
-
-2010-02-17 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- https://bugs.webkit.org/show_bug.cgi?id=35070
- Addition of 2 strings of length 2^31 may result in a string of length 0.
-
- Check for overflow when creating a new JSString as a result of an addition
- or concatenation, throw an out of memory exception.
-
- * runtime/JSString.h:
- (JSC::):
- * runtime/Operations.h:
- (JSC::jsString):
-
-2010-02-17 Xan Lopez <xlopez@igalia.com>
-
- Reviewed by Gustavo Noronha.
-
- [Linux] Webkit incompatible with Java plugins
- https://bugs.webkit.org/show_bug.cgi?id=24912
-
- Add support for GFile to GOwnPtr.
-
- Based on original work by Gustavo Noronha.
-
- * wtf/gtk/GOwnPtr.cpp:
- (WTF::GFile):
- * wtf/gtk/GOwnPtr.h:
-
-2010-02-16 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Mark Rowe.
-
- Fix a handful of other leaks seen on the buildbot.
-
- * runtime/UStringImpl.h:
- (JSC::UStringOrRopeImpl::deref): Delegate through to the subclass version of deref to ensure that
- the correct cleanup takes place. This function previously featured some code that attempted to
- skip deletion of static UStringImpl's. Closer inspection revealed that it was in fact equivalent
- to "if (false)", meaning that UStringImpl's which had their final deref performed via this function
- were leaked.
-
-2010-02-16 Mark Rowe <mrowe@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- Fix a handful of leaks seen on the buildbot.
-
- * runtime/UStringImpl.h:
- (JSC::UStringOrRopeImpl::deref): Call URopeImpl::destructNonRecursive rather than delete
- to ensure that the rope's fibers are also destroyed.
-
-2010-02-16 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- https://bugs.webkit.org/show_bug.cgi?id=34964
- Leaks tool reports false memory leaks due to Rope implementation.
-
- A rope is a recursive data structure where each node in the rope holds a set of
- pointers, each of which may reference either a string (in UStringImpl form) or
- another rope node. A low bit in each pointer is used to distinguish between
- rope & string elements, in a fashion similar to the recently-removed
- PtrAndFlags class (see https://bugs.webkit.org/show_bug.cgi?id=33731 ). Again,
- this causes a problem for Leaks - refactor to remove the magic pointer
- mangling.
-
- Move Rope out from JSString.h and rename to URopeImpl, to match UStringImpl.
- Give UStringImpl and URopeImpl a common parent class, UStringOrRopeImpl.
- Repurpose an otherwise invalid permutation to flags (static & should report
- memory cost) to identify ropes.
-
- This allows us to change the rope's fibers to interrogate the object rather
- than storing a bool within the low bits of the pointer (or in some cases the
- use of a common parent class removes the need to determine the type at all -
- there is a common interface to ref or get the length of either ropes or strings).
-
- * API/JSClassRef.cpp:
- (OpaqueJSClass::OpaqueJSClass):
- (OpaqueJSClassContextData::OpaqueJSClassContextData):
- * bytecompiler/BytecodeGenerator.cpp:
- (JSC::keyForCharacterSwitch):
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::privateExecute):
- * jit/JITStubs.cpp:
- (JSC::DEFINE_STUB_FUNCTION):
- * runtime/ArrayPrototype.cpp:
- (JSC::arrayProtoFuncToString):
- * runtime/Identifier.cpp:
- (JSC::Identifier::equal):
- (JSC::Identifier::addSlowCase):
- * runtime/JSString.cpp:
- (JSC::JSString::resolveRope):
- * runtime/JSString.h:
- (JSC::):
- (JSC::RopeBuilder::JSString):
- (JSC::RopeBuilder::~JSString):
- (JSC::RopeBuilder::appendStringInConstruct):
- (JSC::RopeBuilder::appendValueInConstructAndIncrementLength):
- (JSC::RopeBuilder::JSStringFinalizerStruct::JSStringFinalizerStruct):
- (JSC::RopeBuilder::JSStringFinalizerStruct::):
- * runtime/UString.cpp:
- (JSC::UString::toStrictUInt32):
- (JSC::equal):
- * runtime/UString.h:
- (JSC::UString::isEmpty):
- (JSC::UString::size):
- * runtime/UStringImpl.cpp:
- (JSC::URopeImpl::derefFibersNonRecursive):
- (JSC::URopeImpl::destructNonRecursive):
- * runtime/UStringImpl.h:
- (JSC::UStringOrRopeImpl::isRope):
- (JSC::UStringOrRopeImpl::length):
- (JSC::UStringOrRopeImpl::ref):
- (JSC::UStringOrRopeImpl::):
- (JSC::UStringOrRopeImpl::operator new):
- (JSC::UStringOrRopeImpl::UStringOrRopeImpl):
- (JSC::UStringImpl::adopt):
- (JSC::UStringImpl::createUninitialized):
- (JSC::UStringImpl::tryCreateUninitialized):
- (JSC::UStringImpl::data):
- (JSC::UStringImpl::cost):
- (JSC::UStringImpl::deref):
- (JSC::UStringImpl::UStringImpl):
- (JSC::UStringImpl::):
- (JSC::URopeImpl::tryCreateUninitialized):
- (JSC::URopeImpl::initializeFiber):
- (JSC::URopeImpl::fiberCount):
- (JSC::URopeImpl::fibers):
- (JSC::URopeImpl::deref):
- (JSC::URopeImpl::URopeImpl):
- (JSC::URopeImpl::hasOneRef):
- (JSC::UStringOrRopeImpl::deref):
-
-2010-02-15 Gabor Loki <loki@webkit.org>
-
- Reviewed by Gavin Barraclough.
-
- Fix the SP at ctiOpThrowNotCaught on Thumb2 (JSVALUE32)
- https://bugs.webkit.org/show_bug.cgi?id=34939
-
- * jit/JITStubs.cpp:
-
-2010-02-15 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (Build Fix!).
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2010-02-15 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Some general Rope related refactoring.
-
- Rename Rope::m_ropeLength to m_fiberCount, to be more descriptive.
- Rename Rope::m_stringLength to simply m_length (since this is the
- more conventional name for the length of a string). Move append
- behaviour out into a new RopeBuilder class, so that Rope no longer
- needs any knowledge of the JSString or UString implementation.
-
- Make Rope no longer be nested within JSString.
- (Rope now no-longer need reside within JSString.h, but leaving
- the change of moving this out to a different header as a separate
- change from these renames).
-
- * JavaScriptCore.exp:
- * jit/JITOpcodes.cpp:
- (JSC::JIT::privateCompileCTIMachineTrampolines):
- * runtime/JSString.cpp:
- (JSC::Rope::destructNonRecursive):
- (JSC::Rope::~Rope):
- (JSC::JSString::resolveRope):
- (JSC::JSString::toBoolean):
- (JSC::JSString::getStringPropertyDescriptor):
- * runtime/JSString.h:
- (JSC::Rope::Fiber::Fiber):
- (JSC::Rope::Fiber::deref):
- (JSC::Rope::Fiber::ref):
- (JSC::Rope::Fiber::refAndGetLength):
- (JSC::Rope::Fiber::isRope):
- (JSC::Rope::Fiber::rope):
- (JSC::Rope::Fiber::isString):
- (JSC::Rope::Fiber::string):
- (JSC::Rope::Fiber::nonFiber):
- (JSC::Rope::tryCreateUninitialized):
- (JSC::Rope::append):
- (JSC::Rope::fiberCount):
- (JSC::Rope::length):
- (JSC::Rope::fibers):
- (JSC::Rope::Rope):
- (JSC::Rope::operator new):
- (JSC::):
- (JSC::RopeBuilder::JSString):
- (JSC::RopeBuilder::~JSString):
- (JSC::RopeBuilder::length):
- (JSC::RopeBuilder::canGetIndex):
- (JSC::RopeBuilder::appendStringInConstruct):
- (JSC::RopeBuilder::appendValueInConstructAndIncrementLength):
- (JSC::RopeBuilder::isRope):
- (JSC::RopeBuilder::fiberCount):
- (JSC::JSString::getStringPropertySlot):
- * runtime/Operations.h:
- (JSC::jsString):
-
-2010-02-15 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (Build fix).
-
- Add missing cast for !YARR (PPC) builds.
-
- * runtime/RegExp.cpp:
- (JSC::RegExp::match):
-
-2010-02-14 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Darin Adler.
-
- https://bugs.webkit.org/show_bug.cgi?id=33731
- Many false leaks in release builds due to PtrAndFlags
-
- StructureTransitionTable was effectively a smart pointer type,
- one machine word in size and wholly contained as a member of
- of Structure. It either pointed to an actual table, or could
- be used to describe a single transtion entry without use of a
- table.
-
- This, however, worked by using a PtrAndFlags, which is not
- compatible with the leaks tool. Since there is no clear way to
- obtain another bit for 'free' here, and since there are bits
- available up in Structure, merge this functionality back up into
- Structure. Having this in a separate class was quite clean
- from an enacapsulation perspective, but this solution doesn't
- seem to bad - all table access is now intermediated through the
- Structure::structureTransitionTableFoo methods, keeping the
- optimization fairly well contained.
-
- This was the last use of PtrAndFlags, so removing the file too.
-
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * bytecode/CodeBlock.h:
- * runtime/Structure.cpp:
- (JSC::Structure::Structure):
- (JSC::Structure::~Structure):
- (JSC::Structure::addPropertyTransitionToExistingStructure):
- (JSC::Structure::addPropertyTransition):
- (JSC::Structure::hasTransition):
- * runtime/Structure.h:
- (JSC::Structure::):
- (JSC::Structure::structureTransitionTableContains):
- (JSC::Structure::structureTransitionTableGet):
- (JSC::Structure::structureTransitionTableHasTransition):
- (JSC::Structure::structureTransitionTableRemove):
- (JSC::Structure::structureTransitionTableAdd):
- (JSC::Structure::structureTransitionTable):
- (JSC::Structure::setStructureTransitionTable):
- (JSC::Structure::singleTransition):
- (JSC::Structure::setSingleTransition):
- * runtime/StructureTransitionTable.h:
- * wtf/PtrAndFlags.h: Removed.
-
-2010-02-15 Gavin Barraclough <barraclough@apple.com>
-
- Rubber Stamped by Geoff Garen.
-
- Bug 34948 - tryMakeString should fail on error in length calculation
-
- Ooops! - "bool overflow" argument should have been "bool& overflow".
-
- * runtime/UString.h:
- (JSC::sumWithOverflow):
- (JSC::tryMakeString):
-
-2010-02-15 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (Build Fix (pt 2!)).
-
- Some symbol names have changed, remove, will readd if required.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2010-02-15 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (Build Fix (pt 1?)).
-
- Some symbol names have changed, remove, will readd if required.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2010-02-15 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Removed some mistaken code added in http://trac.webkit.org/changeset/53860.
-
- * API/APIShims.h:
- (JSC::APICallbackShim::APICallbackShim):
- (JSC::APICallbackShim::~APICallbackShim): No need to start/stop the
- timeout checker when calling out from the API to the client; we want to
- monitor the VM for timeouts, not the client. This mistake was harmless /
- undetectable, since it's totally redundant with the APIEntryShim, which
- also starts / stops the timeout checker.
-
-2010-02-15 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Geoff Garen.
-
- Bug 34952 - String lengths in UString should be unsigned.
- This matches WebCore::StringImpl, and better unifies behaviour throughout JSC.
-
- * JavaScriptCore.exp:
- * bytecode/EvalCodeCache.h:
- * runtime/Identifier.cpp:
- (JSC::Identifier::equal):
- * runtime/Identifier.h:
- * runtime/JSGlobalObjectFunctions.cpp:
- (JSC::globalFuncEscape):
- * runtime/JSONObject.cpp:
- (JSC::gap):
- (JSC::Stringifier::indent):
- * runtime/NumberPrototype.cpp:
- (JSC::numberProtoFuncToFixed):
- (JSC::numberProtoFuncToPrecision):
- * runtime/RegExp.cpp:
- (JSC::RegExp::match):
- * runtime/StringPrototype.cpp:
- (JSC::substituteBackreferencesSlow):
- (JSC::stringProtoFuncReplace):
- (JSC::stringProtoFuncSplit):
- (JSC::trimString):
- * runtime/UString.cpp:
- (JSC::UString::UString):
- (JSC::UString::from):
- (JSC::UString::getCString):
- (JSC::UString::ascii):
- (JSC::UString::operator[]):
- (JSC::UString::toStrictUInt32):
- (JSC::UString::find):
- (JSC::UString::rfind):
- (JSC::UString::substr):
- (JSC::operator<):
- (JSC::operator>):
- (JSC::compare):
- (JSC::equal):
- (JSC::UString::UTF8String):
- * runtime/UString.h:
- (JSC::UString::size):
- (JSC::operator==):
- * runtime/UStringImpl.cpp:
- (JSC::UStringImpl::create):
- * runtime/UStringImpl.h:
- (JSC::UStringImpl::create):
- (JSC::UStringImpl::size):
- (JSC::UStringImpl::computeHash):
- (JSC::UStringImpl::UStringImpl):
-
-2010-02-15 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Geoff Garen.
-
- Bug 34948 - tryMakeString should fail on error in length calculation
-
- The sum of the length of substrings could overflow.
-
- * runtime/UString.h:
- (JSC::sumWithOverflow):
- (JSC::tryMakeString):
-
-2010-02-15 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Fixed <rdar://problem/7628524> Crash beneath JSGlobalContextRelease when
- typing in Google search field with GuardMalloc/full page heap enabled
-
- * API/JSContextRef.cpp: Don't use APIEntryShim, since that requires
- a JSGlobalData, which this function destroys. Do use setCurrentIdentifierTable
- and JSLock instead, since those are the two features of APIEntryShim we
- require.
-
-2010-02-15 Patrick Gansterer <paroga@paroga.com>
-
- Reviewed by Laszlo Gombos.
-
- Added additional parameter to create_rvct_stubs
- for setting the offset of thunkReturnAddress.
- https://bugs.webkit.org/show_bug.cgi?id=34657
-
- * create_rvct_stubs:
- * jit/JITStubs.cpp:
-
-2010-02-15 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- Fix QScriptValue::toIntXX methods.
-
- More ECMA Script compliance.
-
- [Qt] QScriptValue::toIntXX returns incorrect values
- https://bugs.webkit.org/show_bug.cgi?id=34847
-
- * qt/api/qscriptvalue_p.h:
- (QScriptValuePrivate::toInteger):
- (QScriptValuePrivate::toInt32):
- (QScriptValuePrivate::toUInt32):
- (QScriptValuePrivate::toUInt16):
- * qt/tests/qscriptvalue/tst_qscriptvalue.h:
- * qt/tests/qscriptvalue/tst_qscriptvalue_generated.cpp:
- (tst_QScriptValue::toInteger_initData):
- (tst_QScriptValue::toInteger_makeData):
- (tst_QScriptValue::toInteger_test):
- (tst_QScriptValue::toInt32_initData):
- (tst_QScriptValue::toInt32_makeData):
- (tst_QScriptValue::toInt32_test):
- (tst_QScriptValue::toUInt32_initData):
- (tst_QScriptValue::toUInt32_makeData):
- (tst_QScriptValue::toUInt32_test):
- (tst_QScriptValue::toUInt16_initData):
- (tst_QScriptValue::toUInt16_makeData):
- (tst_QScriptValue::toUInt16_test):
-
-2010-02-14 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Adam Barth.
-
- Implement NEVER_INLINE and NO_RETURN for RVCT
- https://bugs.webkit.org/show_bug.cgi?id=34740
-
- * wtf/AlwaysInline.h:
-
-2010-02-12 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- https://bugs.webkit.org/show_bug.cgi?id=33731
- Remove uses of PtrAndFlags from JIT data stuctures.
-
- These break the OS X Leaks tool. Free up a bit in CallLinkInfo, and invalid
- permutation of pointer states in MethodCallLinkInfo to represent the removed bits.
-
- * bytecode/CodeBlock.h:
- (JSC::CallLinkInfo::seenOnce):
- (JSC::CallLinkInfo::setSeen):
- (JSC::MethodCallLinkInfo::MethodCallLinkInfo):
- (JSC::MethodCallLinkInfo::seenOnce):
- (JSC::MethodCallLinkInfo::setSeen):
- * jit/JIT.cpp:
- (JSC::JIT::unlinkCall):
- * jit/JITPropertyAccess.cpp:
- (JSC::JIT::patchMethodCallProto):
- * runtime/UString.h:
-
-2010-02-12 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Darin Adler.
-
- https://bugs.webkit.org/show_bug.cgi?id=33731
- Many false leaks in release builds due to PtrAndFlags
-
- Remove UntypedPtrAndBitfield (similar to PtrAndFlags) in UStringImpl,
- and steal bits from the refCount instead.
-
- * runtime/UStringImpl.cpp:
- (JSC::UStringImpl::baseSharedBuffer):
- (JSC::UStringImpl::~UStringImpl):
- * runtime/UStringImpl.h:
- (JSC::UStringImpl::cost):
- (JSC::UStringImpl::isIdentifier):
- (JSC::UStringImpl::setIsIdentifier):
- (JSC::UStringImpl::ref):
- (JSC::UStringImpl::deref):
- (JSC::UStringImpl::UStringImpl):
- (JSC::UStringImpl::bufferOwnerString):
- (JSC::UStringImpl::bufferOwnership):
- (JSC::UStringImpl::isStatic):
- (JSC::UStringImpl::):
-
-2010-02-12 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Darin Adler.
-
- Removed an unnecessary data dependency from my last patch.
-
- * runtime/SmallStrings.cpp:
- (JSC::SmallStrings::markChildren): Since isAnyStringMarked being false
- is a condition of entering the loop, we can just use '=' instead of '|='.
-
-2010-02-12 Janne Koskinen <janne.p.koskinen@digia.com>
-
- Reviewed by Tor Arne Vestbø.
-
- Additional refptr/passrefptr workarounds for WINSCW compiler
- https://bugs.webkit.org/show_bug.cgi?id=28054
-
- * wtf/PassRefPtr.h:
- (WTF::refIfNotNull):
- (WTF::PassRefPtr::PassRefPtr):
- (WTF::PassRefPtr::~PassRefPtr):
- (WTF::PassRefPtr::clear):
- (WTF::::operator):
- * wtf/RefPtr.h:
- (WTF::RefPtr::RefPtr):
- (WTF::::operator):
-
-2010-02-12 Janne Koskinen <janne.p.koskinen@digia.com>
-
- Reviewed by Tor Arne Vestbø.
-
- Additional refptr/passrefptr workarounds for WINSCW compiler
- https://bugs.webkit.org/show_bug.cgi?id=28054
-
- * wtf/PassRefPtr.h:
- (WTF::refIfNotNull):
- (WTF::PassRefPtr::PassRefPtr):
- (WTF::PassRefPtr::~PassRefPtr):
- (WTF::PassRefPtr::clear):
- (WTF::::operator):
- * wtf/RefPtr.h:
- (WTF::RefPtr::RefPtr):
- (WTF::::operator):
-
-2010-02-12 Janne Koskinen <janne.p.koskinen@digia.com>
-
- Reviewed by Tor Arne Vestbø.
-
- Additional refptr/passrefptr workarounds for WINSCW compiler
- https://bugs.webkit.org/show_bug.cgi?id=28054
-
- * wtf/PassRefPtr.h:
- (WTF::refIfNotNull):
- (WTF::PassRefPtr::PassRefPtr):
- (WTF::PassRefPtr::~PassRefPtr):
- (WTF::PassRefPtr::clear):
- (WTF::::operator):
- * wtf/RefPtr.h:
- (WTF::RefPtr::RefPtr):
- (WTF::::operator):
-
-2010-02-12 Janne Koskinen <janne.p.koskinen@digia.com>
-
- Reviewed by Simon Hausmann.
-
- Don't import the cmath functions from std:: for WINSCW.
-
- * wtf/MathExtras.h:
-
-2010-02-12 Kwang Yul Seo <skyul@company100.net>
-
- Reviewed by Adam Barth.
-
- Typedef both JSChar and UChar to wchar_t in RVCT.
- https://bugs.webkit.org/show_bug.cgi?id=34560
-
- Define both JSChar and UChar to wchar_t as the size
- of wchar_t is 2 bytes in RVCT.
-
- * API/JSStringRef.h:
- * wtf/unicode/qt4/UnicodeQt4.h:
-
-2010-02-11 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Oliver Hunt and Darin Adler.
-
- The rest of the fix for
- https://bugs.webkit.org/show_bug.cgi?id=34864 | <rdar://problem/7594198>
- Many objects left uncollected after visiting mail.google.com and closing
- window
-
- Don't unconditionally hang onto small strings. Instead, hang onto all
- small strings as long as any small string is still referenced.
-
- SunSpider reports no change.
-
- * runtime/Collector.cpp:
- (JSC::Heap::markRoots): Mark the small strings cache last, so it can
- check if anything else has kept any strings alive.
-
- * runtime/SmallStrings.cpp:
- (JSC::isMarked):
- (JSC::SmallStrings::markChildren): Only keep our strings alive if some
- other reference to at least one of them exists, too.
-
-2010-02-11 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- Some progress toward fixing
- https://bugs.webkit.org/show_bug.cgi?id=34864 | <rdar://problem/7594198>
- Many objects left uncollected after visiting mail.google.com and closing
- window
-
- SunSpider reports no change.
-
- Keep weak references, rather than protected references, to cached for-in
- property name enumerators.
-
- One problem with protected references is that a chain like
- [ gc object 1 ] => [ non-gc object ] => [ gc object 2 ]
- takes two GC passes to break, since the first pass collects [ gc object 1 ],
- releasing [ non-gc object ] and unprotecting [ gc object 2 ], and only
- then can a second pass collect [ gc object 2 ].
-
- Another problem with protected references is that they can keep a bunch
- of strings alive long after they're useful. In SunSpider and a few popular
- websites, the size-speed tradeoff seems to favor weak references.
-
- * runtime/JSPropertyNameIterator.cpp:
- (JSC::JSPropertyNameIterator::JSPropertyNameIterator): Moved this constructor
- into the .cpp file, since it's not used elsewhere.
-
- (JSC::JSPropertyNameIterator::~JSPropertyNameIterator): Added a destructor
- to support our weak reference.
-
- * runtime/JSPropertyNameIterator.h:
- (JSC::Structure::setEnumerationCache):
- (JSC::Structure::clearEnumerationCache):
- (JSC::Structure::enumerationCache): Added a function for clearing a
- Structure's enumeration cache, used by our new destructor. Also fixed
- indentation to match the rest of the file.
-
- * runtime/Structure.h: Changed from protected pointer to weak pointer.
-
-2010-02-11 Chris Rogers <crogers@google.com>
-
- Reviewed by David Levin.
-
- audio engine: add Complex number class
- https://bugs.webkit.org/show_bug.cgi?id=34538
-
- * wtf/Complex.h: Added.
- (WebCore::complexFromMagnitudePhase):
-
-2010-02-10 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Added an SPI for asking about all the different live objects on the heap.
- Useful for memory debugging.
-
- * JavaScriptCore.exp: Export the new SPI.
-
- * runtime/Collector.cpp:
- (JSC::typeName): Use a little capitalization. Don't crash in the case of
- a non-object cell, since it might just be an uninitialized cell.
-
- (JSC::Heap::objectTypeCounts): The new SPI.
-
- * runtime/Collector.h:
- * runtime/CollectorHeapIterator.h:
- (JSC::CollectorHeapIterator::advance):
- (JSC::LiveObjectIterator::operator++):
- (JSC::DeadObjectIterator::operator++):
- (JSC::ObjectIterator::operator++): Made 2 tweaks to these iterators:
- (1) Skip the last cell in the block, since it's a dummy sentinel, and
- we don't want it to confuse the object count; (2) Fixed a logic error
- in LiveObjectIterator that could cause it to iterate dead objects if
- m_block were equal to m_heap.nextBlock and m_cell were less than
- m_heap.nextCell. No test for this since I can't think of a way that this
- could make WebKit behave badly.
-
-2010-02-11 Steve Block <steveblock@google.com>
-
- Reviewed by Darin Adler.
-
- Guard cmath using declarations in MathExtras.h on Android
- https://bugs.webkit.org/show_bug.cgi?id=34840
-
- Android does not provide these functions.
-
- * wtf/MathExtras.h:
-
-2010-02-08 Maciej Stachowiak <mjs@apple.com>
-
- Reviewed by Cameron Zwarich.
-
- Restore ENABLE_RUBY flag so vendors can ship with Ruby disabled if they choose.
- https://bugs.webkit.org/show_bug.cgi?id=34698
-
- * Configurations/FeatureDefines.xcconfig:
-
-2010-02-10 Kevin Watters <kevinwatters@gmail.com>
-
- Reviewed by Kevin Ollivier.
-
- [wx] Add Windows complex text support and Mac support for containsCharacters.
-
- https://bugs.webkit.org/show_bug.cgi?id=34759
-
- * wscript:
-
-2010-02-10 Alexey Proskuryakov <ap@apple.com>
-
- Addressing issues found by style bot.
-
- * wtf/ValueCheck.h: Renamed header guard to match final file name.
-
- * wtf/Vector.h: (WTF::::checkConsistency): Remove braces around a one-line clause.
-
-2010-02-09 Alexey Proskuryakov <ap@apple.com>
-
- Reviewed by Geoffrey Garen.
-
- https://bugs.webkit.org/show_bug.cgi?id=34490
- WebCore::ImageEventSender::dispatchPendingEvents() crashes in certain conditions
-
- * GNUmakefile.am:
- * JavaScriptCore.gypi:
- * JavaScriptCore.vcproj/WTF/WTF.vcproj:
- * JavaScriptCore.xcodeproj/project.pbxproj:
- Added ValueCheck.h.
-
- * wtf/ValueCheck.h: Added. Moved code out of HashTraits, since it would be awkward to
- include that from Vector.h.
- (WTF::ValueCheck::checkConsistency): Allow null pointers, those are pretty consistent.
-
- * wtf/HashTraits.h: Moved value checking code out of here.
-
- * wtf/HashTable.h: (WTF::::checkTableConsistencyExceptSize): Updated for the above changes.
-
- * wtf/Vector.h:
- (WTF::::checkConsistency): Check all vector elements.
- (WTF::ValueCheck): Support checking a Vector as an element in other containers. Currently
- unused.
-
-2010-02-10 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- Fix QScriptValue::toBool.
-
- Fix ECMA compliance in the QScriptValue for values like 0, NaN and
- empty strings.
-
- [Qt] QScriptValue::toBool problem
- https://bugs.webkit.org/show_bug.cgi?id=34793
-
- * qt/api/qscriptvalue_p.h:
- (QScriptValuePrivate::toBool):
- * qt/tests/qscriptvalue/tst_qscriptvalue.h:
- * qt/tests/qscriptvalue/tst_qscriptvalue_generated.cpp:
- (tst_QScriptValue::toBool_initData):
- (tst_QScriptValue::toBool_makeData):
- (tst_QScriptValue::toBool_test):
- (tst_QScriptValue::toBoolean_initData):
- (tst_QScriptValue::toBoolean_makeData):
- (tst_QScriptValue::toBoolean_test):
-
-2009-10-06 Yongjun Zhang <yongjun.zhang@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- Use derefIfNotNull() to work around WINSCW compiler forward declaration bug
-
- The compiler bug is reported at
- https://xdabug001.ext.nokia.com/bugzilla/show_bug.cgi?id=9812.
-
- The change should be reverted when the above bug is fixed in WINSCW compiler.
-
- https://bugs.webkit.org/show_bug.cgi?id=28054
-
-2009-10-06 Yongjun Zhang <yongjun.zhang@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- Get rid of WINSCW hack for UnSpecifiedBoolType
-
- Add parenthesis around (RefPtr::*UnspecifiedBoolType) to make the WINSCW
- compiler work with the default UnSpecifiedBoolType() operator.
-
- https://bugs.webkit.org/show_bug.cgi?id=28054
-
- * wtf/RefPtr.h:
-
-2010-02-09 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- New functions nullValue() and undefinedValue().
-
- [Qt] QScriptEngine should contain nullValue and undefinedValue methods
- https://bugs.webkit.org/show_bug.cgi?id=34749
-
- * qt/api/qscriptengine.cpp:
- (QScriptEngine::nullValue):
- (QScriptEngine::undefinedValue):
- * qt/api/qscriptengine.h:
- * qt/tests/qscriptengine/tst_qscriptengine.cpp:
- (tst_QScriptEngine::nullValue):
- (tst_QScriptEngine::undefinedValue):
-
-2010-02-09 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- Fixes for QScriptValue::toNumber().
-
- Fix ECMA compliance in QScriptValue for values unbound
- to a QScriptEngine.
-
- [Qt] QScriptValue::toNumber() is broken
- https://bugs.webkit.org/show_bug.cgi?id=34592
-
- * qt/api/qscriptvalue_p.h:
- (QScriptValuePrivate::toNumber):
- * qt/tests/qscriptvalue/tst_qscriptvalue.h:
- * qt/tests/qscriptvalue/tst_qscriptvalue_generated.cpp:
- (tst_QScriptValue::toNumber_initData):
- (tst_QScriptValue::toNumber_makeData):
- (tst_QScriptValue::toNumber_test):
-
-2010-02-09 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- Fix QScriptValue::isNumber().
-
- The isNumber() should return 'true' if the value is in the CNumber
- state.
-
- [Qt] QScriptValue::isNumber() returns an incorrect value
- https://bugs.webkit.org/show_bug.cgi?id=34575
-
- * qt/api/qscriptvalue_p.h:
- (QScriptValuePrivate::isNumber):
- * qt/tests/qscriptvalue/tst_qscriptvalue.h:
- * qt/tests/qscriptvalue/tst_qscriptvalue_generated.cpp:
- (tst_QScriptValue::isNumber_initData):
- (tst_QScriptValue::isNumber_makeData):
- (tst_QScriptValue::isNumber_test):
-
-2010-02-09 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Small refactoring to the small strings cache to allow it to be cleared
- dynamically.
-
- * runtime/SmallStrings.cpp:
- (JSC::SmallStrings::SmallStrings):
- (JSC::SmallStrings::clear):
- * runtime/SmallStrings.h: Moved initialization code into a shared function,
- and changed the constructor to call it.
-
-2010-02-09 Gavin Barraclough <barraclough@apple.com>
-
- Rubber Stamped by Geoff Garen.
-
- Rename StringBuilder::release && JSStringBuilder::releaseJSString
- to 'build()'.
-
- * runtime/ArrayPrototype.cpp:
- (JSC::arrayProtoFuncToLocaleString):
- (JSC::arrayProtoFuncJoin):
- * runtime/Executable.cpp:
- (JSC::FunctionExecutable::paramString):
- * runtime/FunctionConstructor.cpp:
- (JSC::constructFunction):
- * runtime/JSGlobalObjectFunctions.cpp:
- (JSC::encode):
- (JSC::decode):
- (JSC::globalFuncEscape):
- (JSC::globalFuncUnescape):
- * runtime/JSONObject.cpp:
- (JSC::Stringifier::stringify):
- * runtime/JSStringBuilder.h:
- (JSC::JSStringBuilder::build):
- * runtime/LiteralParser.cpp:
- (JSC::LiteralParser::Lexer::lexString):
- * runtime/NumberPrototype.cpp:
- (JSC::integerPartNoExp):
- (JSC::numberProtoFuncToFixed):
- * runtime/StringBuilder.h:
- (JSC::StringBuilder::build):
-
-2010-02-09 John Sullivan <sullivan@apple.com>
-
- https://bugs.webkit.org/show_bug.cgi?id=34772
- Overzealous new assertion in URStringImpl::adopt()
-
- Reviewed by Adam Barth.
-
- * runtime/UStringImpl.h:
- (JSC::UStringImpl::adopt):
- Only assert that vector.data() is non-zero if vector.size() is non-zero.
-
-2010-02-09 Nikolas Zimmermann <nzimmermann@rim.com>
-
- Not reviewed. Try to fix build problem on SnowLeopard slaves to bring them back.
-
- * API/JSClassRef.cpp:
- (tryCreateStringFromUTF8): Mark method as 'static inline' to suppress "warning: no previous prototype for ..."
-
-2010-02-09 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Three small string fixes:
- (1) StringBuilder::release should CRASH if the buffer allocation failed.
- (2) Remove weird, dead code from JSString::tryGetValue, replace with an ASSERT.
- (3) Move UString::createFromUTF8 out to the API, as tryCreateStringFromUTF8.
- This is only used from the API, and (now) unlike other UString::create
- methods may return UString::null() to indicate failure cases. Better
- handle these in the API.
-
- * API/JSClassRef.cpp:
- (tryCreateStringFromUTF8):
- (OpaqueJSClass::OpaqueJSClass):
- (OpaqueJSClassContextData::OpaqueJSClassContextData):
- * runtime/JSString.h:
- (JSC::Fiber::tryGetValue):
- * runtime/StringBuilder.h:
- (JSC::StringBuilder::release):
- * runtime/UString.cpp:
- (JSC::UString::UString):
- (JSC::UString::from):
- (JSC::UString::find):
- * runtime/UString.h:
-
-2010-02-09 Janne Koskinen <janne.p.koskinen@digia.com>
-
- Reviewed by Laszlo Gombos.
-
- [Qt] use nanval() for Symbian as nonInlineNaN
- https://bugs.webkit.org/show_bug.cgi?id=34170
-
- numeric_limits<double>::quiet_NaN is broken in Symbian
- causing NaN to be evaluated as a number.
-
- * runtime/JSValue.cpp:
- (JSC::nonInlineNaN):
-
-2010-02-09 Tamas Szirbucz <szirbucz@inf.u-szeged.hu>
-
- Reviewed by Gavin Barraclough.
-
- Add a soft modulo operation to ARM JIT using a trampoline function.
- The performance progression is about ~1.8% on ARMv7
- https://bugs.webkit.org/show_bug.cgi?id=34424
-
- Developed in cooperation with Gabor Loki.
-
- * jit/JIT.h:
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_mod):
- (JSC::JIT::emitSlow_op_mod):
- * jit/JITOpcodes.cpp:
- (JSC::JIT::softModulo):
- * jit/JITStubs.h:
- (JSC::JITThunks::ctiSoftModulo):
- * wtf/Platform.h:
-
-2010-02-08 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (SL/win build fixes).
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * runtime/StringPrototype.cpp:
-
-2010-02-08 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt
-
- Make String.replace throw an exception on out-of-memory, rather than
- returning a null (err, empty-ish) string. Move String::replaceRange
- and String::spliceSubstringsWithSeparators out to StringPrototype -
- these were fairly specific use anyway, and we can better integrate
- throwing the JS expcetion this way.
-
- Also removes redundant assignment operator from UString.
-
- * JavaScriptCore.exp:
- * runtime/StringPrototype.cpp:
- (JSC::StringRange::StringRange):
- (JSC::jsSpliceSubstringsWithSeparators):
- (JSC::jsReplaceRange):
- (JSC::stringProtoFuncReplace):
- * runtime/UString.cpp:
- * runtime/UString.h:
-
-2010-02-08 Kwang Yul Seo <skyul@company100.net>
-
- Reviewed by Eric Seidel.
-
- [BREWMP] Undefine WTF_OS_WINDOWS and WTF_PLATFORM_WIN
- https://bugs.webkit.org/show_bug.cgi?id=34561
-
- As the binary for simulator is built with MSVC 2005,
- WTF_OS_WINDOWS and WTF_PLATFORM_WIN are defined.
- Undefine them as we don't target Windows.
-
- * wtf/Platform.h:
-
-2010-02-08 Chris Rogers <crogers@google.com>
-
- Reviewed by Darin Adler.
-
- audio engine: add Vector3 class
- https://bugs.webkit.org/show_bug.cgi?id=34548
-
- * wtf/Vector3.h: Added.
- (WebCore::Vector3::Vector3):
- (WebCore::Vector3::abs):
- (WebCore::Vector3::isZero):
- (WebCore::Vector3::normalize):
- (WebCore::Vector3::x):
- (WebCore::Vector3::y):
- (WebCore::Vector3::z):
- (WebCore::operator+):
- (WebCore::operator-):
- (WebCore::operator*):
- (WebCore::dot):
- (WebCore::cross):
- (WebCore::distance):
-
-2010-02-08 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- Fix warning in clang++
-
- * runtime/Structure.h:
- (JSC::Structure::propertyStorageSize):
-
-2010-02-08 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Geoff Garen.
-
- Make makeString CRASH if we fail to allocate a string.
-
- (tryMakeString or jsMakeNontrivialString can be used where we
- expect allocation may fail and want to handle the error).
-
- * runtime/JSStringBuilder.h:
- (JSC::jsMakeNontrivialString):
- * runtime/UString.h:
- (JSC::tryMakeString):
- (JSC::makeString):
-
-2010-02-08 Gavin Barraclough <barraclough@apple.com>
-
- Rubber Stamped by Oliver Hunt.
-
- Remove a couple of unnecesary C-style casts spotted by Darin.
-
- * runtime/JSGlobalObjectFunctions.cpp:
- (JSC::encode):
- (JSC::globalFuncEscape):
-
-2010-02-08 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Geoff Garen.
-
- Switch some more StringBuilder/jsNontrivialString code to use
- JSStringBuilder/jsMakeNontrivialString - these methods will
- throw an exception if we hit out-of-memory, rather than just
- CRASHing.
-
- * runtime/FunctionPrototype.cpp:
- (JSC::functionProtoFuncToString):
- * runtime/JSGlobalObjectFunctions.cpp:
- (JSC::encode):
- (JSC::decode):
- (JSC::globalFuncEscape):
-
-2010-02-08 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Sam Weinig.
-
- Use an empty identifier instead of a null identifier for parse
- tokens without an identifier.
-
- This helps encapsulate the null UStringImpl within UString.
-
- * parser/Grammar.y:
- * parser/NodeConstructors.h:
- (JSC::ContinueNode::ContinueNode):
- (JSC::BreakNode::BreakNode):
- (JSC::ForInNode::ForInNode):
- * runtime/CommonIdentifiers.cpp:
- (JSC::CommonIdentifiers::CommonIdentifiers):
- * runtime/CommonIdentifiers.h:
- * runtime/FunctionPrototype.cpp:
- (JSC::FunctionPrototype::FunctionPrototype):
-
-2010-02-08 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk>
-
- Build fix for make distcheck.
-
- * GNUmakefile.am:
-
-2010-02-08 Simon Hausmann <simon.hausmann@nokia.com>
-
- Unreviewed RVCT build fix.
-
- Similar to r54391, don't import the cmath functions from std:: for RVCT.
-
- * wtf/MathExtras.h:
-
-2010-02-05 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Geoff Garen.
-
- Change UStringImpl::create to CRASH if the string cannot be allocated,
- rather than returning a null string (which will behave like a zero-length
- string if used).
-
- Also move createRep function from UString to become new overloaded
- UStringImpl::create methods. In doing so, bring their behaviour closer to
- being in line with WebCore::StringImpl, in removing the behaviour that they
- can be used to produce null UStrings (ASSERT the char* provided is non-null).
- This behaviour of converting null C-strings to null UStrings is inefficient
- (cmompared to just using UString::null()), incompatible with WebCore::StringImpl's
- behaviour, and may generate unexpected behaviour, since in many cases a null
- UString can be used like an empty string.
-
- With these changes UStringImpl need not have a concept of null impls, we can
- start transitioning this to become an implementation detail of UString, that
- internally it chooses to use a null-object rather than an actually zero impl
- pointer.
-
- * JavaScriptCore.exp:
- * debugger/Debugger.cpp:
- (JSC::Debugger::recompileAllJSFunctions):
- * debugger/DebuggerCallFrame.cpp:
- (JSC::DebuggerCallFrame::calculatedFunctionName):
- * parser/Parser.cpp:
- (JSC::Parser::parse):
- * profiler/Profile.cpp:
- (JSC::Profile::Profile):
- * profiler/ProfileGenerator.cpp:
- (JSC::ProfileGenerator::stopProfiling):
- * runtime/Error.cpp:
- (JSC::Error::create):
- (JSC::throwError):
- * runtime/ExceptionHelpers.cpp:
- (JSC::createError):
- * runtime/Identifier.cpp:
- (JSC::Identifier::add):
- * runtime/PropertyNameArray.cpp:
- (JSC::PropertyNameArray::add):
- * runtime/UString.cpp:
- (JSC::initializeUString):
- (JSC::UString::UString):
- (JSC::UString::operator=):
- * runtime/UString.h:
- (JSC::UString::isNull):
- (JSC::UString::null):
- (JSC::UString::rep):
- (JSC::UString::UString):
- * runtime/UStringImpl.cpp:
- (JSC::UStringImpl::create):
- * runtime/UStringImpl.h:
-
-2010-02-05 Kwang Yul Seo <skyul@company100.net>
-
- Reviewed by Eric Seidel.
-
- [BREWMP] Define SYSTEM_MALLOC 1
- https://bugs.webkit.org/show_bug.cgi?id=34640
-
- Make BREWMP use system malloc because FastMalloc is not ported.
-
- * wtf/Platform.h:
-
-2010-02-05 Kwang Yul Seo <skyul@company100.net>
-
- Reviewed by Alexey Proskuryakov.
-
- Don't call CRASH() in fastMalloc and fastCalloc when the requested memory size is 0
- https://bugs.webkit.org/show_bug.cgi?id=34569
-
- With USE_SYSTEM_MALLOC=1, fastMalloc and fastCalloc call CRASH()
- if the return value of malloc and calloc is 0.
-
- However, these functions can return 0 when the request size is 0.
- Libc manual says, "If size is 0, then malloc() returns either NULL,
- or a unique pointer value that can later be successfully passed to free()."
- Though malloc returns a unique pointer in most systems,
- 0 can be returned in some systems. For instance, BREW's MALLOC returns 0
- when size is 0.
-
- If malloc or calloc returns 0 due to allocation size, increase the size
- to 1 and try again.
-
- * wtf/FastMalloc.cpp:
- (WTF::fastMalloc):
- (WTF::fastCalloc):
-
-2010-02-04 Mark Rowe <mrowe@apple.com>
-
- Reviewed by Timothy Hatcher.
-
- Build fix. Remove a symbol corresponding to an inline function from the linker export
- file to prevent a weak external failure.
-
- * JavaScriptCore.xcodeproj/project.pbxproj: Accommodate rename of script.
-
-2010-02-04 Daniel Bates <dbates@webkit.org>
-
- [Qt] Unreviewed, build fix for Qt bot.
-
- * runtime/JSStringBuilder.h: Changed #include <X.h> notation #include "X.h".
-
-2010-02-04 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Clearing a WeakGCPtr is weird
- https://bugs.webkit.org/show_bug.cgi?id=34627
-
- Added a WeakGCPtr::clear interface.
-
- As discussed in https://bugs.webkit.org/show_bug.cgi?id=33383, the old
- interface made it pretty weird for a client to conditionally clear a
- WeakGCPtr, which is exactly what clients want to do when objects are
- finalized.
-
- * API/JSClassRef.cpp:
- (clearReferenceToPrototype): Use the new WeakGCPtr::clear() interface.
-
- * runtime/WeakGCPtr.h:
- (JSC::WeakGCPtr::clear): Added an interface for clearing a WeakGCPtr,
- iff its current value is the value passed in. It's cumbersome for the
- client to do this test, since WeakGCPtr sometimes pretends to be null.
-
-2010-02-04 Geoffrey Garen <ggaren@apple.com>
-
- Build fix: export a header.
-
- * JavaScriptCore.xcodeproj/project.pbxproj:
-
-2010-02-04 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Add a JSStringBuilder class (similar-to, and derived-from StringBuilder) to
- construct JSStrings, throwing a JS exception should we run out of memory whilst
- allocating storage for the string.
-
- Similarly, add jsMakeNontrivialString methods to use in cases where previously
- we were calling makeString & passing the result to jsNontrivialString. Again,
- these new methods throw if we hit an out of memory condition.
-
- Move throwOutOfMemoryError into ExceptionHelpers, to make it more widely available.
-
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * runtime/ArrayPrototype.cpp:
- (JSC::arrayProtoFuncToString):
- (JSC::arrayProtoFuncToLocaleString):
- (JSC::arrayProtoFuncJoin):
- * runtime/DateConstructor.cpp:
- (JSC::callDate):
- * runtime/DatePrototype.cpp:
- (JSC::dateProtoFuncToString):
- (JSC::dateProtoFuncToUTCString):
- (JSC::dateProtoFuncToGMTString):
- * runtime/ErrorPrototype.cpp:
- (JSC::errorProtoFuncToString):
- * runtime/ExceptionHelpers.cpp:
- (JSC::throwOutOfMemoryError):
- * runtime/ExceptionHelpers.h:
- * runtime/JSStringBuilder.h: Added.
- (JSC::JSStringBuilder::releaseJSString):
- (JSC::jsMakeNontrivialString):
- * runtime/NumberPrototype.cpp:
- (JSC::numberProtoFuncToPrecision):
- * runtime/ObjectPrototype.cpp:
- (JSC::objectProtoFuncToString):
- * runtime/Operations.cpp:
- * runtime/Operations.h:
- * runtime/RegExpPrototype.cpp:
- (JSC::regExpProtoFuncToString):
- * runtime/StringBuilder.h:
- (JSC::StringBuilder::append):
- * runtime/StringPrototype.cpp:
- (JSC::stringProtoFuncBig):
- (JSC::stringProtoFuncSmall):
- (JSC::stringProtoFuncBlink):
- (JSC::stringProtoFuncBold):
- (JSC::stringProtoFuncFixed):
- (JSC::stringProtoFuncItalics):
- (JSC::stringProtoFuncStrike):
- (JSC::stringProtoFuncSub):
- (JSC::stringProtoFuncSup):
- (JSC::stringProtoFuncFontcolor):
- (JSC::stringProtoFuncFontsize):
- (JSC::stringProtoFuncAnchor):
-
-2010-02-04 Steve Falkenburg <sfalken@apple.com>
-
- Windows build fix.
-
- * wtf/MathExtras.h:
-
-2010-02-04 Darin Adler <darin@apple.com>
-
- Reviewed by David Levin.
-
- Make MathExtras.h compatible with <cmath>
- https://bugs.webkit.org/show_bug.cgi?id=34618
-
- * wtf/MathExtras.h: Include <cmath> instead of <math.h>.
- Use "using" as we do elsewhere in WTF for the four functions from <cmath>
- we want to use without the prefix. Later we could consider making the std
- explicit at call sites instead.
-
-2010-02-04 Tamas Szirbucz <szirbucz@inf.u-szeged.hu>
-
- Reviewed by Gavin Barraclough.
-
- Use an easily appendable structure for trampolines instead of pointer parameters.
- https://bugs.webkit.org/show_bug.cgi?id=34424
-
- * assembler/ARMAssembler.cpp:
- (JSC::ARMAssembler::executableCopy):
- * jit/JIT.h:
- (JSC::JIT::compileCTIMachineTrampolines):
- * jit/JITOpcodes.cpp:
- (JSC::JIT::privateCompileCTIMachineTrampolines):
- * jit/JITStubs.cpp:
- (JSC::JITThunks::JITThunks):
- * jit/JITStubs.h:
- (JSC::JITThunks::ctiStringLengthTrampoline):
- (JSC::JITThunks::ctiVirtualCallLink):
- (JSC::JITThunks::ctiVirtualCall):
- (JSC::JITThunks::ctiNativeCallThunk):
-
-2010-02-04 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- Increase test coverage for the QScriptValue.
-
- https://bugs.webkit.org/show_bug.cgi?id=34533
-
- * qt/tests/qscriptvalue/qscriptvalue.pro:
- * qt/tests/qscriptvalue/tst_qscriptvalue.cpp:
- (tst_QScriptValue::tst_QScriptValue):
- (tst_QScriptValue::~tst_QScriptValue):
- (tst_QScriptValue::dataHelper):
- (tst_QScriptValue::newRow):
- (tst_QScriptValue::testHelper):
- (tst_QScriptValue::ctor):
- * qt/tests/qscriptvalue/tst_qscriptvalue.h: Added.
- * qt/tests/qscriptvalue/tst_qscriptvalue_generated.cpp: Added.
- (tst_QScriptValue::initScriptValues):
- (tst_QScriptValue::isValid_initData):
- (tst_QScriptValue::isValid_makeData):
- (tst_QScriptValue::isValid_test):
- (tst_QScriptValue::isBool_initData):
- (tst_QScriptValue::isBool_makeData):
- (tst_QScriptValue::isBool_test):
- (tst_QScriptValue::isBoolean_initData):
- (tst_QScriptValue::isBoolean_makeData):
- (tst_QScriptValue::isBoolean_test):
- (tst_QScriptValue::isFunction_initData):
- (tst_QScriptValue::isFunction_makeData):
- (tst_QScriptValue::isFunction_test):
- (tst_QScriptValue::isNull_initData):
- (tst_QScriptValue::isNull_makeData):
- (tst_QScriptValue::isNull_test):
- (tst_QScriptValue::isString_initData):
- (tst_QScriptValue::isString_makeData):
- (tst_QScriptValue::isString_test):
- (tst_QScriptValue::isUndefined_initData):
- (tst_QScriptValue::isUndefined_makeData):
- (tst_QScriptValue::isUndefined_test):
- (tst_QScriptValue::isObject_initData):
- (tst_QScriptValue::isObject_makeData):
- (tst_QScriptValue::isObject_test):
-
-2010-02-03 Kwang Yul Seo <skyul@company100.net>
-
- Reviewed by Eric Seidel.
-
- [BREWMP] Define WTF_PLATFORM_BREWMP_SIMULATOR when AEE_SIMULATOR is defined
- https://bugs.webkit.org/show_bug.cgi?id=34514
-
- PLATFORM(BREWMP_SIMULATOR) guard is needed to make distinction between BREWMP
- and BREWMP simulator.
-
- * wtf/Platform.h:
-
-2010-02-03 Kwang Yul Seo <skyul@company100.net>
-
- Reviewed by Eric Seidel.
-
- [BREWMP] Remove COMPILE_ASSERT conflict with the underlying PLATFORM
- https://bugs.webkit.org/show_bug.cgi?id=34190
-
- COMPILE_ASSERT conflicts with the underlying PLATFORM because it is defined
- both in WTF's Assertions.h and BREWMP's AEEClassIDs.h. Include AEEClassIDs.h
- in Assertions.h and undef COMPILE_ASSERT to avoid redefining COMPILE_ASSERT.
-
- * wtf/Assertions.h:
-
-2010-02-03 Kwang Yul Seo <skyul@company100.net>
-
- Reviewed by Eric Seidel.
-
- [BREWMP] Implement OwnPtrBrew to make sure BREW instances are freed.
- https://bugs.webkit.org/show_bug.cgi?id=34518
-
- Add OwnPtrBrew to release IFile, IFileMgr and IBitmap instances.
-
- * wtf/brew/OwnPtrBrew.cpp: Added.
- (WTF::IFileMgr):
- (WTF::IFile):
- (WTF::IBitmap):
- (WTF::freeOwnedPtrBrew):
- * wtf/brew/OwnPtrBrew.h: Added.
- (WTF::OwnPtrBrew::OwnPtrBrew):
- (WTF::OwnPtrBrew::~OwnPtrBrew):
- (WTF::OwnPtrBrew::get):
- (WTF::OwnPtrBrew::release):
- (WTF::OwnPtrBrew::outPtr):
- (WTF::OwnPtrBrew::set):
- (WTF::OwnPtrBrew::clear):
- (WTF::OwnPtrBrew::operator*):
- (WTF::OwnPtrBrew::operator->):
- (WTF::OwnPtrBrew::operator!):
- (WTF::OwnPtrBrew::operator UnspecifiedBoolType):
- (WTF::OwnPtrBrew::swap):
- (WTF::swap):
- (WTF::operator==):
- (WTF::operator!=):
- (WTF::getPtr):
-
-2010-02-03 Kwang Yul Seo <skyul@company100.net>
-
- Reviewed by Darin Adler.
-
- Export WTF::fastStrDup symbol
- https://bugs.webkit.org/show_bug.cgi?id=34526
-
- * JavaScriptCore.exp:
-
-2010-02-03 Kevin Watters <kevinwatters@gmail.com>
-
- Reviewed by Kevin Ollivier.
+ * runtime/JSGlobalObject.cpp:
+ (JSC::JSGlobalObject::init): Ditto.
- [wx] Enable JIT compilation for wx.
+ PART TWO: Global search and replace.
- https://bugs.webkit.org/show_bug.cgi?id=34536
-
- * wtf/Platform.h:
+ In the areas below, I used global search-and-replace to change
+ (ExecState*, JSObject*, JSValue, const ArgList&) => (ExecState*)
+ args.size() => exec->argumentCount()
+ args.at(i) => exec->argument(i)
-2010-02-02 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Geoffrey Garen.
-
- Crash in CollectorBitmap::get at nbcolympics.com
- https://bugs.webkit.org/show_bug.cgi?id=34504
-
- This was caused by the use of m_offset to determine the offset of
- a new property into the property storage. This patch corrects
- the effected cases by incorporating the anonymous slot count. It
- also removes the duplicate copy of anonymous slot count from the
- property table as keeping this up to date merely increased the
- chance of a mismatch. Finally I've added a large number of
- assertions in an attempt to prevent such a bug from happening
- again.
-
- With the new assertions in place the existing anonymous slot tests
- all fail without the m_offset fixes.
-
- * runtime/PropertyMapHashTable.h:
- * runtime/Structure.cpp:
- (JSC::Structure::materializePropertyMap):
- (JSC::Structure::addPropertyTransitionToExistingStructure):
- (JSC::Structure::addPropertyTransition):
- (JSC::Structure::removePropertyTransition):
- (JSC::Structure::flattenDictionaryStructure):
- (JSC::Structure::addPropertyWithoutTransition):
- (JSC::Structure::removePropertyWithoutTransition):
- (JSC::Structure::copyPropertyTable):
- (JSC::Structure::get):
- (JSC::Structure::put):
- (JSC::Structure::remove):
- (JSC::Structure::insertIntoPropertyMapHashTable):
- (JSC::Structure::createPropertyMapHashTable):
- (JSC::Structure::rehashPropertyMapHashTable):
- (JSC::Structure::checkConsistency):
-
-2010-02-02 Steve Falkenburg <sfalken@apple.com>
-
- Reviewed by Darin Adler.
-
- Copyright year updating for Windows version resources should be automatic
- https://bugs.webkit.org/show_bug.cgi?id=34503
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.rc:
-
-2010-02-02 Kwang Yul Seo <skyul@company100.net>
-
- Reviewed by Eric Seidel.
-
- [BREWMP] Add dummy main thread functions
- https://bugs.webkit.org/show_bug.cgi?id=33569
-
- Add dummy initializeMainThreadPlatform and
- scheduleDispatchFunctionsOnMainThread.
-
- * wtf/brew/MainThreadBrew.cpp: Added.
- (WTF::initializeMainThreadPlatform):
- (WTF::scheduleDispatchFunctionsOnMainThread):
-
-2010-02-02 Kwang Yul Seo <skyul@company100.net>
-
- Reviewed by Darin Adler.
-
- Add using WTF::getLocalTime to CurrentTime.h
- https://bugs.webkit.org/show_bug.cgi?id=34493
-
- * wtf/CurrentTime.h:
-
-2010-02-02 Kwang Yul Seo <skyul@company100.net>
-
- Reviewed by Eric Seidel.
-
- [BREWMP] Add HAVE_XXX definitions
- https://bugs.webkit.org/show_bug.cgi?id=34414
-
- Add HAVE_ERRNO_H=1
-
- * wtf/Platform.h:
-
-2010-02-02 Kwang Yul Seo <skyul@company100.net>
-
- Reviewed by Eric Seidel.
-
- [BREWMP] Don't define HAVE_TM_GMTOFF, HAVE_TM_ZONE and HAVE_TIMEGM
- https://bugs.webkit.org/show_bug.cgi?id=34388
-
- BREWMP does not have these features.
-
- * wtf/Platform.h:
-
-2010-02-02 Kwang Yul Seo <skyul@company100.net>
-
- Reviewed by Eric Seidel.
-
- [BREWMP] Define WTF_PLATFORM_BREWMP=1 when BUILDING_BREWMP is defined
- https://bugs.webkit.org/show_bug.cgi?id=34386
-
- Define WTF_PLATFORM_BREWMP=1 so that PLATFORM(BREWMP) guard can be used.
-
- * wtf/Platform.h:
-
-2010-02-01 Kent Tamura <tkent@chromium.org>
-
- Reviewed by Darin Adler.
-
- Date.UTC() should apply TimeClip operation.
- https://bugs.webkit.org/show_bug.cgi?id=34461
-
- ECMAScript 5 15.9.4.3:
- > 9 Return TimeClip(MakeDate(MakeDay(yr, m, dt), MakeTime(h, min, s, milli))).
-
- * runtime/DateConstructor.cpp:
- (JSC::dateUTC): Calls WTF::timeClip().
-
-2010-02-01 Kent Tamura <tkent@chromium.org>
-
- Reviewed by Darin Adler.
-
- Fix a bug that Math.round() retunrs incorrect results for huge integers
- https://bugs.webkit.org/show_bug.cgi?id=34462
-
- * runtime/MathObject.cpp:
- (JSC::mathProtoFuncRound): Avoid "arg + 0.5".
-
-2010-02-01 Kwang Yul Seo <skyul@company100.net>
-
- Reviewed by Eric Seidel.
-
- [BREWMP] Port WTF's currentTime
- https://bugs.webkit.org/show_bug.cgi?id=33567
-
- Combine GETUTCSECONDS and GETTIMEMS to calculate the number
- of milliseconds since 1970/01/01 00:00:00 UTC.
-
- * wtf/CurrentTime.cpp:
- (WTF::currentTime):
-
-2010-02-01 Patrick Gansterer <paroga@paroga.com>
-
- Reviewed by Darin Adler.
-
- [Qt] WinCE buildfix after r52729 and fix for Q_BIG_ENDIAN typo.
- https://bugs.webkit.org/show_bug.cgi?id=34378
-
- * wtf/Platform.h:
-
-2010-02-01 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- Structure not accounting for anonymous slots when computing property storage size
- https://bugs.webkit.org/show_bug.cgi?id=34441
-
- Previously any Structure with anonymous storage would have a property map, so we
- were only including anonymous slot size if there was a property map. Given this
- is no longer the case we should always include the anonymous slot count in the
- property storage size.
-
- * runtime/Structure.h:
- (JSC::Structure::propertyStorageSize):
-
-2010-02-01 Oliver Hunt <oliver@apple.com>
-
- Windows build fix, update exports file (again)
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2010-02-01 Oliver Hunt <oliver@apple.com>
-
- Windows build fix, update exports file
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2010-01-31 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Maciej Stachowiak.
-
- JSC is failing to propagate anonymous slot count on some transitions
- https://bugs.webkit.org/show_bug.cgi?id=34321
-
- Remove secondary Structure constructor, and make Structure store a copy
- of the number of anonymous slots directly so saving an immediate allocation
- of a property map for all structures with anonymous storage, which also
- avoids the leaked property map on new property transition in the original
- version of this patch.
-
- We need to propagate the the anonymous slot count otherwise we can end up
- with a structure recording incorrect information about the available and
- needed space for property storage, or alternatively incorrectly reusing
- some slots.
-
- * JavaScriptCore.exp:
- * runtime/Structure.cpp:
- (JSC::Structure::Structure):
- (JSC::Structure::materializePropertyMap):
- (JSC::Structure::addPropertyTransition):
- (JSC::Structure::changePrototypeTransition):
- (JSC::Structure::despecifyFunctionTransition):
- (JSC::Structure::getterSetterTransition):
- (JSC::Structure::toDictionaryTransition):
- (JSC::Structure::flattenDictionaryStructure):
- (JSC::Structure::copyPropertyTable):
- (JSC::Structure::put):
- (JSC::Structure::remove):
- (JSC::Structure::insertIntoPropertyMapHashTable):
- (JSC::Structure::createPropertyMapHashTable):
- * runtime/Structure.h:
- (JSC::Structure::create):
- (JSC::Structure::hasAnonymousSlots):
- (JSC::Structure::anonymousSlotCount):
-
-2010-01-31 Patrick Gansterer <paroga@paroga.com>
-
- Reviewed by Darin Adler.
-
- Buildfix for WinCE + style fixes (TLS_OUT_OF_INDEXES is not defined).
- https://bugs.webkit.org/show_bug.cgi?id=34380
-
- * wtf/ThreadSpecific.h:
-
-2010-01-31 Kent Tamura <tkent@chromium.org>
-
- Reviewed by Darin Adler.
-
- [Windows] Fix a bug of round() with huge integral numbers
- https://bugs.webkit.org/show_bug.cgi?id=34297
-
- Fix a bug that round() for huge integral numbers returns incorrect
- results. For example, round(8639999913600001) returns
- 8639999913600002 without this change though the double type can
- represent 8639999913600001 precisely.
-
- Math.round() of JavaScript has a similar problem. But this change
- doesn't fix it because Math.round() doesn't use round() of
- MathExtra.h.
-
- * wtf/MathExtras.h:
- (round): Avoid to do "num + 0.5" or "num - 0.5".
- (roundf): Fixed similarly.
- (llround): Calls round().
- (llroundf): Calls roundf().
- (lround): Calls round().
- (lroundf): Calls roundf().
-
-2010-01-29 Mark Rowe <mrowe@apple.com>
-
- Sort Xcode projects.
-
- * JavaScriptCore.xcodeproj/project.pbxproj:
-
-2010-01-29 Mark Rowe <mrowe@apple.com>
-
- Fix the Mac build.
-
- Disable ENABLE_INDEXED_DATABASE since it is "completely non-functional".
-
- As the comment in FeatureDefines.xcconfig notes, the list of feature defines
- needs to be kept in sync across the various files. The default values also
- need to be kept in sync between these files and build-webkit.
-
- * Configurations/FeatureDefines.xcconfig:
-
-2010-01-29 Simon Hausmann <simon.hausmann@nokia.com>
-
- Rubber-stamped by Maciej Stachowiak.
-
- Fix the ARM build.
-
- * runtime/JSNumberCell.h:
- (JSC::JSNumberCell::createStructure): Call the right Structure::create overload.
-
-2010-01-28 Kevin Ollivier <kevino@theolliviers.com>
-
- [wx] Build fix for MSW, use ThreadingWin.cpp as the Windows pthreads implementation
- implements pthread_t in a way that makes it impossible to check its validity,
- which is needed by ThreadingPthreads.cpp.
-
- * wscript:
-
-2010-01-28 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- DOM Objects shouldn't all require custom mark functions
- https://bugs.webkit.org/show_bug.cgi?id=34291
-
- Make getAnonymousValue const-friendly
-
- * runtime/JSObject.h:
- (JSC::JSObject::getAnonymousValue):
-
-2010-01-28 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- Simplify anonymous slot implementation
- https://bugs.webkit.org/show_bug.cgi?id=34282
-
- A class must now specify the number of slots it needs at construction time
- rather than later on with a transition. This makes many things simpler,
- we no longer need to need an additional transition on object creation to
- add the anonymous slots, and we remove the need for a number of transition
- type checks.
-
- * API/JSCallbackConstructor.h:
- (JSC::JSCallbackConstructor::createStructure):
+ * API/JSCallbackFunction.cpp:
+ (JSC::JSCallbackFunction::call):
* API/JSCallbackFunction.h:
- (JSC::JSCallbackFunction::createStructure):
- * API/JSCallbackObject.h:
- (JSC::JSCallbackObject::createStructure):
- * JavaScriptCore.exp:
- * debugger/DebuggerActivation.h:
- (JSC::DebuggerActivation::createStructure):
- * runtime/Arguments.h:
- (JSC::Arguments::createStructure):
- * runtime/BooleanObject.h:
- (JSC::BooleanObject::createStructure):
- * runtime/DateInstance.h:
- (JSC::DateInstance::createStructure):
- * runtime/DatePrototype.h:
- (JSC::DatePrototype::createStructure):
- * runtime/FunctionPrototype.h:
- (JSC::FunctionPrototype::createStructure):
- * runtime/GetterSetter.h:
- (JSC::GetterSetter::createStructure):
- * runtime/GlobalEvalFunction.h:
- (JSC::GlobalEvalFunction::createStructure):
- * runtime/InternalFunction.h:
- (JSC::InternalFunction::createStructure):
- * runtime/JSAPIValueWrapper.h:
- (JSC::JSAPIValueWrapper::createStructure):
- * runtime/JSActivation.h:
- (JSC::JSActivation::createStructure):
- * runtime/JSArray.h:
- (JSC::JSArray::createStructure):
- * runtime/JSByteArray.cpp:
- (JSC::JSByteArray::createStructure):
- * runtime/JSCell.h:
- (JSC::JSCell::createDummyStructure):
- * runtime/JSFunction.h:
- (JSC::JSFunction::createStructure):
- * runtime/JSGlobalObject.h:
- (JSC::JSGlobalObject::createStructure):
- * runtime/JSNotAnObject.h:
- (JSC::JSNotAnObject::createStructure):
- * runtime/JSONObject.h:
- (JSC::JSONObject::createStructure):
- * runtime/JSObject.h:
- (JSC::JSObject::createStructure):
- (JSC::JSObject::putAnonymousValue):
- (JSC::JSObject::getAnonymousValue):
- * runtime/JSPropertyNameIterator.h:
- (JSC::JSPropertyNameIterator::createStructure):
- * runtime/JSStaticScopeObject.h:
- (JSC::JSStaticScopeObject::createStructure):
- * runtime/JSString.h:
- (JSC::Fiber::createStructure):
- * runtime/JSVariableObject.h:
- (JSC::JSVariableObject::createStructure):
- * runtime/JSWrapperObject.h:
- (JSC::JSWrapperObject::createStructure):
- (JSC::JSWrapperObject::JSWrapperObject):
- * runtime/MathObject.h:
- (JSC::MathObject::createStructure):
- * runtime/NumberConstructor.h:
- (JSC::NumberConstructor::createStructure):
- * runtime/NumberObject.h:
- (JSC::NumberObject::createStructure):
- * runtime/RegExpConstructor.h:
- (JSC::RegExpConstructor::createStructure):
- * runtime/RegExpObject.h:
- (JSC::RegExpObject::createStructure):
- * runtime/StringObject.h:
- (JSC::StringObject::createStructure):
- * runtime/StringObjectThatMasqueradesAsUndefined.h:
- (JSC::StringObjectThatMasqueradesAsUndefined::createStructure):
- * runtime/Structure.cpp:
- (JSC::Structure::~Structure):
- (JSC::Structure::materializePropertyMap):
- * runtime/Structure.h:
- (JSC::Structure::create):
- (JSC::Structure::anonymousSlotCount):
- * runtime/StructureTransitionTable.h:
-
-2010-01-27 Oliver Hunt <oliver@apple.com>
-
- Windows build fix.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2010-01-27 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Maciej Stachowiak.
-
- MessageEvent.data should deserialize in the context of the MessageEvent's global object
- https://bugs.webkit.org/show_bug.cgi?id=34227
-
- Add logic to allow us to create an Object, Array, or Date instance
- so we can create them in the context of a specific global object,
- rather than just using the current lexical global object.
-
- * JavaScriptCore.exp:
- * runtime/DateInstance.cpp:
- (JSC::DateInstance::DateInstance):
- * runtime/DateInstance.h:
- * runtime/JSGlobalObject.h:
- (JSC::constructEmptyObject):
- (JSC::constructEmptyArray):
-
-2010-01-27 Alexey Proskuryakov <ap@apple.com>
-
- Reviewed by Darin Adler.
-
- https://bugs.webkit.org/show_bug.cgi?id=34150
- WebKit needs a mechanism to catch stale HashMap entries
-
- It is very difficult to catch stale pointers that are HashMap keys - since a pointer's hash
- is just its value, it is very unlikely that any observable problem is reproducible.
-
- This extends hash table consistency checks to check that pointers are referencing allocated
- memory blocks, and makes it possible to invoke the checks explicitly (it is not feasible
- to enable CHECK_HASHTABLE_CONSISTENCY by default, because that affects performance too much).
-
- * wtf/HashMap.h: (WTF::::checkConsistency): Call through to HashTable implementation. We can
- add similar calls to HashSet and HashCountedSet, but I haven't seen hard to debug problems
- with those yet.
-
- * wtf/HashSet.h: (WTF::::remove): The version of checkTableConsistency that's guarded by
- CHECK_HASHTABLE_CONSISTENCY is now called internalCheckTableConsistency().
-
- * wtf/HashTable.h:
- (WTF::HashTable::internalCheckTableConsistency):
- (WTF::HashTable::internalCheckTableConsistencyExceptSize):
- (WTF::HashTable::checkTableConsistencyExceptSize):
- Expose checkTableConsistency() even if CHECK_HASHTABLE_CONSISTENCY is off.
- (WTF::::add): Updated for checkTableConsistency renaming.
- (WTF::::addPassingHashCode): Ditto.
- (WTF::::removeAndInvalidate): Ditto.
- (WTF::::remove): Ditto.
- (WTF::::rehash): Ditto.
- (WTF::::checkTableConsistency): The assertion for !shouldExpand() was not correct - this
- function returns true for tables with m_table == 0.
- (WTF::::checkTableConsistencyExceptSize): Call checkValueConsistency for key. Potentially,
- we could do the same for values.
-
- * wtf/HashTraits.h:
- (WTF::GenericHashTraits::checkValueConsistency): An empty function that can be overridden
- to add checks. Currently, the only override is for pointer hashes.
-
- * wtf/RefPtrHashMap.h: (WTF::::remove): Updated for checkTableConsistency renaming.
-
-2010-01-27 Anton Muhin <antonm@chromium.org>
-
- Reviewed by Darin Adler.
-
- Remove trailing \ from inline function code
- https://bugs.webkit.org/show_bug.cgi?id=34223
-
- * assembler/ARMv7Assembler.h:
- (JSC::ARMThumbImmediate::countLeadingZerosPartial):
-
-2010-01-27 Kwang Yul Seo <skyul@company100.net>
-
- Reviewed by Eric Seidel.
-
- [BREWMP] Port WTF's randomNumber
- https://bugs.webkit.org/show_bug.cgi?id=33566
-
- Use GETRAND to generate 4 byte random byte sequence to implement
- weakRandomNumber. Create a secure random number generator with
- AEECLSID_RANDOM to implement randomNumber.
-
- * wtf/RandomNumber.cpp:
- (WTF::weakRandomNumber):
- (WTF::randomNumber):
-
-2010-01-27 Kwang Yul Seo <skyul@company100.net>
-
- Reviewed by Eric Seidel.
-
- [BREWMP] Port getCPUTime
- https://bugs.webkit.org/show_bug.cgi?id=33572
-
- Use GETUPTIMEMS which returns a continuously and
- linearly increasing millisecond timer from the time the device
- was powered on. This function is enough to implement getCPUTime.
-
- * runtime/TimeoutChecker.cpp:
- (JSC::getCPUTime):
-
-2010-01-27 Kwang Yul Seo <skyul@company100.net>
-
- Reviewed by Oliver Hunt.
-
- [BREWMP] Add MarkStack fastMalloc implementation for platforms without VirtualAlloc or mmap.
- https://bugs.webkit.org/show_bug.cgi?id=33582
-
- Use fastMalloc and fastFree to implement MarkStack::allocateStack and
- MarkStack::releaseStack for platforms without page level allocation.
-
- * runtime/MarkStack.h:
- (JSC::MarkStack::MarkStackArray::shrinkAllocation):
- * runtime/MarkStackNone.cpp: Added.
- (JSC::MarkStack::initializePagesize):
- (JSC::MarkStack::allocateStack):
- (JSC::MarkStack::releaseStack):
-
-2010-01-27 Kwang Yul Seo <skyul@company100.net>
-
- Reviewed by Eric Seidel.
-
- [BREWMP] Don't use time function
- https://bugs.webkit.org/show_bug.cgi?id=33577
-
- Calling time(0) in BREW devices causes a crash because time
- is not properly ported in most devices. Cast currentTime() to
- time_t to get the same result as time(0).
-
- * wtf/DateMath.cpp:
- (WTF::calculateUTCOffset):
-
-2010-01-27 Alexey Proskuryakov <ap@apple.com>
-
- Revert r53899 (HashMap<AtomicStringImpl*, Value> key checks) and subsequent build fixes,
- because they make SVG tests crash in release builds.
-
- * wtf/HashMap.h:
- (WTF::::remove):
- * wtf/HashSet.h:
- (WTF::::remove):
- * wtf/HashTable.h:
- (WTF::::add):
- (WTF::::addPassingHashCode):
- (WTF::::removeAndInvalidate):
- (WTF::::remove):
- (WTF::::rehash):
- (WTF::::checkTableConsistency):
- (WTF::::checkTableConsistencyExceptSize):
- * wtf/HashTraits.h:
- (WTF::GenericHashTraits::emptyValue):
- (WTF::):
- * wtf/RefPtrHashMap.h:
- (WTF::::remove):
-
-2010-01-26 Alexey Proskuryakov <ap@apple.com>
-
- More Windows build fixing.
-
- * wtf/HashTraits.h: _msize takes void*, remove const qualifier from type.
-
-2010-01-26 Alexey Proskuryakov <ap@apple.com>
-
- Windows build fix.
-
- * wtf/HashTraits.h: Include malloc.h for _msize().
-
-2010-01-26 Alexey Proskuryakov <ap@apple.com>
-
- Build fix.
-
- * wtf/HashTable.h: (WTF::HashTable::checkTableConsistencyExceptSize): Remove const from a
- static (empty) version of this function.
-
-2010-01-26 Alexey Proskuryakov <ap@apple.com>
-
- Reviewed by Darin Adler.
-
- https://bugs.webkit.org/show_bug.cgi?id=34150
- WebKit needs a mechanism to catch stale HashMap entries
-
- It is very difficult to catch stale pointers that are HashMap keys - since a pointer's hash
- is just its value, it is very unlikely that any observable problem is reproducible.
-
- This extends hash table consistency checks to check that pointers are referencing allocated
- memory blocks, and makes it possible to invoke the checks explicitly (it is not feasible
- to enable CHECK_HASHTABLE_CONSISTENCY by default, because that affects performance too much).
-
- * wtf/HashMap.h: (WTF::::checkConsistency): Call through to HashTable implementation. We can
- add similar calls to HashSet and HashCountedSet, but I haven't seen hard to debug problems
- with those yet.
-
- * wtf/HashSet.h: (WTF::::remove): The version of checkTableConsistency that's guarded by
- CHECK_HASHTABLE_CONSISTENCY is now called internalCheckTableConsistency().
-
- * wtf/HashTable.h:
- (WTF::HashTable::internalCheckTableConsistency):
- (WTF::HashTable::internalCheckTableConsistencyExceptSize):
- (WTF::HashTable::checkTableConsistencyExceptSize):
- Expose checkTableConsistency() even if CHECK_HASHTABLE_CONSISTENCY is off.
- (WTF::::add): Updated for checkTableConsistency renaming.
- (WTF::::addPassingHashCode): Ditto.
- (WTF::::removeAndInvalidate): Ditto.
- (WTF::::remove): Ditto.
- (WTF::::rehash): Ditto.
- (WTF::::checkTableConsistency): The assertion for !shouldExpand() was not correct - this
- function returns true for tables with m_table == 0.
- (WTF::::checkTableConsistencyExceptSize): Call checkValueConsistency for key. Potentially,
- we could do the same for values.
-
- * wtf/HashTraits.h:
- (WTF::GenericHashTraits::checkValueConsistency): An empty function that can be overridden
- to add checks. Currently, the only override is for pointer hashes.
-
- * wtf/RefPtrHashMap.h: (WTF::::remove): Updated for checkTableConsistency renaming.
-
-2010-01-26 Lyon Chen <liachen@rim.com>
-
- Reviewed by Maciej Stachowiak.
-
- Opcode.h use const void* for Opcode cause error #1211 for RVCT compiler
- https://bugs.webkit.org/show_bug.cgi?id=33902
-
- * bytecode/Opcode.h:
-
-2010-01-26 Steve Falkenburg <sfalken@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Windows build references non-existent include paths
- https://bugs.webkit.org/show_bug.cgi?id=34175
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
- * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops:
- * JavaScriptCore.vcproj/jsc/jscCommon.vsprops:
- * JavaScriptCore.vcproj/testapi/testapi.vcproj:
- * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops:
-
-2010-01-26 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Geoffrey Garen.
-
- Using JavaScriptCore API with a webkit vended context can result in slow script dialog
- https://bugs.webkit.org/show_bug.cgi?id=34172
-
- Make the APIShim correctly increment and decrement the timeout
- entry counter.
-
- * API/APIShims.h:
- (JSC::APIEntryShimWithoutLock::APIEntryShimWithoutLock):
- (JSC::APIEntryShimWithoutLock::~APIEntryShimWithoutLock):
- (JSC::APICallbackShim::APICallbackShim):
- (JSC::APICallbackShim::~APICallbackShim):
-
-2010-01-26 Simon Hausmann <simon.hausmann@nokia.com>
-
- [Qt] Fix compilation of QtScript with non-gcc compilers
-
- Variable length stack arrays are a gcc extension. Use QVarLengthArray
- as a more portable solution that still tries to allocate on the stack
- first.
-
- * qt/api/qscriptvalue_p.h:
- (QScriptValuePrivate::call):
-
-2010-01-26 Simon Hausmann <simon.hausmann@nokia.com>
-
- Reviewed by Tor Arne Vestbø.
-
- [Qt] Fix the build on platforms without JIT support.
-
- The JIT support should be determined at compile-time via wtf/Platform.h
-
- * qt/api/QtScript.pro:
-
-2010-01-26 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- First steps of the QtScript API.
-
- Two new classes were created; QScriptEngine and QScriptValue.
- The first should encapsulate a javascript context and the second a script
- value.
-
- This API is still in development, so it isn't compiled by default.
- To trigger compilation, pass --qmakearg="CONFIG+=build-qtscript" to
- build-webkit.
-
- https://bugs.webkit.org/show_bug.cgi?id=32565
-
- * qt/api/QtScript.pro: Added.
- * qt/api/qscriptconverter_p.h: Added.
- (QScriptConverter::toString):
- * qt/api/qscriptengine.cpp: Added.
- (QScriptEngine::QScriptEngine):
- (QScriptEngine::~QScriptEngine):
- (QScriptEngine::evaluate):
- (QScriptEngine::collectGarbage):
- * qt/api/qscriptengine.h: Added.
- * qt/api/qscriptengine_p.cpp: Added.
- (QScriptEnginePrivate::QScriptEnginePrivate):
- (QScriptEnginePrivate::~QScriptEnginePrivate):
- (QScriptEnginePrivate::evaluate):
- * qt/api/qscriptengine_p.h: Added.
- (QScriptEnginePrivate::get):
- (QScriptEnginePrivate::collectGarbage):
- (QScriptEnginePrivate::makeJSValue):
- (QScriptEnginePrivate::context):
- * qt/api/qscriptvalue.cpp: Added.
- (QScriptValue::QScriptValue):
- (QScriptValue::~QScriptValue):
- (QScriptValue::isValid):
- (QScriptValue::isBool):
- (QScriptValue::isBoolean):
- (QScriptValue::isNumber):
- (QScriptValue::isNull):
- (QScriptValue::isString):
- (QScriptValue::isUndefined):
- (QScriptValue::isError):
- (QScriptValue::isObject):
- (QScriptValue::isFunction):
- (QScriptValue::toString):
- (QScriptValue::toNumber):
- (QScriptValue::toBool):
- (QScriptValue::toBoolean):
- (QScriptValue::toInteger):
- (QScriptValue::toInt32):
- (QScriptValue::toUInt32):
- (QScriptValue::toUInt16):
- (QScriptValue::call):
- (QScriptValue::engine):
- (QScriptValue::operator=):
- (QScriptValue::equals):
- (QScriptValue::strictlyEquals):
- * qt/api/qscriptvalue.h: Added.
- (QScriptValue::):
- * qt/api/qscriptvalue_p.h: Added.
- (QScriptValuePrivate::):
- (QScriptValuePrivate::get):
- (QScriptValuePrivate::QScriptValuePrivate):
- (QScriptValuePrivate::isValid):
- (QScriptValuePrivate::isBool):
- (QScriptValuePrivate::isNumber):
- (QScriptValuePrivate::isNull):
- (QScriptValuePrivate::isString):
- (QScriptValuePrivate::isUndefined):
- (QScriptValuePrivate::isError):
- (QScriptValuePrivate::isObject):
- (QScriptValuePrivate::isFunction):
- (QScriptValuePrivate::toString):
- (QScriptValuePrivate::toNumber):
- (QScriptValuePrivate::toBool):
- (QScriptValuePrivate::toInteger):
- (QScriptValuePrivate::toInt32):
- (QScriptValuePrivate::toUInt32):
- (QScriptValuePrivate::toUInt16):
- (QScriptValuePrivate::equals):
- (QScriptValuePrivate::strictlyEquals):
- (QScriptValuePrivate::assignEngine):
- (QScriptValuePrivate::call):
- (QScriptValuePrivate::engine):
- (QScriptValuePrivate::context):
- (QScriptValuePrivate::value):
- (QScriptValuePrivate::object):
- (QScriptValuePrivate::inherits):
- (QScriptValuePrivate::isJSBased):
- (QScriptValuePrivate::isNumberBased):
- (QScriptValuePrivate::isStringBased):
- * qt/api/qtscriptglobal.h: Added.
- * qt/tests/qscriptengine/qscriptengine.pro: Added.
- * qt/tests/qscriptengine/tst_qscriptengine.cpp: Added.
- (tst_QScriptEngine::tst_QScriptEngine):
- (tst_QScriptEngine::~tst_QScriptEngine):
- (tst_QScriptEngine::init):
- (tst_QScriptEngine::cleanup):
- (tst_QScriptEngine::collectGarbage):
- (tst_QScriptEngine::evaluate):
- * qt/tests/qscriptvalue/qscriptvalue.pro: Added.
- * qt/tests/qscriptvalue/tst_qscriptvalue.cpp: Added.
- (tst_QScriptValue::tst_QScriptValue):
- (tst_QScriptValue::~tst_QScriptValue):
- (tst_QScriptValue::init):
- (tst_QScriptValue::cleanup):
- (tst_QScriptValue::ctor):
- (tst_QScriptValue::toString_data):
- (tst_QScriptValue::toString):
- (tst_QScriptValue::copyConstructor_data):
- (tst_QScriptValue::copyConstructor):
- (tst_QScriptValue::assignOperator_data):
- (tst_QScriptValue::assignOperator):
- (tst_QScriptValue::dataSharing):
- (tst_QScriptValue::constructors_data):
- (tst_QScriptValue::constructors):
- (tst_QScriptValue::call):
- * qt/tests/tests.pri: Added.
- * qt/tests/tests.pro: Added.
-
-2010-01-25 Dmitry Titov <dimich@chromium.org>
-
- Reviewed by David Levin.
-
- Fix Chromium Linux tests: the pthread functions on Linux produce segfault if they receive 0 thread handle.
- After r53714, we can have 0 thread handles passed to pthread_join and pthread_detach if corresponding threads
- were already terminated and their threadMap entries cleared.
- Add a 0 check.
-
- * wtf/ThreadingPthreads.cpp:
- (WTF::waitForThreadCompletion):
- (WTF::detachThread):
-
-2010-01-24 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Maciej Stachowiak.
-
- Refactor JITStubs.cpp so that DEFINE_STUB_FUNCTION is only used once for each function
- https://bugs.webkit.org/show_bug.cgi?id=33866
-
- Place the guard USE(JSVALUE32_64) inside the body of the DEFINE_STUB_FUNCTION
- macro for those functions that are always present.
-
- * jit/JITStubs.cpp:
- (JSC::DEFINE_STUB_FUNCTION):
-
-2010-01-22 Kevin Watters <kevinwatters@gmail.com>
-
- Reviewed by Kevin Ollivier.
-
- [wx] Remove the Bakefile build system, which is no longer being used.
-
- https://bugs.webkit.org/show_bug.cgi?id=34022
-
- * JavaScriptCoreSources.bkl: Removed.
- * jscore.bkl: Removed.
-
-2010-01-22 Steve Falkenburg <sfalken@apple.com>
-
- Reviewed by Darin Adler.
-
- https://bugs.webkit.org/show_bug.cgi?id=34025
- Enable client-based Geolocation abstraction for Mac, Windows AppleWebKit targets.
-
- * Configurations/FeatureDefines.xcconfig:
-
-2010-01-22 Dmitry Titov <dimich@chromium.org>
-
- Not reviewed, attempted Snow Leopard build fix.
-
- * wtf/ThreadingPthreads.cpp: Add a forward declaration of a function which is not 'static'.
-
-2009-01-22 Dmitry Titov <dimich@chromium.org>
-
- Reviewed by Maciej Stachowiak.
-
- Fix the leak of ThreadIdentifiers in threadMap across threads.
- https://bugs.webkit.org/show_bug.cgi?id=32689
-
- Test is added to DumpRenderTree.mm.
-
- * Android.mk: Added file ThreadIdentifierDataPthreads.(h|cpp) to build.
- * Android.v8.wtf.mk: Ditto.
- * GNUmakefile.am: Ditto.
- * JavaScriptCore.gyp/JavaScriptCore.gyp: Ditto.
- * JavaScriptCore.gypi: Ditto.
- * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
-
- * wtf/ThreadIdentifierDataPthreads.cpp: Added. Contains custom implementation of thread-specific data that uses custom destructor.
- (WTF::ThreadIdentifierData::~ThreadIdentifierData): Removes the ThreadIdentifier from the threadMap.
- (WTF::ThreadIdentifierData::identifier):
- (WTF::ThreadIdentifierData::initialize):
- (WTF::ThreadIdentifierData::destruct): Custom thread-specific destructor. Resets the value for the key again to cause second invoke.
- (WTF::ThreadIdentifierData::initializeKeyOnceHelper):
- (WTF::ThreadIdentifierData::initializeKeyOnce): Need to use pthread_once since initialization may come on any thread(s).
- * wtf/ThreadIdentifierDataPthreads.h: Added.
- (WTF::ThreadIdentifierData::ThreadIdentifierData):
-
- * wtf/Threading.cpp:
- (WTF::threadEntryPoint): Move initializeCurrentThreadInternal to after the lock to make
- sure it is invoked when ThreadIdentifier is already established.
-
- * wtf/Threading.h: Rename setThreadNameInternal -> initializeCurrentThreadInternal since it does more then only set the name now.
- * wtf/ThreadingNone.cpp:
- (WTF::initializeCurrentThreadInternal): Ditto.
- * wtf/ThreadingWin.cpp:
- (WTF::initializeCurrentThreadInternal): Ditto.
- (WTF::initializeThreading): Ditto.
- * wtf/gtk/ThreadingGtk.cpp:
- (WTF::initializeCurrentThreadInternal): Ditto.
- * wtf/qt/ThreadingQt.cpp:
- (WTF::initializeCurrentThreadInternal): Ditto.
-
- * wtf/ThreadingPthreads.cpp:
- (WTF::establishIdentifierForPthreadHandle):
- (WTF::clearPthreadHandleForIdentifier): Make it not 'static' so the ~ThreadIdentifierData() in another file can call it.
- (WTF::initializeCurrentThreadInternal): Set the thread-specific data. The ThreadIdentifier is already established by creating thread.
- (WTF::waitForThreadCompletion): Remove call to clearPthreadHandleForIdentifier(threadID) since it is now done in ~ThreadIdentifierData().
- (WTF::detachThread): Ditto.
- (WTF::currentThread): Use the thread-specific data to get the ThreadIdentifier. It's many times faster then Mutex-protected iteration through the map.
- Also, set the thread-specific data if called first time on the thread.
-
-2010-01-21 Kwang Yul Seo <skyul@company100.net>
-
- Reviewed by Alexey Proskuryakov.
-
- Add ThreadSpecific for ENABLE(SINGLE_THREADED)
- https://bugs.webkit.org/show_bug.cgi?id=33878
-
- Implement ThreadSpecific with a simple getter/setter
- when ENABLE(SINGLE_THREADED) is true.
-
- Due to the change in https://bugs.webkit.org/show_bug.cgi?id=33236,
- an implementation of ThreadSpecific must be available to build WebKit.
- This causes a build failure for platforms without a proper
- ThreadSpecific implementation.
-
- * wtf/ThreadSpecific.h:
- (WTF::::ThreadSpecific):
- (WTF::::~ThreadSpecific):
- (WTF::::get):
- (WTF::::set):
- (WTF::::destroy):
-
-2010-01-21 Kwang Yul Seo <skyul@company100.net>
-
- Reviewed by Maciej Stachowiak.
-
- Add fastStrDup to FastMalloc
- https://bugs.webkit.org/show_bug.cgi?id=33937
-
- The new string returned by fastStrDup is obtained with fastMalloc,
- and can be freed with fastFree. This makes the memory management
- more consistent because we don't need to keep strdup allocated pointers
- and free them with free(). Instead we can use fastFree everywhere.
-
- * wtf/FastMalloc.cpp:
- (WTF::fastStrDup):
- * wtf/FastMalloc.h:
-
-2010-01-21 Brady Eidson <beidson@apple.com>
-
- Reviewed by Maciej Stachowiak.
-
- history.back() for same-document history traversals isn't synchronous as the specification states.
- <rdar://problem/7535011> and https://bugs.webkit.org/show_bug.cgi?id=33538
-
- * wtf/Platform.h: Add a "HISTORY_ALWAYS_ASYNC" enable and turn it on for Chromium.
-
-2010-01-21 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Always create a prototype for automatically managed classes.
-
- This fixes some errors where prototype chains were not correctly hooked
- up, and also ensures that API classes work correctly with features like
- instanceof.
-
- * API/JSClassRef.cpp:
- (OpaqueJSClass::create): Cleaned up some of this code. Also changed it
- to always create a prototype class.
-
- * API/tests/testapi.c:
- (Derived2_class):
- (main): Fixed a null value crash in the exception checking code.
- * API/tests/testapi.js: Added some tests for the case where a prototype
- chain would not be hooked up correctly.
-
-2010-01-21 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Geoff Garen.
-
- Force JSC to create a prototype chain for API classes with a
- parent class but no static functions.
-
- * API/JSClassRef.cpp:
- (OpaqueJSClass::create):
-
-2010-01-21 Kent Hansen <kent.hansen@nokia.com>
-
- Reviewed by Geoffrey Garen.
-
- Object.getOwnPropertyDescriptor always returns undefined for JS API objects
- https://bugs.webkit.org/show_bug.cgi?id=33946
-
- Ideally the getOwnPropertyDescriptor() reimplementation should return an
- access descriptor that wraps the property getter and setter callbacks, but
- that approach is much more involved than returning a value descriptor.
- Keep it simple for now.
-
* API/JSCallbackObject.h:
* API/JSCallbackObjectFunctions.h:
- (JSC::::getOwnPropertyDescriptor):
- * API/tests/testapi.js:
-
-2010-01-20 Mark Rowe <mrowe@apple.com>
-
- Build fix.
-
- * wtf/FastMalloc.cpp:
- (WTF::TCMalloc_PageHeap::initializeScavenger): Remove unnecessary function call.
-
-2010-01-20 Mark Rowe <mrowe@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Use the inline i386 assembly for x86_64 as well rather than falling back to using pthread mutexes.
-
- * wtf/TCSpinLock.h:
- (TCMalloc_SpinLock::Lock):
- (TCMalloc_SpinLock::Unlock):
- (TCMalloc_SlowLock):
-
-2010-01-20 Mark Rowe <mrowe@apple.com>
-
- Reviewed by Oliver Hunt.
-
- <rdar://problem/7215063> Use GCD instead of an extra thread for FastMalloc scavenging on platforms where it is supported
-
- Abstract the background scavenging slightly so that an alternate implementation that uses GCD can be used on platforms
- where it is supported.
-
- * wtf/FastMalloc.cpp:
- (WTF::TCMalloc_PageHeap::init):
- (WTF::TCMalloc_PageHeap::initializeScavenger):
- (WTF::TCMalloc_PageHeap::signalScavenger):
- (WTF::TCMalloc_PageHeap::shouldContinueScavenging):
- (WTF::TCMalloc_PageHeap::Delete):
- (WTF::TCMalloc_PageHeap::periodicScavenge):
- * wtf/Platform.h:
-
-2010-01-20 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Oliver Hunt.
-
- <rdar://problem/7562708> REGRESSION(53460): Heap::destroy may not run
- all destructors
-
- * runtime/Collector.cpp:
- (JSC::Heap::freeBlocks): Instead of fully marking protected objects,
- just set their mark bits. This prevents protected objects from keeping
- unprotected objects alive. Destructor order is not guaranteed, so it's
- OK to destroy objects pointed to by protected objects before destroying
- protected objects.
-
-2010-01-19 David Levin <levin@chromium.org>
-
- Reviewed by Oliver Hunt.
-
- CrossThreadCopier needs to support ThreadSafeShared better.
- https://bugs.webkit.org/show_bug.cgi?id=33698
-
- * wtf/TypeTraits.cpp: Added tests for the new type traits.
- * wtf/TypeTraits.h:
- (WTF::IsSubclass): Determines if a class is a derived from another class.
- (WTF::IsSubclassOfTemplate): Determines if a class is a derived from a
- template class (with one parameter that is unknown).
- (WTF::RemoveTemplate): Reveals the type for a template parameter.
-
-2010-01-20 Steve Falkenburg <sfalken@apple.com>
-
- Reviewed by Darin Adler and Adam Roben.
-
- Feature defines are difficult to maintain on Windows builds
- https://bugs.webkit.org/show_bug.cgi?id=33883
-
- FeatureDefines.vsprops are now maintained in a way similar to
- Configurations/FeatureDefines.xcconfig, with the added advantage
- of having a single FeatureDefines file across all projects.
-
- * Configurations/FeatureDefines.xcconfig: Add comments about keeping feature definitions in sync.
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add FeatureDefines.vsprops inherited property sheet.
- * JavaScriptCore.vcproj/WTF/WTF.vcproj: Add FeatureDefines.vsprops inherited property sheet.
-
-2010-01-20 Csaba Osztrogonác <ossy@webkit.org>
-
- [Qt] Unreviewed buildfix for r53547.
-
- * DerivedSources.pro:
-
-2010-01-20 Tor Arne Vestbø <tor.arne.vestbo@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- [Qt] Make extraCompilers for generated sources depend on their scripts
-
- * DerivedSources.pro:
-
-2010-01-19 Brian Weinstein <bweinstein@apple.com>
-
- Reviewed by Tim Hatcher.
-
- When JavaScriptCore calls Debugger::Exception, have it pass a
- hasHandler variable that represents if exception is being handled
- in the same function (not in a parent on the call stack).
-
- This just adds a new parameter, no behavior is changed.
-
- * debugger/Debugger.h:
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::throwException):
-
-2010-01-18 Maciej Stachowiak <mjs@apple.com>
-
- Reviewed by Adam Barth.
-
- Inline functions that are hot in DOM manipulation
- https://bugs.webkit.org/show_bug.cgi?id=33820
-
- (3% speedup on Dromaeo DOM Core tests)
-
- * runtime/WeakGCMap.h:
- (JSC::::get): inline
-
-2010-01-19 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Unreviewed build fix for JIT with RVCT.
-
- Remove IMPORT statement; cti_vm_throw is already defined in JITStubs.h.
- Remove extra ')'.
-
- * jit/JITStubs.cpp:
- (JSC::ctiVMThrowTrampoline):
-
-2010-01-19 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Oliver Hunt.
-
- REGRESSION (52082): Crash on worker thread when reloading http://radnan.public.iastate.edu/procedural/
- https://bugs.webkit.org/show_bug.cgi?id=33826
-
- This bug was caused by a GC-protected object being destroyed early by
- Heap::destroy. Clients of the GC protect APIs (reasonably) expect pointers
- to GC-protected memory to be valid.
-
- The solution is to do two passes of tear-down in Heap::destroy. The first
- pass tears down all unprotected objects. The second pass ASSERTs that all
- previously protected objects are now unprotected, and then tears down
- all perviously protected objects. These two passes simulate the two passes
- that would have been required to free a protected object during normal GC.
-
- * API/JSContextRef.cpp: Removed some ASSERTs that have moved into Heap.
-
- * runtime/Collector.cpp:
- (JSC::Heap::destroy): Moved ASSERTs to here.
- (JSC::Heap::freeBlock): Tidied up the use of didShrink by moving its
- setter to the function that does the shrinking.
- (JSC::Heap::freeBlocks): Implemented above algorithm.
- (JSC::Heap::shrinkBlocks): Tidied up the use of didShrink.
-
-2010-01-19 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (build fix).
-
- Reverting r53455, breaks 2 javascriptcore tests.
-
- * API/JSContextRef.cpp:
- * runtime/Collector.cpp:
- (JSC::Heap::destroy):
- (JSC::Heap::freeBlock):
- (JSC::Heap::freeBlocks):
- (JSC::Heap::shrinkBlocks):
-
-2010-01-18 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (build fix).
-
- Revert r53454, since it causes much sadness in this world.
-
- * runtime/UString.cpp:
- (JSC::UString::spliceSubstringsWithSeparators):
- (JSC::UString::replaceRange):
- * runtime/UStringImpl.cpp:
- (JSC::UStringImpl::baseSharedBuffer):
- (JSC::UStringImpl::sharedBuffer):
- (JSC::UStringImpl::~UStringImpl):
- * runtime/UStringImpl.h:
- (JSC::UntypedPtrAndBitfield::UntypedPtrAndBitfield):
- (JSC::UntypedPtrAndBitfield::asPtr):
- (JSC::UntypedPtrAndBitfield::operator&=):
- (JSC::UntypedPtrAndBitfield::operator|=):
- (JSC::UntypedPtrAndBitfield::operator&):
- (JSC::UStringImpl::create):
- (JSC::UStringImpl::cost):
- (JSC::UStringImpl::isIdentifier):
- (JSC::UStringImpl::setIsIdentifier):
- (JSC::UStringImpl::ref):
- (JSC::UStringImpl::deref):
- (JSC::UStringImpl::checkConsistency):
- (JSC::UStringImpl::UStringImpl):
- (JSC::UStringImpl::bufferOwnerString):
- (JSC::UStringImpl::bufferOwnership):
- (JSC::UStringImpl::isStatic):
- * wtf/StringHashFunctions.h:
- (WTF::stringHash):
-
-2010-01-18 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Oliver Hunt.
-
- REGRESSION (52082): Crash on worker thread when reloading http://radnan.public.iastate.edu/procedural/
- https://bugs.webkit.org/show_bug.cgi?id=33826
-
- This bug was caused by a GC-protected object being destroyed early by
- Heap::destroy. Clients of the GC protect APIs (reasonably) expect pointers
- to GC-protected memory to be valid.
-
- The solution is to do two passes of tear-down in Heap::destroy. The first
- pass tears down all unprotected objects. The second pass ASSERTs that all
- previously protected objects are now unprotected, and then tears down
- all perviously protected objects. These two passes simulate the two passes
- that would have been required to free a protected object during normal GC.
-
- * API/JSContextRef.cpp: Removed some ASSERTs that have moved into Heap.
-
- * runtime/Collector.cpp:
- (JSC::Heap::destroy): Moved ASSERTs to here.
- (JSC::Heap::freeBlock): Tidied up the use of didShrink by moving its
- setter to the function that does the shrinking.
- (JSC::Heap::freeBlocks): Implemented above algorithm.
- (JSC::Heap::shrinkBlocks): Tidied up the use of didShrink.
-
-2010-01-18 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- https://bugs.webkit.org/show_bug.cgi?id=33731
- Remove UntypedPtrAndBitfield from UStringImpl (akin to PtrAndFlags).
-
- This break the OS X Leaks tool. Instead, free up some more bits from the refCount.
-
- * runtime/UStringImpl.cpp:
- (JSC::UStringImpl::sharedBuffer):
- (JSC::UStringImpl::~UStringImpl):
- * runtime/UStringImpl.h:
- (JSC::UStringImpl::cost):
- (JSC::UStringImpl::checkConsistency):
- (JSC::UStringImpl::UStringImpl):
- (JSC::UStringImpl::bufferOwnerString):
- (JSC::UStringImpl::):
- * wtf/StringHashFunctions.h:
- (WTF::stringHash):
-
-2010-01-18 Kent Tamura <tkent@chromium.org>
-
- Reviewed by Darin Adler.
-
- HTMLInputElement::valueAsDate setter support for type=month.
- https://bugs.webkit.org/show_bug.cgi?id=33021
-
- Expose the following functions to be used by WebCore:
- - WTF::msToyear()
- - WTF::dayInYear()
- - WTF::monthFromDayInYear()
- - WTF::dayInMonthFromDayInYear()
-
- * JavaScriptCore.exp:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * wtf/DateMath.cpp:
- (WTF::msToYear): Remove "static inline".
- (WTF::dayInYear): Remove "static inline".
- (WTF::monthFromDayInYear): Remove "static inline".
- (WTF::dayInMonthFromDayInYear): Remove "static inline".
- * wtf/DateMath.h: Declare the above functions.
-
-2010-01-18 Darin Adler <darin@apple.com>
-
- Fix build by reverting the previous change.
-
- * runtime/UString.h: Rolled out the FastAllocBase base class.
- It was making UString larger, and therefore JSString larger,
- and too big for a garbage collection cell.
-
- This raises the unpleasant possibility that many classes became
- larger because we added the FastAllocBase base class. I am
- worried about this, and it needs to be investigated.
-
-2010-01-18 Zoltan Horvath <zoltan@webkit.org>
-
- Reviewed by Darin Adler.
-
- Allow custom memory allocation control for UString class
- https://bugs.webkit.org/show_bug.cgi?id=27831
-
- Inherits the following class from FastAllocBase because it is
- instantiated by 'new' and no need to be copyable:
-
- class name - instantiated at:
- classs UString - JavaScriptCore/runtime/UString.cpp:160
-
- * runtime/UString.h:
-
-2010-01-18 Evan Cheng <evan.cheng@apple.com>
-
- Reviewed by Darin Adler.
-
- Add some ALWAYS_INLINE for key functions not inlined by some versions of GCC.
- rdar://problem/7553780
-
- * runtime/JSObject.h:
- (JSC::JSObject::getPropertySlot): ALWAYS_INLINE both overloads.
- * runtime/JSString.h:
- (JSC::JSString::JSString): ALWAYS_INLINE the version that takes a UString.
- * runtime/UString.h:
- (JSC::operator==): ALWAYS_INLINE the version that compares two UString objects.
-
-2010-01-18 Csaba Osztrogonác <ossy@webkit.org>
-
- Reviewed by Darin Adler.
-
- Delete dftables-xxxxxxxx.in files automatically.
- https://bugs.webkit.org/show_bug.cgi?id=33796
-
- * pcre/dftables: unlink unnecessary temporary file.
-
-2010-01-18 Tor Arne Vestbø <tor.arne.vestbo@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- [Qt] Force qmake to generate a single makefile for DerivedSources.pro
-
- * DerivedSources.pro:
-
-2010-01-18 Csaba Osztrogonác <ossy@webkit.org>
-
- Rubber-stamped by Gustavo Noronha Silva.
-
- Rolling out r53391 and r53392 because of random crashes on buildbots.
- https://bugs.webkit.org/show_bug.cgi?id=33731
-
- * bytecode/CodeBlock.h:
- (JSC::CallLinkInfo::seenOnce):
- (JSC::CallLinkInfo::setSeen):
- (JSC::MethodCallLinkInfo::MethodCallLinkInfo):
- (JSC::MethodCallLinkInfo::seenOnce):
- (JSC::MethodCallLinkInfo::setSeen):
- * jit/JIT.cpp:
- (JSC::JIT::unlinkCall):
- * jit/JITPropertyAccess.cpp:
- (JSC::JIT::patchMethodCallProto):
- * runtime/UString.cpp:
- (JSC::UString::spliceSubstringsWithSeparators):
- (JSC::UString::replaceRange):
- * runtime/UString.h:
- * runtime/UStringImpl.cpp:
- (JSC::UStringImpl::baseSharedBuffer):
- (JSC::UStringImpl::sharedBuffer):
- (JSC::UStringImpl::~UStringImpl):
- * runtime/UStringImpl.h:
- (JSC::UntypedPtrAndBitfield::UntypedPtrAndBitfield):
- (JSC::UntypedPtrAndBitfield::asPtr):
- (JSC::UntypedPtrAndBitfield::operator&=):
- (JSC::UntypedPtrAndBitfield::operator|=):
- (JSC::UntypedPtrAndBitfield::operator&):
- (JSC::UStringImpl::create):
- (JSC::UStringImpl::cost):
- (JSC::UStringImpl::isIdentifier):
- (JSC::UStringImpl::setIsIdentifier):
- (JSC::UStringImpl::ref):
- (JSC::UStringImpl::deref):
- (JSC::UStringImpl::checkConsistency):
- (JSC::UStringImpl::UStringImpl):
- (JSC::UStringImpl::bufferOwnerString):
- (JSC::UStringImpl::bufferOwnership):
- (JSC::UStringImpl::isStatic):
- * wtf/StringHashFunctions.h:
- (WTF::stringHash):
-
-2010-01-18 Simon Hausmann <simon.hausmann@nokia.com>
-
- Reviewed by Kenneth Rohde Christiansen.
-
- Fix the build with strict gcc and RVCT versions: It's not legal to cast a
- pointer to a function to a void* without an intermediate cast to a non-pointer
- type. A cast to a ptrdiff_t inbetween fixes it.
-
- * runtime/JSString.h:
- (JSC::Fiber::JSString):
-
-2010-01-15 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- https://bugs.webkit.org/show_bug.cgi?id=33731
- Remove UntypedPtrAndBitfield from UStringImpl (akin to PtrAndFlags).
-
- This break the OS X Leaks tool. Instead, free up some more bits from the refCount.
-
- * runtime/UStringImpl.cpp:
- (JSC::UStringImpl::sharedBuffer):
- (JSC::UStringImpl::~UStringImpl):
- * runtime/UStringImpl.h:
- (JSC::UStringImpl::cost):
- (JSC::UStringImpl::checkConsistency):
- (JSC::UStringImpl::UStringImpl):
- (JSC::UStringImpl::bufferOwnerString):
- (JSC::UStringImpl::):
- * wtf/StringHashFunctions.h:
- (WTF::stringHash):
-
-2010-01-15 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- https://bugs.webkit.org/show_bug.cgi?id=33731
- Remove uses of PtrAndFlags from JIT data stuctures.
-
- These break the OS X Leaks tool. Free up a bit in CallLinkInfo, and invalid
- permutation of pointer states in MethodCallLinkInfo to represent the removed bits.
-
- * bytecode/CodeBlock.h:
- (JSC::CallLinkInfo::seenOnce):
- (JSC::CallLinkInfo::setSeen):
- (JSC::MethodCallLinkInfo::MethodCallLinkInfo):
- (JSC::MethodCallLinkInfo::seenOnce):
- (JSC::MethodCallLinkInfo::setSeen):
- * jit/JIT.cpp:
- (JSC::JIT::unlinkCall):
- * jit/JITPropertyAccess.cpp:
- (JSC::JIT::patchMethodCallProto):
- * runtime/UString.h:
-
-2010-01-16 Maciej Stachowiak <mjs@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Cache JS string values made from DOM strings (Dromaeo speedup)
- https://bugs.webkit.org/show_bug.cgi?id=33768
- <rdar://problem/7353576>
-
- * runtime/JSString.h:
- (JSC::jsStringWithFinalizer): Added new mechanism for a string to have an optional
- finalizer callback, for the benefit of weak-referencing caches.
- (JSC::):
- (JSC::Fiber::JSString):
- (JSC::Fiber::~JSString):
- * runtime/JSString.cpp:
- (JSC::JSString::resolveRope): Clear fibers so this doesn't look like a string with a finalizer.
- * runtime/WeakGCMap.h: Include "Collector.h" to make this header includable by itself.
-
-2010-01-15 Sam Weinig <sam@webkit.org>
-
- Reviewed by Maciej Stachowiak.
-
- Fix for <rdar://problem/7548432>
- Add ALWAYS_INLINE to jsLess for a 1% speedup on llvm-gcc.
-
- * runtime/Operations.h:
- (JSC::jsLess):
-
-2010-01-14 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Oliver Hunt.
-
- REGRESISON: Google maps buttons not working properly
- https://bugs.webkit.org/show_bug.cgi?id=31871
-
- REGRESSION(r52948): JavaScript exceptions thrown on Google Maps when
- getting directions for a second time
- https://bugs.webkit.org/show_bug.cgi?id=33446
-
- SunSpider and v8 report no change.
-
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::tryCacheGetByID): Update our cached offset in case
- flattening the dictionary changed any of its offsets.
-
- * jit/JITStubs.cpp:
- (JSC::JITThunks::tryCacheGetByID):
- (JSC::DEFINE_STUB_FUNCTION):
- * runtime/Operations.h:
- (JSC::normalizePrototypeChain): ditto
-
-2010-01-14 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- https://bugs.webkit.org/show_bug.cgi?id=33705
- UStringImpl::create() should use internal storage
-
- When creating a UStringImpl copying of a UChar*, we can use an internal buffer,
- by calling UStringImpl::tryCreateUninitialized().
-
- Also, remove duplicate of copyChars from JSString, call UStringImpl's version.
-
- Small (max 0.5%) progression on Sunspidey.
-
- * runtime/JSString.cpp:
- (JSC::JSString::resolveRope):
- * runtime/UStringImpl.h:
- (JSC::UStringImpl::create):
-
-2010-01-14 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Sam Weinig.
-
- Make naming & behaviour of UString[Impl] methods more consistent.
- https://bugs.webkit.org/show_bug.cgi?id=33702
-
- UString::create() creates a copy of the UChar* passed, but UStringImpl::create() assumes
- that it should assume ownership of the provided buffer (with UString::createNonCopying()
- and UStringImpl::createCopying() providing the alternate behaviours). Unify on create()
- taking a copy of the provided buffer. For non-copying cases, use the name 'adopt', and
- make this method take a Vector<UChar>&. For cases where non-copying construction was being
- used, other than from a Vector<UChar>, change the code to allocate the storage along with
- the UStringImpl using UStringImpl::createUninitialized(). (The adopt() method also more
- closely matches that of WebCore::StringImpl).
-
- Also, UString::createUninitialized() and UStringImpl::createUninitialized() have incompatible
- behaviours, in that the UString form sets the provided UChar* to a null or non-null value to
- indicate success or failure, but UStringImpl uses the returned PassRefPtr<UStringImpl> to
- indicate when allocation has failed (potentially leaving the output Char* uninitialized).
- This is also incompatible with WebCore::StringImpl's behaviour, in that
- StringImpl::createUninitialized() will CRASH() if unable to allocate. Some uses of
- createUninitialized() in JSC are unsafe, since they do not test the result for null.
- UStringImpl's indication is preferable, since we may want a successful call to set the result
- buffer to 0 (specifically, StringImpl returns 0 for the buffer where createUninitialized()
- returns the empty string, which seems reasonable to catch bugs early). UString's method
- cannot support UStringImpl's behaviour directly, since it returns an object rather than a
- pointer.
- - remove UString::createUninitialized(), replace with calls to UStringImpl::createUninitialized()
- - create a UStringImpl::tryCreateUninitialized() form UStringImpl::createUninitialized(),
- with current behaviour, make createUninitialized() crash on failure to allocate.
- - make cases in JSC that do not check the result call createUninitialized(), and cases that do
- check call tryCreateUninitialized().
-
- Rename computedHash() to existingHash(), to bring this in line wih WebCore::StringImpl.
-
- * API/JSClassRef.cpp:
- (OpaqueJSClassContextData::OpaqueJSClassContextData):
- * JavaScriptCore.exp:
- * runtime/ArrayPrototype.cpp:
- (JSC::arrayProtoFuncToString):
- * runtime/Identifier.cpp:
- (JSC::CStringTranslator::translate):
- (JSC::UCharBufferTranslator::translate):
- * runtime/JSString.cpp:
- (JSC::JSString::resolveRope):
- * runtime/Lookup.cpp:
- (JSC::HashTable::createTable):
- * runtime/Lookup.h:
- (JSC::HashTable::entry):
- * runtime/StringBuilder.h:
- (JSC::StringBuilder::release):
- * runtime/StringConstructor.cpp:
- (JSC::stringFromCharCodeSlowCase):
- * runtime/StringPrototype.cpp:
- (JSC::substituteBackreferencesSlow):
- (JSC::stringProtoFuncToLowerCase):
- (JSC::stringProtoFuncToUpperCase):
- (JSC::stringProtoFuncFontsize):
- (JSC::stringProtoFuncLink):
- * runtime/Structure.cpp:
- (JSC::Structure::despecifyDictionaryFunction):
- (JSC::Structure::get):
- (JSC::Structure::despecifyFunction):
- (JSC::Structure::put):
- (JSC::Structure::remove):
- (JSC::Structure::insertIntoPropertyMapHashTable):
- (JSC::Structure::checkConsistency):
- * runtime/Structure.h:
- (JSC::Structure::get):
- * runtime/StructureTransitionTable.h:
- (JSC::StructureTransitionTableHash::hash):
- * runtime/UString.cpp:
- (JSC::createRep):
- (JSC::UString::UString):
- (JSC::UString::spliceSubstringsWithSeparators):
- (JSC::UString::replaceRange):
- (JSC::UString::operator=):
- * runtime/UString.h:
- (JSC::UString::adopt):
- (JSC::IdentifierRepHash::hash):
- (JSC::makeString):
- * runtime/UStringImpl.h:
- (JSC::UStringImpl::adopt):
- (JSC::UStringImpl::create):
- (JSC::UStringImpl::createUninitialized):
- (JSC::UStringImpl::tryCreateUninitialized):
- (JSC::UStringImpl::existingHash):
-
-2010-01-13 Kent Hansen <kent.hansen@nokia.com>
-
- Reviewed by Oliver Hunt.
-
- JSON.stringify and JSON.parse needlessly process properties in the prototype chain
- https://bugs.webkit.org/show_bug.cgi?id=33053
-
- * runtime/JSONObject.cpp:
- (JSC::Stringifier::Holder::appendNextProperty):
- (JSC::Walker::walk):
-
-2010-01-13 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (buildfix).
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2010-01-13 Alexey Proskuryakov <ap@apple.com>
-
- Reviewed by Darin Adler.
-
- https://bugs.webkit.org/show_bug.cgi?id=33641
- Assertion failure in Lexer.cpp if input stream ends while in string escape
-
- Test: fast/js/end-in-string-escape.html
-
- * parser/Lexer.cpp: (JSC::Lexer::lex): Bail out quickly on end of stream, not giving the
- assertion a chance to fire.
-
-2010-01-13 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (buildfix).
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2010-01-13 Gavin Barraclough <barraclough@apple.com>
-
- Rubber stamped by Sam Weinig & Darin Adler.
-
- Three quick fixes to UStringImpl.
- - The destroy() method can be switched back to a normal destructor; since we've switched
- the way we protect static strings to be using an odd ref-count the destroy() won't abort.
- - The cost() calculation logic was wrong. If you have multiple JSStrings wrapping substrings
- of a base string, they would each report the full cost of the base string to the heap.
- Instead we should only be reporting once for the base string.
- - Remove the overloaded new operator calling fastMalloc, replace this with a 'using' to pick
- up the implementation from the parent class.
-
- * JavaScriptCore.exp:
- * runtime/UStringImpl.cpp:
- (JSC::UStringImpl::~UStringImpl):
- * runtime/UStringImpl.h:
- (JSC::UStringImpl::cost):
- (JSC::UStringImpl::deref):
-
-2010-01-13 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- [Qt] Split the build process in two different .pro files.
- This allows qmake to be run once all source files are available.
-
- * DerivedSources.pro: Added.
- * JavaScriptCore.pri: Moved source generation to DerivedSources.pro
- * pcre/pcre.pri: Moved source generation to DerivedSources.pro
-
-2010-01-12 Kent Hansen <kent.hansen@nokia.com>
-
- Reviewed by Geoffrey Garen.
-
- [ES5] Implement Object.getOwnPropertyNames
- https://bugs.webkit.org/show_bug.cgi?id=32242
-
- Add an extra argument to getPropertyNames() and getOwnPropertyNames()
- (and all reimplementations thereof) that indicates whether non-enumerable
- properties should be added.
-
- * API/JSCallbackObject.h:
- * API/JSCallbackObjectFunctions.h:
- (JSC::::getOwnPropertyNames):
- * JavaScriptCore.exp:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * debugger/DebuggerActivation.cpp:
- (JSC::DebuggerActivation::getOwnPropertyNames):
- * debugger/DebuggerActivation.h:
- * runtime/Arguments.cpp:
- (JSC::Arguments::getOwnPropertyNames):
- * runtime/Arguments.h:
- * runtime/CommonIdentifiers.h:
- * runtime/JSArray.cpp:
- (JSC::JSArray::getOwnPropertyNames):
- * runtime/JSArray.h:
- * runtime/JSByteArray.cpp:
- (JSC::JSByteArray::getOwnPropertyNames):
- * runtime/JSByteArray.h:
- * runtime/JSFunction.cpp:
- (JSC::JSFunction::getOwnPropertyNames):
- * runtime/JSFunction.h:
- * runtime/JSNotAnObject.cpp:
- (JSC::JSNotAnObject::getOwnPropertyNames):
- * runtime/JSNotAnObject.h:
- * runtime/JSObject.cpp:
- (JSC::getClassPropertyNames):
- (JSC::JSObject::getPropertyNames):
- (JSC::JSObject::getOwnPropertyNames):
- * runtime/JSObject.h:
- * runtime/JSVariableObject.cpp:
- (JSC::JSVariableObject::getOwnPropertyNames):
- * runtime/JSVariableObject.h:
- * runtime/ObjectConstructor.cpp:
- (JSC::ObjectConstructor::ObjectConstructor):
- (JSC::objectConstructorGetOwnPropertyNames):
- * runtime/RegExpMatchesArray.h:
- (JSC::RegExpMatchesArray::getOwnPropertyNames):
- * runtime/StringObject.cpp:
- (JSC::StringObject::getOwnPropertyNames):
- * runtime/StringObject.h:
- * runtime/Structure.cpp: Rename getEnumerablePropertyNames() to getPropertyNames(), which takes an extra argument.
- (JSC::Structure::getPropertyNames):
- * runtime/Structure.h:
- (JSC::):
-
-2010-01-12 Alexey Proskuryakov <ap@apple.com>
-
- Reviewed by Darin Adler.
-
- https://bugs.webkit.org/show_bug.cgi?id=33540
- Make it possible to build in debug mode with assertions disabled
-
- * jit/JITStubs.cpp: (JSC::DEFINE_STUB_FUNCTION):
- * runtime/Identifier.cpp: (JSC::Identifier::checkSameIdentifierTable):
- * wtf/FastMalloc.cpp:
- * wtf/HashTable.h: (WTF::HashTableConstIterator::checkValidity):
- * yarr/RegexCompiler.cpp: (JSC::Yarr::compileRegex):
-
-2009-11-23 Yong Li <yoli@rim.com>
-
- Reviewed by Adam Treat.
-
- Make GIF decoder support down-sampling
- https://bugs.webkit.org/show_bug.cgi?id=31806
-
- * platform/image-decoders/ImageDecoder.cpp:
- (WebCore::ImageDecoder::upperBoundScaledY):
- (WebCore::ImageDecoder::lowerBoundScaledY):
- * platform/image-decoders/ImageDecoder.h:
- (WebCore::RGBA32Buffer::scaledRect):
- (WebCore::RGBA32Buffer::setScaledRect):
- (WebCore::ImageDecoder::scaledSize):
- * platform/image-decoders/gif/GIFImageDecoder.cpp:
- (WebCore::GIFImageDecoder::sizeNowAvailable):
- (WebCore::GIFImageDecoder::initFrameBuffer):
- (WebCore::copyOnePixel):
- (WebCore::GIFImageDecoder::haveDecodedRow):
- (WebCore::GIFImageDecoder::frameComplete):
-
-2010-01-12 Adam Barth <abarth@webkit.org>
-
- Reviewed by Eric Seidel.
-
- ecma/Date/15.9.5.12-1.js fails every night at midnight
- https://bugs.webkit.org/show_bug.cgi?id=28041
-
- Change the test to use a concrete time instead of "now".
-
- * tests/mozilla/ecma/Date/15.9.5.10-1.js:
- * tests/mozilla/ecma/Date/15.9.5.12-1.js:
-
-2010-01-11 Csaba Osztrogonác <ossy@webkit.org>
-
- Reviewed by Ariya Hidayat.
-
- [Qt] Enable JIT and YARR_JIT if (CPU(X86_64) && OS(LINUX) && GCC_VERSION >= 40100)
-
- * wtf/Platform.h:
-
-2010-01-11 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Alexey Proskuryakov.
-
- https://bugs.webkit.org/show_bug.cgi?id=33481
- Uninitialized data members in ArrayStorage
-
- SunSpider reports no change.
-
- * runtime/JSArray.cpp:
- (JSC::JSArray::JSArray): Initialize missing data members in the two cases
- where we don't use fastZeroedMalloc, so it doesn't happen automatically.
-
-2010-01-11 Steve Falkenburg <sfalken@apple.com>
-
- Reviewed by Sam Weinig.
-
- https://bugs.webkit.org/show_bug.cgi?id=33480
-
- Improve debugging reliability for WTF on Windows.
- Store WTF static library's PDB file into a better location.
-
- * JavaScriptCore.vcproj/WTF/WTF.vcproj:
-
-2010-01-11 Steve Falkenburg <sfalken@apple.com>
-
- Windows build fix.
- Remove extraneous entries from def file causing build warning.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2010-01-10 Kent Hansen <kent.hansen@nokia.com>
-
- Reviewed by Darin Adler.
-
- RegExp.prototype.toString returns "//" for empty regular expressions
- https://bugs.webkit.org/show_bug.cgi?id=33319
-
- "//" starts a single-line comment, hence "/(?:)/" should be used, according to ECMA.
-
- * runtime/RegExpPrototype.cpp:
- (JSC::regExpProtoFuncToString):
-
- * tests/mozilla/ecma_2/RegExp/properties-001.js:
- (AddRegExpCases):
- * tests/mozilla/js1_2/regexp/toString.js:
- Update relevant Mozilla tests (Mozilla has had this behavior since November 2003).
-
-2010-01-10 Darin Adler <darin@apple.com>
-
- * tests/mozilla/ecma/Array/15.4.1.1.js: Added property allow-tabs.
- * tests/mozilla/ecma/Array/15.4.1.2.js: Added property allow-tabs.
- * tests/mozilla/ecma/Array/15.4.2.1-1.js: Added property allow-tabs.
- * tests/mozilla/ecma/Array/15.4.2.2-1.js: Added property allow-tabs.
- * tests/mozilla/ecma/Array/15.4.2.2-2.js: Added property allow-tabs.
- * tests/mozilla/ecma/Array/15.4.2.3.js: Added property allow-tabs.
- * tests/mozilla/ecma/Array/15.4.3.2.js: Added property allow-tabs.
- * tests/mozilla/ecma/Array/15.4.3.js: Added property allow-tabs.
- * tests/mozilla/ecma/Array/15.4.4.1.js: Added property allow-tabs.
- * tests/mozilla/ecma/Array/15.4.4.js: Added property allow-tabs.
- * tests/mozilla/ecma/LexicalConventions/7.7.4.js: Added property allow-tabs.
- * tests/mozilla/ecma/Math/15.8.2.13.js: Added property allow-tabs.
- * tests/mozilla/ecma/Math/15.8.2.16.js: Added property allow-tabs.
- * tests/mozilla/ecma/Math/15.8.2.18.js: Added property allow-tabs.
- * tests/mozilla/ecma/Math/15.8.2.2.js: Added property allow-tabs.
- * tests/mozilla/ecma/Math/15.8.2.4.js: Added property allow-tabs.
- * tests/mozilla/ecma/Math/15.8.2.5.js: Added property allow-tabs.
- * tests/mozilla/ecma/Math/15.8.2.7.js: Added property allow-tabs.
- * tests/mozilla/ecma/String/15.5.1.js: Added property allow-tabs.
- * tests/mozilla/ecma/String/15.5.2.js: Added property allow-tabs.
- * tests/mozilla/ecma/String/15.5.3.1-3.js: Added property allow-tabs.
- * tests/mozilla/ecma/String/15.5.3.1-4.js: Added property allow-tabs.
- * tests/mozilla/ecma/String/15.5.3.js: Added property allow-tabs.
- * tests/mozilla/ecma/TypeConversion/9.5-2.js: Added property allow-tabs.
- * tests/mozilla/ecma/jsref.js: Modified property allow-tabs.
- * tests/mozilla/ecma/shell.js: Modified property allow-tabs.
- * tests/mozilla/ecma_2/LexicalConventions/keywords-001.js: Added property allow-tabs.
- * tests/mozilla/ecma_2/RegExp/exec-001.js: Added property allow-tabs.
- * tests/mozilla/ecma_2/String/match-004.js: Added property allow-tabs.
- * tests/mozilla/ecma_2/String/replace-001.js: Added property allow-tabs.
- * tests/mozilla/ecma_2/String/split-002.js: Added property allow-tabs.
- * tests/mozilla/ecma_2/jsref.js: Modified property allow-tabs.
- * tests/mozilla/ecma_2/shell.js: Added property allow-tabs.
- * tests/mozilla/ecma_3/Date/shell.js: Modified property allow-tabs.
- * tests/mozilla/ecma_3/Exceptions/regress-181654.js: Added property allow-tabs.
- * tests/mozilla/ecma_3/RegExp/regress-209067.js: Added property allow-tabs.
- * tests/mozilla/ecma_3/RegExp/regress-85721.js: Added property allow-tabs.
- * tests/mozilla/importList.html: Added property allow-tabs.
- * tests/mozilla/js1_1/shell.js: Added property allow-tabs.
- * tests/mozilla/js1_2/Array/general1.js: Added property allow-tabs.
- * tests/mozilla/js1_2/Array/general2.js: Added property allow-tabs.
- * tests/mozilla/js1_2/Array/slice.js: Added property allow-tabs.
- * tests/mozilla/js1_2/Array/splice1.js: Added property allow-tabs.
- * tests/mozilla/js1_2/Array/splice2.js: Added property allow-tabs.
- * tests/mozilla/js1_2/Objects/toString-001.js: Added property allow-tabs.
- * tests/mozilla/js1_2/String/charCodeAt.js: Added property allow-tabs.
- * tests/mozilla/js1_2/String/concat.js: Modified property allow-tabs.
- * tests/mozilla/js1_2/String/match.js: Added property allow-tabs.
- * tests/mozilla/js1_2/String/slice.js: Added property allow-tabs.
- * tests/mozilla/js1_2/function/Function_object.js: Added property allow-tabs.
- * tests/mozilla/js1_2/function/Number.js: Modified property allow-tabs.
- * tests/mozilla/js1_2/function/String.js: Modified property allow-tabs.
- * tests/mozilla/js1_2/function/nesting.js: Added property allow-tabs.
- * tests/mozilla/js1_2/function/regexparg-1.js: Added property allow-tabs.
- * tests/mozilla/js1_2/function/regexparg-2-n.js: Added property allow-tabs.
- * tests/mozilla/js1_2/jsref.js: Added property allow-tabs.
- * tests/mozilla/js1_2/operator/equality.js: Added property allow-tabs.
- * tests/mozilla/js1_2/operator/strictEquality.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/RegExp_dollar_number.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/RegExp_input.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/RegExp_input_as_array.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/RegExp_lastIndex.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/RegExp_lastMatch.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/RegExp_lastMatch_as_array.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/RegExp_lastParen.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/RegExp_lastParen_as_array.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/RegExp_leftContext.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/RegExp_leftContext_as_array.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/RegExp_multiline.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/RegExp_multiline_as_array.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/RegExp_object.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/RegExp_rightContext.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/RegExp_rightContext_as_array.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/alphanumeric.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/asterisk.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/backslash.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/backspace.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/beginLine.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/character_class.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/compile.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/control_characters.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/digit.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/dot.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/endLine.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/everything.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/exec.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/flags.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/global.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/hexadecimal.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/ignoreCase.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/interval.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/octal.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/parentheses.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/plus.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/question_mark.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/simple_form.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/source.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/special_characters.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/string_replace.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/string_search.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/string_split.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/test.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/toString.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/vertical_bar.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/whitespace.js: Added property allow-tabs.
- * tests/mozilla/js1_2/regexp/word_boundary.js: Added property allow-tabs.
- * tests/mozilla/js1_2/shell.js: Added property allow-tabs.
- * tests/mozilla/js1_2/statements/break.js: Added property allow-tabs.
- * tests/mozilla/js1_2/statements/continue.js: Added property allow-tabs.
- * tests/mozilla/js1_2/statements/do_while.js: Added property allow-tabs.
- * tests/mozilla/js1_2/statements/switch.js: Added property allow-tabs.
- * tests/mozilla/js1_2/statements/switch2.js: Added property allow-tabs.
- * tests/mozilla/js1_3/shell.js: Added property allow-tabs.
- * tests/mozilla/js1_4/shell.js: Added property allow-tabs.
- * tests/mozilla/js1_5/Regress/regress-111557.js: Added property allow-tabs.
- * tests/mozilla/js1_5/Regress/regress-216320.js: Added property allow-tabs.
- * tests/mozilla/menuhead.html: Added property allow-tabs.
- * tests/mozilla/mklistpage.pl: Added property allow-tabs.
- * tests/mozilla/runtests.pl: Added property allow-tabs.
-
-2010-01-08 Daniel Bates <dbates@webkit.org>
-
- Reviewed by Adam Barth.
-
- https://bugs.webkit.org/show_bug.cgi?id=33417
-
- Cleans up style errors exposed by the patch for bug #33198.
- Moreover, fixes all "Weird number of spaces at line-start. Are you using a 4-space indent?"
- errors reported by check-webkit-style.
-
- No functionality was changed. So, no new tests.
-
- * wtf/Platform.h:
-
-2010-01-08 Kent Hansen <kent.hansen@nokia.com>
-
- Reviewed by Eric Seidel.
-
- Don't store RegExp flags string representation
- https://bugs.webkit.org/show_bug.cgi?id=33321
-
- It's unused; the string representation is reconstructed from flags.
-
- * runtime/RegExp.cpp:
- (JSC::RegExp::RegExp):
- * runtime/RegExp.h:
-
-2010-01-08 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Memory use grows grows possibly unbounded in this JavaScript Array test case
- https://bugs.webkit.org/show_bug.cgi?id=31675
-
- This fixes one observed bug in this test case, which is that
- arrays don't report extra cost for the sparse value maps.
-
- SunSpider reports a small speedup.
-
- * runtime/JSArray.cpp:
- (JSC::JSArray::putSlowCase): Report extra memory cost for
- the sparse value map.
- * runtime/JSArray.h:
-
-2010-01-08 Yong Li <yoli@rim.com>
-
- Reviewed by Darin Adler.
-
- Remove unnecessary #include from FastMalloc.cpp
- https://bugs.webkit.org/show_bug.cgi?id=33393
-
- * wtf/FastMalloc.cpp:
-
-2010-01-08 Eric Seidel <eric@webkit.org>
-
- No review, rolling out r52983.
- http://trac.webkit.org/changeset/52983
- https://bugs.webkit.org/show_bug.cgi?id=33321
-
- Broke 59 JavaScriptCore tests. I don't think Kent knew about
- run-javascriptcore-tests. Sadly neither does the commit-bot,
- yet.
-
- * runtime/RegExp.cpp:
- (JSC::RegExp::RegExp):
- * runtime/RegExp.h:
- (JSC::RegExp::flags):
-
-2010-01-08 Eric Seidel <eric@webkit.org>
-
- No review, rolling out r52981.
- http://trac.webkit.org/changeset/52981
- https://bugs.webkit.org/show_bug.cgi?id=33319
-
- Caused two JS tests to start failing:
- ecma_2/RegExp/properties-001.js and js1_2/regexp/toString.js
-
- * runtime/RegExpPrototype.cpp:
- (JSC::regExpProtoFuncToString):
-
-2010-01-08 Kent Hansen <kent.hansen@nokia.com>
-
- Reviewed by Darin Adler.
-
- Don't store RegExp flags string representation
- https://bugs.webkit.org/show_bug.cgi?id=33321
-
- It's unused; the string representation is reconstructed from flags.
-
- * runtime/RegExp.cpp:
- (JSC::RegExp::RegExp):
- * runtime/RegExp.h:
-
-2010-01-08 Kent Hansen <kent.hansen@nokia.com>
-
- Reviewed by Darin Adler.
-
- RegExp.prototype.toString returns "//" for empty regular expressions
- https://bugs.webkit.org/show_bug.cgi?id=33319
-
- "//" starts a single-line comment, hence "/(?:)/" should be used, according to ECMA.
-
- * runtime/RegExpPrototype.cpp:
- (JSC::regExpProtoFuncToString):
-
-2010-01-08 Norbert Leser <norbert.leser@nokia.com>
-
- Reviewed by Darin Adler.
-
- RVCT compiler with "-Otime -O3" optimization tries to optimize out
- inline new'ed pointers that are passed as arguments.
- Proposed patch assigns new'ed pointer explicitly outside function call.
-
- https://bugs.webkit.org/show_bug.cgi?id=33084
-
- * API/JSClassRef.cpp:
- (OpaqueJSClass::OpaqueJSClass):
- (OpaqueJSClassContextData::OpaqueJSClassContextData):
-
-2010-01-08 Gabor Loki <loki@webkit.org>
-
- Reviewed by Gavin Barraclough.
-
- Remove an unnecessary cacheFlush from ARM_TRADITIONAL JIT
- https://bugs.webkit.org/show_bug.cgi?id=33203
-
- * assembler/ARMAssembler.cpp: Remove obsolete linkBranch function.
- (JSC::ARMAssembler::executableCopy): Inline a clean linkBranch code.
- * assembler/ARMAssembler.h:
- (JSC::ARMAssembler::getLdrImmAddress): Use inline function.
- (JSC::ARMAssembler::getLdrImmAddressOnPool): Ditto.
- (JSC::ARMAssembler::patchPointerInternal): Remove an unnecessary cacheFlush.
- (JSC::ARMAssembler::linkJump): Use patchPointerInternal instead of linkBranch.
- (JSC::ARMAssembler::linkCall): Ditto.
- (JSC::ARMAssembler::relinkCall): Ditto.
-
-2010-01-07 Gabor Loki <loki@webkit.org>
-
- Reviewed by Gavin Barraclough.
-
- Build fix for JSVALUE32 when ENABLE_JIT_OPTIMIZE* are disabled
- https://bugs.webkit.org/show_bug.cgi?id=33311
-
- Move compileGetDirectOffset function to common part of JSVALUE32
-
- * jit/JITPropertyAccess.cpp:
- (JSC::JIT::compileGetDirectOffset):
-
-2010-01-07 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Maciej Stachowiak.
-
- Allow call sites to determine if ASSERT_* and LOG_* macros are operational
- https://bugs.webkit.org/show_bug.cgi?id=33020
-
- * wtf/Assertions.h: Set ASSERT_MSG_DISABLED, FATAL_DISABLED,
- ERROR_DISABLED, LOG_DISABLED to 1 if the compiler does not support
- variadic macros. Refactor for better readibility.
-
-2010-01-07 Daniel Bates <dbates@rim.com>
-
- Reviewed by Eric Seidel.
-
- https://bugs.webkit.org/show_bug.cgi?id=32987
-
- Added ENABLE_XHTMLMP flag. Disabled by default.
-
- * Configurations/FeatureDefines.xcconfig:
-
-2010-01-07 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Gavin Barraclough.
-
- [Symbian] Port ARM traditional JIT Trampolines to RVCT
- https://bugs.webkit.org/show_bug.cgi?id=30552
-
- Take the GCC implementation and mechanically convert
- it to RVCT syntax.
-
- Use 'bx rX' instead of 'mov pc, rX' when it is available.
-
- Developed in cooperation with Iain Campbell and Gabor Loki.
-
- * JavaScriptCore.pri: Extra step to generate RVCT stubs. The
- script generation intentionally executed all the time not just
- for RVCT targets.
-
- * create_rvct_stubs: Added. Perl script to expand precompiler macros
- for RVCT assembler - the template is defined in JITStubs.cpp.
-
- * jit/JITStubs.cpp:
- (JSC::ctiTrampoline):
- (JSC::ctiVMThrowTrampoline):
- (JSC::ctiOpThrowNotCaught):
-
-2010-01-07 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Fix a crash seen on the buildbots.
-
- * runtime/JSGlobalObject.cpp:
- (JSC::JSGlobalObject::init): Disable specific function tracking here,
- instead of in WebCore, to ensure that the disabling happens before a
- specific function can be registered.
-
-2010-01-07 Alexey Proskuryakov <ap@apple.com>
-
- Mac build fix.
-
- * JavaScriptCore.exp: Export new JSGlobalData static data members.
-
-2010-01-07 Alexey Proskuryakov <ap@apple.com>
-
- Reviewed by Geoffrey Garen.
-
- https://bugs.webkit.org/show_bug.cgi?id=33057
- REGRESSION(r49365): typeof(xhr.responseText) != "string" in Windows
-
- <rdar://problem/7296920> REGRESSION: WebKit fails to start PeaceKeeper benchmark
-
- Test: fast/js/webcore-string-comparison.html
-
- In r49365, some code was moved from JSString.cpp to JSString.h, and as a result, WebCore
- got a way to directly instantiate JSStrings over DLL borders. Since vftable for JSString was
- not exported, objects created from WebCore got a different vptr, and JavaScriptCore
- optimizations that relied on vptr of all JSString objects being equal failed.
-
- * config.h: Added a JS_EXPORTCLASS macro for exporting classes. It's currently the same as
- JS_EXPORTDATA, but it clearly needed a new name.
-
- * runtime/InitializeThreading.cpp:
- (JSC::initializeThreadingOnce):
- * runtime/JSGlobalData.cpp:
- (JSC::JSGlobalData::storeVPtrs):
- (JSC::JSGlobalData::JSGlobalData):
- (JSC::JSGlobalData::createNonDefault):
- (JSC::JSGlobalData::create):
- (JSC::JSGlobalData::sharedInstance):
- * runtime/JSGlobalData.h:
- Store vptrs just once, no need to repeatedly pick and copy them. This makes it possible to
- assert vptr correctness in object destructors (which don't have access to JSGlobalData,
- and even Heap::heap(this) will fail for fake objects created from storeVPtrs()).
-
- * runtime/JSArray.cpp: (JSC::JSArray::~JSArray): Assert that vptr is what we expect it to be.
- It's important to assert in destructor, because MSVC changes the vptr after constructor
- is invoked.
- * runtime/JSByteArray.cpp: (JSC::JSByteArray::~JSByteArray): Ditto.
- * runtime/JSByteArray.h: Ditto.
- * runtime/JSFunction.h: Ditto.
- * runtime/JSFunction.cpp: (JSC::JSFunction::~JSFunction): Ditto.
-
- * runtime/JSCell.h: (JSC::JSCell::setVPtr): Added a method to substitute vptr for another
- one.
-
- * runtime/JSString.h: Export JSString class together with its vftable, and tell other
- libraries tp import it. This is needed on platforms that have a separate JavaScriptCore
- dynamic library - and on Mac, we already did the export via JavaScriptCore.exp.
- (JSC::JSString::~JSString): Assert tha vptr is what we expect it to be.
- (JSC::fixupVPtr): Store a previously saved primary vftable pointer (do nothing if building
- JavaScriptCore itself).
- (JSC::jsSingleCharacterString): Call fixupVPtr in case this is call across DLL boundary.
- (JSC::jsSingleCharacterSubstring): Ditto.
- (JSC::jsNontrivialString): Ditto.
- (JSC::jsString): Ditto.
- (JSC::jsSubstring): Ditto.
- (JSC::jsOwnedString): Ditto.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Export the new static
- JSGlobalData members that are used in WebCore via inline functions.
-
-2010-01-07 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Safari memory usage skyrockets using new Google AdWords interface
- https://bugs.webkit.org/show_bug.cgi?id=33343
-
- The memory use was caused by the global object creating too many structures
- as it thrashed between different specific functions.
-
- * runtime/Structure.cpp:
- (JSC::Structure::Structure):
- (JSC::Structure::addPropertyTransition):
- (JSC::Structure::changePrototypeTransition):
- (JSC::Structure::despecifyFunctionTransition):
- (JSC::Structure::addAnonymousSlotsTransition):
- (JSC::Structure::getterSetterTransition):
- (JSC::Structure::toDictionaryTransition):
- (JSC::Structure::addPropertyWithoutTransition):
- (JSC::Structure::despecifyAllFunctions):
- * runtime/Structure.h:
- (JSC::Structure::disableSpecificFunctionTracking): Track a thrash count
- for specific functions. Disable specific function tracking once the
- thrash count has been hit.
-
-2010-01-07 Csaba Osztrogonác <ossy@webkit.org>
-
- Reviewed by Simon Hausmann.
-
- [Qt] Enable JIT in debug mode on win32 after r51141 fixed the crashes.
-
- * JavaScriptCore.pri:
-
-2010-01-07 Zoltan Horvath <zoltan@webkit.org>
-
- Reviewed by Holger Freyther.
-
- [Mac] Build fix when FAST_MALLOC_MATCH_VALIDATION=1
- https://bugs.webkit.org/show_bug.cgi?id=33312
-
- Using of operator += cause compile error on Mac, so it is changed to
- "= static_cast<AllocAlignmentInteger*>(old_ptr) + 1".
-
- * wtf/FastMalloc.cpp:
- (WTF::TCMallocStats::realloc):
-
-2010-01-07 Zoltan Horvath <zoltan@webkit.org>
-
- Reviewed by Holger Freyther.
-
- [Qt] Build fix when FAST_MALLOC_MATCH_VALIDATION=1
- https://bugs.webkit.org/show_bug.cgi?id=33312
-
- Remove pByte (committed in r42344 from #20422), because pByte doesn't
- exist and it is unnecessary.
-
- * wtf/FastMalloc.cpp:
- (WTF::TCMallocStats::realloc):
-
-2010-01-06 Gavin Barraclough <barraclough@apple.com>
-
- QT build fix.
-
- * runtime/Identifier.cpp:
- (JSC::createIdentifierTableSpecific):
-
-2010-01-06 Gavin Barraclough <barraclough@apple.com>
-
- Windows build fix part I.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2010-01-06 Dan Bernstein <mitz@apple.com>
-
- Build fix
-
- * runtime/Identifier.cpp:
- (JSC::createIdentifierTableSpecificCallback):
-
-2010-01-05 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Sam Weinig.
-
- https://bugs.webkit.org/show_bug.cgi?id=33236
- Remove m_identifierTable pointer from UString
-
- Currently every string holds a pointer so that during destruction,
- if a string has been used as an identifier, it can remove itself
- from the table. By instead accessing the identifierTable via a
- thread specific tracking the table associated with the current
- globaldata, we can save the memory cost of this pointer.
-
- * API/APIShims.h:
- (JSC::APIEntryShimWithoutLock::APIEntryShimWithoutLock):
- (JSC::APIEntryShimWithoutLock::~APIEntryShimWithoutLock):
- (JSC::APICallbackShim::APICallbackShim):
- (JSC::APICallbackShim::~APICallbackShim):
-
- - change the API shims to track the identifierTable of the current JSGlobalData.
-
- * API/JSContextRef.cpp:
- (JSContextGroupCreate):
-
- - update creation of JSGlobalData for API usage to use new create method.
- - fix shim instanciation bug in JSGlobalContextCreateInGroup.
-
+ (JSC::::call):
* JavaScriptCore.exp:
- * runtime/Completion.cpp:
- (JSC::checkSyntax):
- (JSC::evaluate):
-
- - add asserts to check the identifierTable is being tracked correctly.
-
- * runtime/Identifier.cpp:
- (JSC::IdentifierTable::~IdentifierTable):
- (JSC::IdentifierTable::add):
- (JSC::Identifier::remove):
- (JSC::Identifier::checkSameIdentifierTable):
- (JSC::createIdentifierTableSpecificCallback):
- (JSC::createIdentifierTableSpecific):
- (JSC::createDefaultDataSpecific):
-
- - Use currentIdentifierTable() instead of UStringImpl::m_identifierTable.
- - Define methods to access the thread specific identifier tables.
-
- * runtime/Identifier.h:
- (JSC::ThreadIdentifierTableData::ThreadIdentifierTableData):
- (JSC::defaultIdentifierTable):
- (JSC::setDefaultIdentifierTable):
- (JSC::currentIdentifierTable):
- (JSC::setCurrentIdentifierTable):
- (JSC::resetCurrentIdentifierTable):
-
- - Declare methods to access the thread specific identifier tables.
-
- * runtime/JSGlobalData.cpp:
- (JSC::JSGlobalData::createNonDefault):
- (JSC::JSGlobalData::create):
- (JSC::JSGlobalData::sharedInstance):
-
- - creation of JSGlobalData objects, other than for API usage, associate themselves with the current thread.
-
- * runtime/JSGlobalData.h:
- * runtime/UStringImpl.cpp:
- (JSC::UStringImpl::destroy):
-
- - destroy() method should be using isIdentifier().
-
- * runtime/UStringImpl.h:
- (JSC::UStringImpl::isIdentifier):
- (JSC::UStringImpl::setIsIdentifier):
- (JSC::UStringImpl::checkConsistency):
- (JSC::UStringImpl::UStringImpl):
-
- - replace m_identifierTable with a single m_isIdentifier bit.
-
- * wtf/StringHashFunctions.h:
- (WTF::stringHash):
-
- - change string hash result from 32-bit to 31-bit, to free a bit in UStringImpl for m_isIdentifier.
-
-2009-12-25 Patrick Gansterer <paroga@paroga.com>
-
- Reviewed by Eric Seidel.
-
- Buildfix for WinCE + style fixes.
- https://bugs.webkit.org/show_bug.cgi?id=32939
-
* jsc.cpp:
(functionPrint):
+ (functionDebug):
+ (functionGC):
+ (functionVersion):
+ (functionRun):
+ (functionLoad):
+ (functionCheckSyntax):
+ (functionSetSamplingFlags):
+ (functionClearSamplingFlags):
+ (functionReadline):
(functionQuit):
- (parseArguments):
- (fillBufferWithContentsOfFile):
-
-2010-01-05 Patrick Gansterer <paroga@paroga.com>
-
- Reviewed by Eric Seidel.
-
- WinCE buildfix after r52791 (renamed PLATFORM(WINCE) to OS(WINCE)).
- https://bugs.webkit.org/show_bug.cgi?id=33205
-
- * jit/ExecutableAllocator.h:
-
-2010-01-05 Patrick Gansterer <paroga@paroga.com>
-
- Reviewed by Darin Adler.
-
- Added compiler error for unsupported platforms.
- https://bugs.webkit.org/show_bug.cgi?id=33112
-
- * jit/JITStubs.cpp:
-
-2010-01-05 Gabor Loki <loki@webkit.org>
-
- Reviewed by Maciej Stachowiak.
-
- Follow r52729 in ARMAssembler.
- https://bugs.webkit.org/show_bug.cgi?id=33208
-
- Use WTF_ARM_ARCH_AT_LEAST instead of ARM_ARCH_VERSION
-
- * assembler/ARMAssembler.cpp:
- (JSC::ARMAssembler::encodeComplexImm): Move tmp declaration to ARMv7
- * assembler/ARMAssembler.h:
- (JSC::ARMAssembler::):
- (JSC::ARMAssembler::bkpt):
-
-2010-01-05 Maciej Stachowiak <mjs@apple.com>
-
- Unreviewed build fix for Gtk+
-
- Don't use // comments in Platform.h, at least some of them seem to make the version of GCC
- used on the Gtk buildbot unhappy.
-
- * wtf/Platform.h:
-
-2010-01-04 Maciej Stachowiak <mjs@apple.com>
-
- Reviewed by Darin Fisher.
-
- Reorganize, document and rename OS() platform macros.
- https://bugs.webkit.org/show_bug.cgi?id=33198
-
- * wtf/Platform.h: Rename, reorganize and document OS() macros.
-
- Adapt to name changes. Also fixed a few incorrect OS checks.
-
- * API/JSContextRef.cpp:
- * assembler/MacroAssemblerARM.cpp:
- (JSC::isVFPPresent):
- * assembler/MacroAssemblerX86Common.h:
- * bytecode/SamplingTool.cpp:
- * config.h:
- * interpreter/RegisterFile.cpp:
- (JSC::RegisterFile::~RegisterFile):
- * interpreter/RegisterFile.h:
- (JSC::RegisterFile::RegisterFile):
- (JSC::RegisterFile::grow):
- * jit/ExecutableAllocator.h:
- * jit/ExecutableAllocatorFixedVMPool.cpp:
- * jit/ExecutableAllocatorPosix.cpp:
- * jit/ExecutableAllocatorSymbian.cpp:
- * jit/ExecutableAllocatorWin.cpp:
- * jit/JITOpcodes.cpp:
- (JSC::JIT::privateCompileCTIMachineTrampolines):
- * jit/JITStubs.cpp:
- * jsc.cpp:
- (main):
- * parser/Grammar.y:
- * profiler/ProfileNode.cpp:
- (JSC::getCount):
- * runtime/Collector.cpp:
- (JSC::Heap::Heap):
- (JSC::Heap::allocateBlock):
- (JSC::Heap::freeBlockPtr):
- (JSC::currentThreadStackBase):
- (JSC::getCurrentPlatformThread):
- (JSC::suspendThread):
- (JSC::resumeThread):
- (JSC::getPlatformThreadRegisters):
- (JSC::otherThreadStackPointer):
- * runtime/Collector.h:
- * runtime/DateConstructor.cpp:
- * runtime/DatePrototype.cpp:
- (JSC::formatLocaleDate):
- * runtime/InitializeThreading.cpp:
- (JSC::initializeThreading):
- * runtime/MarkStack.h:
- (JSC::MarkStack::MarkStackArray::shrinkAllocation):
- * runtime/MarkStackPosix.cpp:
- * runtime/MarkStackSymbian.cpp:
- * runtime/MarkStackWin.cpp:
- * runtime/StringPrototype.cpp:
- (JSC::stringProtoFuncLastIndexOf):
- * runtime/TimeoutChecker.cpp:
- (JSC::getCPUTime):
- * runtime/UString.cpp:
- (JSC::UString::from):
- * wtf/Assertions.cpp:
- * wtf/Assertions.h:
- * wtf/CurrentTime.cpp:
- (WTF::lowResUTCTime):
- * wtf/CurrentTime.h:
- (WTF::getLocalTime):
- * wtf/DateMath.cpp:
- * wtf/FastMalloc.cpp:
- (WTF::TCMalloc_ThreadCache::InitModule):
- (WTF::TCMallocStats::):
- * wtf/FastMalloc.h:
- * wtf/MathExtras.h:
- * wtf/RandomNumber.cpp:
- (WTF::randomNumber):
- * wtf/RandomNumberSeed.h:
- (WTF::initializeRandomNumberGenerator):
- * wtf/StringExtras.h:
- * wtf/TCSpinLock.h:
- (TCMalloc_SpinLock::Unlock):
- (TCMalloc_SlowLock):
- * wtf/TCSystemAlloc.cpp:
- * wtf/ThreadSpecific.h:
- (WTF::::destroy):
- * wtf/Threading.h:
- * wtf/ThreadingPthreads.cpp:
- (WTF::initializeThreading):
- (WTF::isMainThread):
- * wtf/ThreadingWin.cpp:
- (WTF::wtfThreadEntryPoint):
- (WTF::createThreadInternal):
- * wtf/VMTags.h:
- * wtf/unicode/icu/CollatorICU.cpp:
- (WTF::Collator::userDefault):
- * wtf/win/MainThreadWin.cpp:
- (WTF::initializeMainThreadPlatform):
-
-2010-01-04 Gustavo Noronha Silva <gns@gnome.org>
-
- Add missing files to the build system - make distcheck build fix.
-
- * GNUmakefile.am:
-
-2010-01-04 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Sam Weinig, additional coding by Mark Rowe.
-
- https://bugs.webkit.org/show_bug.cgi?id=33163
- Add string hashing functions to WTF.
- Use WTF's string hashing functions from UStringImpl.
-
- * GNUmakefile.am:
- * JavaScriptCore.exp:
- * JavaScriptCore.gypi:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * runtime/UStringImpl.cpp:
- * runtime/UStringImpl.h:
- (JSC::UStringImpl::computeHash):
- * wtf/HashFunctions.h:
- * wtf/StringHashFunctions.h: Added.
- (WTF::stringHash):
-
-2010-01-04 Dmitry Titov <dimich@chromium.org>
-
- Not reviewed, attempt to fix ARM bulid.
-
- * wtf/Platform.h:
-
-2010-01-04 Gavin Barraclough <barraclough@apple.com>
-
- Rubber stamped by Geoff Garen.
-
- Add an 'isIdentifier' to UStringImpl, use this where appropriate
- (where previously 'identifierTable' was being tested).
-
- * API/JSClassRef.cpp:
- (OpaqueJSClass::~OpaqueJSClass):
- (OpaqueJSClassContextData::OpaqueJSClassContextData):
- * runtime/Identifier.cpp:
- (JSC::Identifier::addSlowCase):
- * runtime/Identifier.h:
- (JSC::Identifier::add):
- * runtime/PropertyNameArray.cpp:
- (JSC::PropertyNameArray::add):
- * runtime/UStringImpl.h:
- (JSC::UStringImpl::isIdentifier):
-
-2010-01-04 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Sam "Shimmey Shimmey" Weinig.
-
- https://bugs.webkit.org/show_bug.cgi?id=33158
- Refactor JSC API entry/exit to use RAII instead of copy/pasting code.
- Make it easier to change set of actions taken when passing across the API boundary.
-
- * API/APIShims.h: Added.
- (JSC::APIEntryShimWithoutLock::APIEntryShimWithoutLock):
- (JSC::APIEntryShimWithoutLock::~APIEntryShimWithoutLock):
- (JSC::APIEntryShim::APIEntryShim):
- (JSC::APICallbackShim::APICallbackShim):
- (JSC::APICallbackShim::~APICallbackShim):
- * API/JSBase.cpp:
- (JSEvaluateScript):
- (JSCheckScriptSyntax):
- (JSGarbageCollect):
- (JSReportExtraMemoryCost):
- * API/JSCallbackConstructor.cpp:
- (JSC::constructJSCallback):
- * API/JSCallbackFunction.cpp:
- (JSC::JSCallbackFunction::call):
- * API/JSCallbackObjectFunctions.h:
- (JSC::::init):
- (JSC::::getOwnPropertySlot):
- (JSC::::put):
- (JSC::::deleteProperty):
- (JSC::::construct):
- (JSC::::hasInstance):
- (JSC::::call):
- (JSC::::getOwnPropertyNames):
- (JSC::::toNumber):
- (JSC::::toString):
- (JSC::::staticValueGetter):
- (JSC::::callbackGetter):
- * API/JSContextRef.cpp:
- * API/JSObjectRef.cpp:
- (JSObjectMake):
- (JSObjectMakeFunctionWithCallback):
- (JSObjectMakeConstructor):
- (JSObjectMakeFunction):
- (JSObjectMakeArray):
- (JSObjectMakeDate):
- (JSObjectMakeError):
- (JSObjectMakeRegExp):
- (JSObjectGetPrototype):
- (JSObjectSetPrototype):
- (JSObjectHasProperty):
- (JSObjectGetProperty):
- (JSObjectSetProperty):
- (JSObjectGetPropertyAtIndex):
- (JSObjectSetPropertyAtIndex):
- (JSObjectDeleteProperty):
- (JSObjectCallAsFunction):
- (JSObjectCallAsConstructor):
- (JSObjectCopyPropertyNames):
- (JSPropertyNameArrayRelease):
- (JSPropertyNameAccumulatorAddName):
- * API/JSValueRef.cpp:
- (JSValueGetType):
- (JSValueIsUndefined):
- (JSValueIsNull):
- (JSValueIsBoolean):
- (JSValueIsNumber):
- (JSValueIsString):
- (JSValueIsObject):
- (JSValueIsObjectOfClass):
- (JSValueIsEqual):
- (JSValueIsStrictEqual):
- (JSValueIsInstanceOfConstructor):
- (JSValueMakeUndefined):
- (JSValueMakeNull):
- (JSValueMakeBoolean):
- (JSValueMakeNumber):
- (JSValueMakeString):
- (JSValueToBoolean):
- (JSValueToNumber):
- (JSValueToStringCopy):
- (JSValueToObject):
- (JSValueProtect):
- (JSValueUnprotect):
- * JavaScriptCore.xcodeproj/project.pbxproj:
-
-2010-01-04 Dan Bernstein <mitz@apple.com>
-
- Reviewed by Ada Chan and Mark Rowe.
-
- Updated copyright string
-
- * Info.plist:
- * JavaScriptCore.vcproj/JavaScriptCore.resources/Info.plist:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.rc:
-
-2010-01-04 Adam Roben <aroben@apple.com>
-
- No review, rolling out r52741.
- http://trac.webkit.org/changeset/52741
- https://bugs.webkit.org/show_bug.cgi?id=33056
-
- * wtf/AlwaysInline.h:
-
-2010-01-04 Patrick Gansterer <paroga@paroga.com>
-
- Reviewed by Darin Adler.
-
- Add cacheFlush support for WinCE
- https://bugs.webkit.org/show_bug.cgi?id=33110
-
- * jit/ExecutableAllocator.h:
- (JSC::ExecutableAllocator::cacheFlush):
-
-2010-01-04 Patrick Gansterer <paroga@paroga.com>
-
- Reviewed by Adam Roben.
-
- Implement NO_RETURN for COMPILER(MSVC).
- https://bugs.webkit.org/show_bug.cgi?id=33056
-
- * wtf/AlwaysInline.h:
-
-2010-01-04 Maciej Stachowiak <mjs@apple.com>
-
- Reviewed by Simon Hausmann.
-
- Fix some PLATFORM(*_ENDIAN) uses to CPU()
- https://bugs.webkit.org/show_bug.cgi?id=33148
-
- * runtime/JSCell.cpp:
- (JSC::):
- * runtime/JSValue.h:
- (JSC::JSValue::):
-
-2010-01-04 Maciej Stachowiak <mjs@apple.com>
-
- Reviewed by Adam Barth.
-
- Document CPU() macros in comments.
- https://bugs.webkit.org/show_bug.cgi?id=33147
-
- * wtf/Platform.h:
-
-2010-01-04 Maciej Stachowiak <mjs@apple.com>
-
- Reviewed by Adam Barth.
-
- Reorganize, document and rename CPU() platform macros.
- https://bugs.webkit.org/show_bug.cgi?id=33145
- ExecutableAllocatorSymbian appears to have buggy ARM version check
- https://bugs.webkit.org/show_bug.cgi?id=33138
-
- * wtf/Platform.h:
- Rename all macros related to detection of particular CPUs or
- classes of CPUs to CPU(), reorganize and document them.
-
- All remaining changes are adapting to the renames, plus fixing the
- second bug cited above.
-
- * assembler/ARMAssembler.cpp:
- * assembler/ARMAssembler.h:
- * assembler/ARMv7Assembler.h:
- * assembler/AbstractMacroAssembler.h:
- (JSC::AbstractMacroAssembler::Imm32::Imm32):
- * assembler/MacroAssembler.h:
- * assembler/MacroAssemblerARM.cpp:
- * assembler/MacroAssemblerARM.h:
- * assembler/MacroAssemblerCodeRef.h:
- (JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr):
- * assembler/MacroAssemblerX86.h:
- * assembler/MacroAssemblerX86Common.h:
- * assembler/MacroAssemblerX86_64.h:
- * assembler/X86Assembler.h:
- (JSC::X86Registers::):
- (JSC::X86Assembler::):
- (JSC::X86Assembler::movl_mEAX):
- (JSC::X86Assembler::movl_EAXm):
- (JSC::X86Assembler::repatchLoadPtrToLEA):
- (JSC::X86Assembler::X86InstructionFormatter::memoryModRM):
- * jit/ExecutableAllocator.h:
- * jit/ExecutableAllocatorFixedVMPool.cpp:
- * jit/ExecutableAllocatorPosix.cpp:
- * jit/ExecutableAllocatorSymbian.cpp:
- (JSC::ExecutableAllocator::intializePageSize):
- * jit/JIT.cpp:
- * jit/JIT.h:
- * jit/JITArithmetic.cpp:
- * jit/JITInlineMethods.h:
- (JSC::JIT::beginUninterruptedSequence):
- (JSC::JIT::restoreArgumentReferenceForTrampoline):
- (JSC::JIT::emitCount):
- * jit/JITOpcodes.cpp:
- (JSC::JIT::privateCompileCTIMachineTrampolines):
- * jit/JITPropertyAccess.cpp:
- (JSC::JIT::privateCompileGetByIdProto):
- (JSC::JIT::privateCompileGetByIdProtoList):
- (JSC::JIT::privateCompileGetByIdChainList):
- (JSC::JIT::privateCompileGetByIdChain):
- * jit/JITStubs.cpp:
- (JSC::JITThunks::JITThunks):
- * jit/JITStubs.h:
- * runtime/Collector.cpp:
- (JSC::currentThreadStackBase):
- (JSC::getPlatformThreadRegisters):
- (JSC::otherThreadStackPointer):
- * wrec/WREC.h:
- * wrec/WRECGenerator.cpp:
- (JSC::WREC::Generator::generateEnter):
- (JSC::WREC::Generator::generateReturnSuccess):
- (JSC::WREC::Generator::generateReturnFailure):
- * wrec/WRECGenerator.h:
- * wtf/FastMalloc.cpp:
- * wtf/TCSpinLock.h:
- (TCMalloc_SpinLock::Lock):
- (TCMalloc_SpinLock::Unlock):
- (TCMalloc_SlowLock):
- * wtf/Threading.h:
- * wtf/dtoa.cpp:
- * yarr/RegexJIT.cpp:
- (JSC::Yarr::RegexGenerator::generateEnter):
- (JSC::Yarr::RegexGenerator::generateReturn):
- * yarr/RegexJIT.h:
-
-2010-01-04 Maciej Stachowiak <mjs@apple.com>
-
- Reviewed by Adam Barth.
-
- Clean up COMPILER macros and remove unused ones.
- https://bugs.webkit.org/show_bug.cgi?id=33132
-
- Removed values are COMPILER(BORLAND) and COMPILER(CYGWIN) - they were
- not used anywhere.
-
- * wtf/Platform.h:
-
-2010-01-03 Maciej Stachowiak <mjs@apple.com>
-
- Reviewed by Eric Seidel.
-
- Update wtf/Platform.h to document the new system for porting macros.
- https://bugs.webkit.org/show_bug.cgi?id=33130
-
- * wtf/Platform.h:
-
-2009-12-29 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Maciej Stachowiak.
-
- PLATFORM(CAIRO) should be defined by WIN_CAIRO define
- https://bugs.webkit.org/show_bug.cgi?id=22250
-
- * wtf/Platform.h: Define WTF_PLATFORM_CAIRO for GTK port only
- For the WinCairo port WTF_PLATFORM_CAIRO is already defined in config.h
-
-2009-12-28 Shu Chang <Chang.Shu@nokia.com>
-
- Reviewed by Laszlo Gombos.
-
- [Qt] Delete ThreadPrivate instance after it is finished.
- https://bugs.webkit.org/show_bug.cgi?id=32614
-
- * wtf/qt/ThreadingQt.cpp:
- (WTF::ThreadMonitor::instance):
- (WTF::ThreadMonitor::threadFinished):
- (WTF::createThreadInternal):
- (WTF::detachThread):
-
-2009-12-28 Patrick Gansterer <paroga@paroga.com>
-
- Reviewed by Maciej Stachowiak.
-
- Cleanup of #define JS_EXPORT.
-
- * API/JSBase.h:
-
-2009-12-27 Patrick Gansterer <paroga@paroga.com>
-
- Reviewed by Adam Barth.
-
- WinCE buildfix (HWND_MESSAGE isn't supported there)
-
- * wtf/win/MainThreadWin.cpp:
- (WTF::initializeMainThreadPlatform):
-
-2009-12-27 Patrick Gansterer <paroga@paroga.com>
-
- Reviewed by Adam Barth.
-
- Added a file with WinMain function to link agains in WinCE.
-
- * os-win32/WinMain.cpp: Added.
- (convertToUtf8):
- (WinMain):
-
-2009-12-24 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Unreviewed; revert of r52550.
-
- The change regressed the following LayoutTests for QtWebKit.
-
- fast/workers/worker-call.html -> crashed
- fast/workers/worker-close.html -> crashed
-
- * wtf/qt/ThreadingQt.cpp:
- (WTF::waitForThreadCompletion):
- (WTF::detachThread):
-
-2009-12-24 Shu Chang <Chang.Shu@nokia.com>
-
- Reviewed by Laszlo Gombos.
-
- [Qt] Fix memory leak by deleting instance of ThreadPrivate
- in function waitForThreadCompletion(), synchronously, or in
- detachThread(), asynchronously.
- https://bugs.webkit.org/show_bug.cgi?id=32614
-
- * wtf/qt/ThreadingQt.cpp:
- (WTF::waitForThreadCompletion):
- (WTF::detachThread):
-
-2009-12-23 Kwang Yul Seo <skyul@company100.net>
-
- Reviewed by Laszlo Gombos.
-
- Include stddef.h for ptrdiff_t
- https://bugs.webkit.org/show_bug.cgi?id=32891
-
- ptrdiff_t is typedef-ed in stddef.h.
- Include stddef.h in jit/ExecutableAllocator.h.
-
- * jit/ExecutableAllocator.h:
-
-2009-12-23 Patrick Gansterer <paroga@paroga.com>
-
- Reviewed by Eric Seidel.
-
- Buildfix after r47092.
-
- * wtf/wince/MemoryManager.cpp:
- (WTF::tryFastMalloc):
- (WTF::tryFastZeroedMalloc):
- (WTF::tryFastCalloc):
- (WTF::tryFastRealloc):
-
-2009-12-23 Kent Tamura <tkent@chromium.org>
-
- Reviewed by Darin Adler.
-
- HTMLInputElement::valueAsDate getter support.
- https://bugs.webkit.org/show_bug.cgi?id=32876
-
- Expose dateToDaysFrom1970().
-
- * JavaScriptCore.exp:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * wtf/DateMath.cpp:
- (WTF::dateToDaysFrom1970):
- * wtf/DateMath.h:
-
-2009-12-22 Darin Adler <darin@apple.com>
-
- Reviewed by Mark Rowe.
-
- Turn off datagrid by default, at least for all platforms Apple ships.
- The datagrid implementation isn't ready for general web use yet.
-
- * Configurations/FeatureDefines.xcconfig: Turn off datagrid by default.
-
-2009-12-22 Steve Block <steveblock@google.com>
-
- Reviewed by David Levin.
-
- Updates Android's scheduleDispatchFunctionsOnMainThread() to use new
- AndroidThreading class, rather than using JavaSharedClient directly.
- This fixes the current layering violation.
- https://bugs.webkit.org/show_bug.cgi?id=32651
-
- The pattern is copied from Chromium, which uses the ChromiumThreading
- class. This patch also fixes the style in ChromiumThreading.h.
-
- * wtf/android/AndroidThreading.h: Added. Declares AndroidThreading.
- * wtf/android/MainThreadAndroid.cpp: Modified
- (WTF::scheduleDispatchFunctionsOnMainThread): Uses AndroidThreading.
- * wtf/chromium/ChromiumThreading.h: Modified. Fixes style.
-
-2009-12-22 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Sam Weinig.
-
- Fix a couple of problems with UntypedPtrAndBitfield.
-
- Add a m_leaksPtr to reduce false positives from leaks in debug builds
- (this isn't perfect because we'd like a solution for release builds,
- but this is now at least as good as a PtrAndFlags would be).
-
- Switch SmallStringsto use a regular string for the base, rather than
- a static one. UntypedPtrAndBitfield assumes all strings are at least
- 8 byte aligned; this migt not be true of static strings. Shared buffers
- are heap allocated, as are all UStringImpls other than static strings.
- Static strings cannot end up being the owner string of substrings,
- since the only static strings are length 0.
-
- * runtime/SmallStrings.cpp:
- (JSC::SmallStringsStorage::SmallStringsStorage):
- * runtime/UStringImpl.h:
- (JSC::UntypedPtrAndBitfield::UntypedPtrAndBitfield):
- (JSC::UStringImpl::UStringImpl):
-
-2009-12-22 Kwang Yul Seo <skyul@company100.net>
-
- Reviewed by Darin Adler.
-
- RVCT (__ARMCC_VERSION < 400000) does not provide strcasecmp and strncasecmp
- https://bugs.webkit.org/show_bug.cgi?id=32857
-
- Add implementation of strcasecmp and strncasecmp for RVCT < 4.0
- because earlier versions of RVCT 4.0 does not provide these functions.
-
- * wtf/StringExtras.cpp: Added.
- (strcasecmp):
- (strncasecmp):
- * wtf/StringExtras.h:
-
-2009-12-22 Kwang Yul Seo <skyul@company100.net>
-
- Reviewed by Darin Adler.
-
- Define ALWAYS_INLINE and WTF_PRIVATE_INLINE to __forceinline for RVCT
- https://bugs.webkit.org/show_bug.cgi?id=32853
-
- Use __forceinline forces RVCT to compile a C or C++ function
- inline. The compiler attempts to inline the function, regardless of
- the characteristics of the function.
-
- * wtf/AlwaysInline.h:
- * wtf/FastMalloc.h:
-
-2009-12-21 Simon Hausmann <simon.hausmann@nokia.com>
-
- Prospective GTK build fix: Add UStringImpl.cpp/h to the build.
-
- * GNUmakefile.am:
-
-2009-12-21 Simon Hausmann <simon.hausmann@nokia.com>
-
- Fix the Qt build, add UStringImpl.cpp to the build.
-
- * JavaScriptCore.pri:
-
-2009-12-21 Gavin Barraclough <barraclough@apple.com>
-
- Windows Build fix part 5.
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
-
-2009-12-21 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (build fix).
- Fix breakage of world introduced in build fix to r52463.
-
- * runtime/UStringImpl.h:
-
-2009-12-21 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Darin Adler.
-
- https://bugs.webkit.org/show_bug.cgi?id=32831
- Replace UString::Rep implementation, following introduction of ropes to JSC.
-
- * Remove redundant overcapacity mechanisms.
- * Reduce memory cost of Rep's.
- * Add an inline storage mechanism akin to that in WebCore's StringImpl.
-
- ~1% Sunspider progression.
-
- * JavaScriptCore.exp:
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * runtime/JSString.cpp:
- (JSC::JSString::resolveRope):
- * runtime/SmallStrings.cpp:
- (JSC::SmallStringsStorage::SmallStringsStorage):
- * runtime/UString.cpp:
- (JSC::initializeUString):
- (JSC::createRep):
- (JSC::UString::createFromUTF8):
- (JSC::UString::createUninitialized):
- (JSC::UString::spliceSubstringsWithSeparators):
- (JSC::UString::replaceRange):
- (JSC::UString::ascii):
- (JSC::UString::operator=):
- (JSC::UString::toStrictUInt32):
- (JSC::equal):
- * runtime/UString.h:
- (JSC::UString::isEmpty):
- (JSC::UString::cost):
- (JSC::makeString):
- * runtime/UStringImpl.cpp: Added.
- (JSC::UStringImpl::baseSharedBuffer):
- (JSC::UStringImpl::sharedBuffer):
- (JSC::UStringImpl::destroy):
- (JSC::UStringImpl::computeHash):
- * runtime/UStringImpl.h: Added.
- (JSC::UntypedPtrAndBitfield::UntypedPtrAndBitfield):
- (JSC::UntypedPtrAndBitfield::asPtr):
- (JSC::UntypedPtrAndBitfield::operator&=):
- (JSC::UntypedPtrAndBitfield::operator|=):
- (JSC::UntypedPtrAndBitfield::operator&):
- (JSC::UStringImpl::create):
- (JSC::UStringImpl::createCopying):
- (JSC::UStringImpl::createUninitialized):
- (JSC::UStringImpl::data):
- (JSC::UStringImpl::size):
- (JSC::UStringImpl::cost):
- (JSC::UStringImpl::hash):
- (JSC::UStringImpl::computedHash):
- (JSC::UStringImpl::setHash):
- (JSC::UStringImpl::identifierTable):
- (JSC::UStringImpl::setIdentifierTable):
- (JSC::UStringImpl::ref):
- (JSC::UStringImpl::deref):
- (JSC::UStringImpl::allocChars):
- (JSC::UStringImpl::copyChars):
- (JSC::UStringImpl::computeHash):
- (JSC::UStringImpl::null):
- (JSC::UStringImpl::empty):
- (JSC::UStringImpl::checkConsistency):
- (JSC::UStringImpl::):
- (JSC::UStringImpl::UStringImpl):
- (JSC::UStringImpl::operator new):
- (JSC::UStringImpl::bufferOwnerString):
- (JSC::UStringImpl::bufferOwnership):
- (JSC::UStringImpl::isStatic):
-
-2009-12-18 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Kenneth Rohde Christiansen.
-
- Move some build decisions from Qt build system into source files
- https://bugs.webkit.org/show_bug.cgi?id=31956
-
- * JavaScriptCore.pri: Compile files unconditionally
- * jit/ExecutableAllocatorPosix.cpp: Guard with PLATFORM(UNIX) && !PLATFORM(SYMBIAN)
- * jit/ExecutableAllocatorWin.cpp: Guard with PLATFORM(WIN_OS)
- * runtime/MarkStackPosix.cpp: Guard with PLATFORM(UNIX) && !PLATFORM(SYMBIAN)
- * runtime/MarkStackSymbian.cpp: Guard with PLATFORM(SYMBIAN)
- * runtime/MarkStackWin.cpp: Guard with PLATFORM(WIN_OS)
- * wtf/Platform.h: Guard ENABLE_JSC_MULTIPLE_THREADS with ENABLE_SINGLE_THREADED for the Qt port
- * wtf/ThreadingNone.cpp: Guard with ENABLE(SINGLE_THREADED)
- * wtf/qt/ThreadingQt.cpp: Guard with !ENABLE(SINGLE_THREADED)
-
-2009-12-18 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Sam Weinig.
-
- Add createNonCopying method to UString to make replace constructor passed bool,
- to make behaviour more explicit. Add createFromUTF8 to UString (wrapping method
- on UString::Rep), since other cases of transliteration (e.g. from ascii) are
- performed in UString constructors. Add/use setHash & size() accessors on Rep,
- rather than accessing _hash/len directly.
-
- * API/JSClassRef.cpp:
- (OpaqueJSClass::OpaqueJSClass):
- * API/OpaqueJSString.cpp:
- (OpaqueJSString::ustring):
- * JavaScriptCore.exp:
+ * runtime/ArrayConstructor.cpp:
+ (JSC::callArrayConstructor):
+ (JSC::arrayConstructorIsArray):
* runtime/ArrayPrototype.cpp:
(JSC::arrayProtoFuncToString):
- * runtime/Identifier.cpp:
- (JSC::Identifier::equal):
- (JSC::CStringTranslator::translate):
- (JSC::UCharBufferTranslator::translate):
- (JSC::Identifier::addSlowCase):
- * runtime/JSString.cpp:
- (JSC::JSString::resolveRope):
- * runtime/JSString.h:
- (JSC::JSString::Rope::Fiber::refAndGetLength):
- (JSC::JSString::Rope::append):
- * runtime/StringBuilder.h:
- (JSC::StringBuilder::release):
- * runtime/StringConstructor.cpp:
- (JSC::stringFromCharCodeSlowCase):
- * runtime/StringPrototype.cpp:
- (JSC::substituteBackreferencesSlow):
- (JSC::stringProtoFuncToLowerCase):
- (JSC::stringProtoFuncToUpperCase):
- (JSC::stringProtoFuncFontsize):
- (JSC::stringProtoFuncLink):
- * runtime/UString.cpp:
- (JSC::UString::UString):
- (JSC::UString::createNonCopying):
- (JSC::UString::createFromUTF8):
- * runtime/UString.h:
- (JSC::UString::Rep::setHash):
- (JSC::UString::~UString):
- (JSC::makeString):
-
-2009-12-18 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Cameron Zwarich and Gavin Barraclough.
-
- Changed Register constructors to assignment operators, to streamline
- moving values into registers. (In theory, there's no difference between
- the two, since the constructor should just inline away, but there seems
- to be a big difference in the addled mind of the GCC optimizer.)
-
- In the interpreter, this is a 3.5% SunSpider speedup and a 1K-2K
- reduction in stack usage per privateExecute stack frame.
-
- * interpreter/CallFrame.h:
- (JSC::ExecState::setCalleeArguments):
- (JSC::ExecState::setCallerFrame):
- (JSC::ExecState::setScopeChain):
- (JSC::ExecState::init):
- (JSC::ExecState::setArgumentCount):
- (JSC::ExecState::setCallee):
- (JSC::ExecState::setCodeBlock): Added a little bit of casting so these
- functions could use the new Register assignment operators.
-
- * interpreter/Register.h:
- (JSC::Register::withInt):
- (JSC::Register::Register):
- (JSC::Register::operator=): Swapped in assignment operators for constructors.
-
-2009-12-18 Yongjun Zhang <yongjun.zhang@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- https://bugs.webkit.org/show_bug.cgi?id=32713
- [Qt] make wtf/Assertions.h compile in winscw compiler.
-
- Add string arg before ellipsis to help winscw compiler resolve variadic
- macro definitions in wtf/Assertions.h.
-
- * wtf/Assertions.h:
-
-2009-12-18 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Adam Roben.
-
- Fixed intermittent failure seen on Windows buildbot, and in other JSC
- API clients.
-
- Added a WeakGCPtr class and changed OpaqueJSClass::cachedPrototype to
- use it, to avoid vending a stale object as a prototype.
-
- * API/JSClassRef.cpp:
- (OpaqueJSClassContextData::OpaqueJSClassContextData):
- (OpaqueJSClass::prototype):
- * API/JSClassRef.h: Use WeakGCPtr.
-
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * runtime/WeakGCPtr.h: Added.
- (JSC::WeakGCPtr::WeakGCPtr):
- (JSC::WeakGCPtr::get):
- (JSC::WeakGCPtr::clear):
- (JSC::WeakGCPtr::operator*):
- (JSC::WeakGCPtr::operator->):
- (JSC::WeakGCPtr::operator!):
- (JSC::WeakGCPtr::operator bool):
- (JSC::WeakGCPtr::operator UnspecifiedBoolType):
- (JSC::WeakGCPtr::assign):
- (JSC::::operator):
- (JSC::operator==):
- (JSC::operator!=):
- (JSC::static_pointer_cast):
- (JSC::const_pointer_cast):
- (JSC::getPtr): Added WeakGCPtr to the project.
-
-2009-12-18 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Sam Weinig.
-
- https://bugs.webkit.org/show_bug.cgi?id=32720
-
- * JavaScriptCore.exp:
- - Remove exports for UString::append
- * JavaScriptCore.xcodeproj/project.pbxproj:
- - Make StringBuilder a private header (was project).
-
-2009-12-18 Martin Robinson <martin.james.robinson@gmail.com>
-
- Reviewed by Gustavo Noronha Silva.
-
- [GTK] GRefPtr does not take a reference when assigned a raw pointer
- https://bugs.webkit.org/show_bug.cgi?id=32709
-
- Ensure that when assigning a raw pointer to a GRefPtr, the reference
- count is incremented. Also remove the GRefPtr conversion overload as
- GRefPtr types have necessarily incompatible reference counting.
-
- * wtf/gtk/GRefPtr.h:
- (WTF::GRefPtr::operator=):
-
-2009-12-18 Simon Hausmann <simon.hausmann@nokia.com>
-
- Reviewed by Tor Arne Vestbø.
-
- [Qt] Clean up the qmake build system to distinguish between trunk builds and package builds
-
- https://bugs.webkit.org/show_bug.cgi?id=32716
-
- * pcre/pcre.pri: Use standalone_package instead of QTDIR_build
-
-2009-12-18 Martin Robinson <martin.james.robinson@gmail.com>
-
- Reviewed by Gustavo Noronha Silva.
-
- [GTK] Compile warning from line 29 of GRefPtr.cpp
- https://bugs.webkit.org/show_bug.cgi?id=32703
-
- Fix memory leak and compiler warning in GRefPtr GHashTable template
- specialization.
-
- * wtf/gtk/GRefPtr.cpp:
- (WTF::refGPtr):
-
-2009-12-17 Sam Weinig <sam@webkit.org>
-
- Reviewed by Mark Rowe.
-
- Add BUILDING_ON_SNOW_LEOPARD and TARGETING_SNOW_LEOPARD #defines.
-
- * wtf/Platform.h:
-
-2009-12-17 Adam Roben <aroben@apple.com>
-
- Sync JavaScriptCore.vcproj with JavaScriptCore.xcodeproj and the
- source tree
-
- Fixes <http://webkit.org/b/32665>.
-
- Reviewed by Ada Chan.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Moved
- around files and filters so that the structure matches
- JavaScriptCore.xcodeproj and the source tree. A few headers that were
- previously omitted have been added, as well as JSZombie.{cpp,h}.
-
-2009-12-17 Adam Roben <aroben@apple.com>
-
- Remove HeavyProfile and TreeProfile completely
-
- These were mostly removed in r42808, but the empty files were left in
- place.
-
- Fixes <http://webkit.org/b/32664>.
-
- Reviewed by John Sullivan.
-
- * Android.mk:
- * GNUmakefile.am:
- * JavaScriptCore.gypi:
- * JavaScriptCore.pri:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
- * JavaScriptCoreSources.bkl:
- Removed HeavyProfile/TreeProfile source files.
-
- * profiler/HeavyProfile.cpp: Removed.
- * profiler/HeavyProfile.h: Removed.
- * profiler/TreeProfile.cpp: Removed.
- * profiler/TreeProfile.h: Removed.
-
-2009-12-17 Martin Robinson <martin.james.robinson@gmail.com>
-
- Reviewed by Gustavo Noronha Silva.
-
- [GTK] WebKit GTK needs a wrapper for ref counted glib/gobject structs
- https://bugs.webkit.org/show_bug.cgi?id=21599
-
- Implement GRefPtr, a smart pointer for reference counted GObject types.
-
- * GNUmakefile.am:
- * wtf/gtk/GOwnPtr.cpp:
- (WTF::GDir):
- * wtf/gtk/GRefPtr.h: Added.
- (WTF::):
- (WTF::GRefPtr::GRefPtr):
- (WTF::GRefPtr::~GRefPtr):
- (WTF::GRefPtr::clear):
- (WTF::GRefPtr::get):
- (WTF::GRefPtr::operator*):
- (WTF::GRefPtr::operator->):
- (WTF::GRefPtr::operator!):
- (WTF::GRefPtr::operator UnspecifiedBoolType):
- (WTF::GRefPtr::hashTableDeletedValue):
- (WTF::::operator):
- (WTF::::swap):
- (WTF::swap):
- (WTF::operator==):
- (WTF::operator!=):
- (WTF::static_pointer_cast):
- (WTF::const_pointer_cast):
- (WTF::getPtr):
- (WTF::adoptGRef):
- (WTF::refGPtr):
- (WTF::derefGPtr):
-
-2009-12-17 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk>
-
- Unreviewed. Build fixes for make distcheck.
-
- * GNUmakefile.am:
-
-2009-12-16 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Fixed <rdar://problem/7355025> Interpreter::privateExecute macro generates
- bloated code
-
- This patch cuts Interpreter stack use by about a third.
-
- * bytecode/Opcode.h: Changed Opcode to const void* to work with the
- const static initiliazation we want to do in Interpreter::privateExecute.
-
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::Interpreter): Moved hashtable initialization here to
- avoid polluting Interpreter::privateExecute's stack, and changed it from a
- series of add() calls to one add() call in a loop, to cut down on code size.
-
- (JSC::Interpreter::privateExecute): Changed a series of label computations
- to a copy of a compile-time constant array to cut down on code size.
-
-2009-12-16 Mark Rowe <mrowe@apple.com>
-
- Build fix. Disable debug variants of WebKit frameworks.
-
- * JavaScriptCore.xcodeproj/project.pbxproj:
-
-2009-12-15 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam "r=me" Weinig.
-
- https://bugs.webkit.org/show_bug.cgi?id=32498
- <rdar://problem/7471495>
- REGRESSION(r51978-r52039): AJAX "Mark This Forum Read" function no longer
- works
-
- Fixed a tyop.
-
- * runtime/Operations.h:
- (JSC::jsAdd): Use the '&&' operator, not the ',' operator.
-
-2009-12-15 Geoffrey Garen <ggaren@apple.com>
-
- Try to fix the windows build: don't export this inlined function.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2009-12-15 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Beth Dakin.
-
- Inlined JSCell's operator new.
-
- 3.7% speedup on bench-allocate-nonretained.js.
-
- * JavaScriptCore.exp:
- * runtime/JSCell.cpp:
- * runtime/JSCell.h:
- (JSC::JSCell::operator new):
-
-2009-12-15 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Removed the number heap, replacing it with a one-item free list for
- numbers, taking advantage of the fact that two number cells fit inside
- the space for one regular cell, and number cells don't require destruction.
-
- SunSpider says 1.6% faster in JSVALUE32 mode (the only mode that
- heap-allocates numbers).
-
- SunSpider says 1.1% faster in JSVALUE32_64 mode. v8 says 0.8% faster
- in JSVALUE32_64 mode. 10% speedup on bench-alloc-nonretained.js. 6%
- speedup on bench-alloc-retained.js.
-
- There's a lot of formulaic change in this patch, but not much substance.
-
- * JavaScriptCore.exp:
- * debugger/Debugger.cpp:
- (JSC::Debugger::recompileAllJSFunctions):
- * runtime/Collector.cpp:
- (JSC::Heap::Heap):
- (JSC::Heap::destroy):
- (JSC::Heap::allocateBlock):
- (JSC::Heap::freeBlock):
- (JSC::Heap::freeBlockPtr):
- (JSC::Heap::freeBlocks):
- (JSC::Heap::recordExtraCost):
- (JSC::Heap::allocate):
- (JSC::Heap::resizeBlocks):
- (JSC::Heap::growBlocks):
- (JSC::Heap::shrinkBlocks):
- (JSC::Heap::markConservatively):
- (JSC::Heap::clearMarkBits):
- (JSC::Heap::markedCells):
- (JSC::Heap::sweep):
- (JSC::Heap::markRoots):
- (JSC::Heap::objectCount):
- (JSC::Heap::addToStatistics):
- (JSC::Heap::statistics):
- (JSC::Heap::isBusy):
- (JSC::Heap::reset):
- (JSC::Heap::collectAllGarbage):
- (JSC::Heap::primaryHeapBegin):
- (JSC::Heap::primaryHeapEnd):
- * runtime/Collector.h:
- (JSC::): Removed all code pertaining to the number heap, and changed all
- heap template functions and classes to non-template functions and classes.
-
- (JSC::Heap::allocateNumber): A new optimization to replace the number
- heap: allocate half-sized number cells in pairs, returning the first
- cell and caching the second cell for the next allocation.
-
- * runtime/CollectorHeapIterator.h:
- (JSC::LiveObjectIterator::LiveObjectIterator):
- (JSC::LiveObjectIterator::operator++):
- (JSC::DeadObjectIterator::DeadObjectIterator):
- (JSC::DeadObjectIterator::operator++):
- (JSC::ObjectIterator::ObjectIterator):
- (JSC::ObjectIterator::operator++):
- * runtime/JSCell.h:
- (JSC::JSCell::isNumber): Removed all code pertaining to the number heap,
- and changed all heap template functions and classes to non-template functions
- and classes.
-
-2009-12-15 Zoltan Horvath <zoltan@webkit.org>
-
- Reviewed by Darin Adler.
-
- Allow custom memory allocation control for WeakGCMap class
- https://bugs.webkit.org/show_bug.cgi?id=32547
-
- Inherits WeakGCMap from FastAllocBase because it is instantiated by
- 'new' at: WebCore/dom/Document.cpp:512.
-
- * runtime/WeakGCMap.h:
-
-2009-12-15 Zoltan Horvath <zoltan@webkit.org>
-
- Reviewed by Darin Adler.
-
- Allow custom memory allocation control for dtoa's P5Node struct
- https://bugs.webkit.org/show_bug.cgi?id=32544
-
- Inherits P5Node struct from Noncopyable because it is instantiated by
- 'new' at wtf/dtoa.cpp:588 and don't need to be copyable.
-
- * wtf/dtoa.cpp:
-
-2009-12-14 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Simon Fraser.
-
- https://bugs.webkit.org/show_bug.cgi?id=32524
- REGRESSION(52084): fast/dom/prototypes.html failing two CSS tests
-
- * wtf/StdLibExtras.h:
- (WTF::bitCount): The original patch put the parentheses in the wrong
- place, completely changing the calculation and making it almost always
- wrong. Moved the parentheses around the '+' operation, like the original
- compiler warning suggested.
-
-2009-12-14 Gabor Loki <loki@inf.u-szeged.hu>
-
- Unreviewed trivial buildfix.
-
- Fix crosses initialization of usedPrimaryBlocks for JSValue32
-
- * runtime/Collector.cpp:
- (JSC::Heap::markConservatively):
-
-2009-12-14 Csaba Osztrogonác <ossy@webkit.org>
-
- Reviewed by Simon Hausmann.
-
- GCC 4.3.x warning fixed. Suggested parantheses added.
- warning: ../../../JavaScriptCore/wtf/StdLibExtras.h:77: warning: suggest parentheses around + or - in operand of &
-
- * wtf/StdLibExtras.h:
- (WTF::bitCount):
-
-2009-12-13 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Changed GC from mark-sweep to mark-allocate.
-
- Added WeakGCMap to keep WebCore blissfully ignorant about objects that
- have become garbage but haven't run their destructors yet.
-
- 1% SunSpider speedup.
- 7.6% v8 speedup (37% splay speedup).
- 17% speedup on bench-alloc-nonretained.js.
- 18% speedup on bench-alloc-retained.js.
-
- * API/JSBase.cpp:
- (JSGarbageCollect):
- * API/JSContextRef.cpp:
- * JavaScriptCore.exp:
- * JavaScriptCore.xcodeproj/project.pbxproj: Updated for renames and new
- files.
-
- * debugger/Debugger.cpp:
- (JSC::Debugger::recompileAllJSFunctions): Updated to use the Collector
- iterator abstraction.
-
- * jsc.cpp:
- (functionGC): Updated for rename.
-
- * runtime/Collector.cpp: Slightly reduced the number of allocations per
- collection, so that small workloads only allocate on collector block,
- rather than two.
-
- (JSC::Heap::Heap): Updated to use the new allocateBlock function.
-
- (JSC::Heap::destroy): Updated to use the new freeBlocks function.
-
- (JSC::Heap::allocateBlock): New function to initialize a block when
- allocating it.
-
- (JSC::Heap::freeBlock): Consolidated the responsibility for running
- destructors into this function.
-
- (JSC::Heap::freeBlocks): Updated to use freeBlock.
-
- (JSC::Heap::recordExtraCost): Sweep the heap in this reporting function,
- so that allocation, which is more common, doesn't have to check extraCost.
-
- (JSC::Heap::heapAllocate): Run destructors right before recycling a
- garbage cell. This has better cache utilization than a separate sweep phase.
-
- (JSC::Heap::resizeBlocks):
- (JSC::Heap::growBlocks):
- (JSC::Heap::shrinkBlocks): New set of functions for managing the size of
- the heap, now that the heap doesn't maintain any information about its
- size.
-
- (JSC::isPointerAligned):
- (JSC::isHalfCellAligned):
- (JSC::isPossibleCell):
- (JSC::isCellAligned):
- (JSC::Heap::markConservatively): Cleaned up this code a bit.
-
- (JSC::Heap::clearMarkBits):
- (JSC::Heap::markedCells): Some helper functions for examining the the mark
- bitmap.
-
- (JSC::Heap::sweep): Simplified this function by using a DeadObjectIterator.
-
- (JSC::Heap::markRoots): Reordered some operations for clarity.
-
- (JSC::Heap::objectCount):
- (JSC::Heap::addToStatistics):
- (JSC::Heap::statistics): Rewrote these functions to calculate an object
- count on demand, since the heap doesn't maintain this information by
- itself.
-
- (JSC::Heap::reset): New function for resetting the heap once we've
- exhausted heap space.
-
- (JSC::Heap::collectAllGarbage): This function matches the old collect()
- behavior, but it's now an uncommon function used only by API.
-
- * runtime/Collector.h:
- (JSC::CollectorBitmap::count):
- (JSC::CollectorBitmap::isEmpty): Added some helper functions for managing
- the collector mark bitmap.
-
- (JSC::Heap::reportExtraMemoryCost): Changed reporting from cell equivalents
- to bytes, so it's easier to understand.
-
- * runtime/CollectorHeapIterator.h:
- (JSC::CollectorHeapIterator::CollectorHeapIterator):
- (JSC::CollectorHeapIterator::operator!=):
- (JSC::CollectorHeapIterator::operator*):
- (JSC::CollectorHeapIterator::advance):
- (JSC::::LiveObjectIterator):
- (JSC::::operator):
- (JSC::::DeadObjectIterator):
- (JSC::::ObjectIterator): New iterators for encapsulating details about
- heap layout, and what's live and dead on the heap.
-
- * runtime/JSArray.cpp:
- (JSC::JSArray::putSlowCase):
- (JSC::JSArray::increaseVectorLength): Delay reporting extra cost until
- we're fully constructed, so the heap mark phase won't visit us in an
- invalid state.
-
- * runtime/JSCell.h:
- (JSC::JSCell::):
- (JSC::JSCell::createDummyStructure):
- (JSC::JSCell::JSCell):
- * runtime/JSGlobalData.cpp:
- (JSC::JSGlobalData::JSGlobalData):
- * runtime/JSGlobalData.h: Added a dummy cell to simplify allocation logic.
-
- * runtime/JSString.h:
- (JSC::jsSubstring): Don't report extra cost for substrings, since they
- share a buffer that's already reported extra cost.
-
- * runtime/Tracing.d:
- * runtime/Tracing.h: Changed these dtrace hooks not to report object
- counts, since they're no longer cheap to compute.
-
- * runtime/UString.h: Updated for renames.
-
- * runtime/WeakGCMap.h: Added.
- (JSC::WeakGCMap::isEmpty):
- (JSC::WeakGCMap::uncheckedGet):
- (JSC::WeakGCMap::uncheckedBegin):
- (JSC::WeakGCMap::uncheckedEnd):
- (JSC::::get):
- (JSC::::take):
- (JSC::::set):
- (JSC::::uncheckedRemove): Mentioned above.
-
- * wtf/StdLibExtras.h:
- (WTF::bitCount): Added a bit population count function, so the heap can
- count live objects to fulfill statistics questions.
-
-The very last cell in the block is not allocated -- should not be marked.
-
-2009-12-13 Geoffrey Garen <ggaren@apple.com>
-
- Windows build fix: Export some new symbols.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2009-12-13 Geoffrey Garen <ggaren@apple.com>
-
- Windows build fix: Removed some old exports.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2009-12-13 Geoffrey Garen <ggaren@apple.com>
-
- Windows build fix: Use unsigned instead of uint32_t to avoid dependencies.
-
- * wtf/StdLibExtras.h:
- (WTF::bitCount):
-
-2009-12-13 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (speculative Windows build fix).
-
- * runtime/JSGlobalObjectFunctions.cpp:
-
-2009-12-13 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Sam Weinig.
-
- https://bugs.webkit.org/show_bug.cgi?id=32496
- Switch remaining cases of string construction to use StringBuilder.
- Builds strings using a vector rather than using string append / addition.
-
- * JavaScriptCore.exp:
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * runtime/Executable.cpp:
- (JSC::FunctionExecutable::paramString):
- * runtime/FunctionConstructor.cpp:
- (JSC::constructFunction):
- * runtime/JSGlobalObjectFunctions.cpp:
- (JSC::encode):
- (JSC::decode):
- (JSC::globalFuncEscape):
- (JSC::globalFuncUnescape):
- * runtime/JSONObject.cpp:
- (JSC::Stringifier::stringify):
- (JSC::Stringifier::indent):
- * runtime/JSString.h:
- * runtime/LiteralParser.cpp:
- (JSC::LiteralParser::Lexer::lexString):
- * runtime/NumberPrototype.cpp:
- (JSC::integerPartNoExp):
- (JSC::numberProtoFuncToFixed):
- (JSC::numberProtoFuncToPrecision):
- * runtime/Operations.h:
- (JSC::jsString):
- * runtime/StringPrototype.cpp:
- (JSC::substituteBackreferencesSlow):
- (JSC::substituteBackreferences):
- (JSC::stringProtoFuncConcat):
-
-2009-12-08 Jeremy Moskovich <jeremy@chromium.org>
-
- Reviewed by Eric Seidel.
-
- Add code to allow toggling ATSUI/Core Text rendering at runtime in ComplexTextController.
- https://bugs.webkit.org/show_bug.cgi?id=31802
-
- The goal here is to allow for a zero runtime hit for ports that decide to select
- the API at compile time.
- When both USE(ATSUI) and USE(CORE_TEXT) are true, the API is toggled
- at runtime. Core Text is used for OS Versions >= 10.6.
-
- * wtf/Platform.h: #define USE_CORE_TEXT and USE_ATSUI on Chrome/Mac.
-
-2009-12-11 Maciej Stachowiak <mjs@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Unify codegen for forward and backward variants of branches
- https://bugs.webkit.org/show_bug.cgi?id=32463
-
- * jit/JIT.h:
- (JSC::JIT::emit_op_loop): Implemented in terms of forward variant.
- (JSC::JIT::emit_op_loop_if_true): ditto
- (JSC::JIT::emitSlow_op_loop_if_true): ditto
- (JSC::JIT::emit_op_loop_if_false): ditto
- (JSC::JIT::emitSlow_op_loop_if_false): ditto
- (JSC::JIT::emit_op_loop_if_less): ditto
- (JSC::JIT::emitSlow_op_loop_if_less): ditto
- * jit/JITOpcodes.cpp:
-
-2009-12-11 Sam Weinig <sam@webkit.org>
-
- Reviewed by Anders Carlsson.
-
- Allow WTFs concept of the main thread to differ from pthreads when necessary.
-
- * wtf/ThreadingPthreads.cpp:
- (WTF::initializeThreading):
- (WTF::isMainThread):
- * wtf/mac/MainThreadMac.mm:
- (WTF::initializeMainThreadPlatform):
- (WTF::scheduleDispatchFunctionsOnMainThread):
-
-2009-12-11 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- https://bugs.webkit.org/show_bug.cgi?id=32454
- Refactor construction of simple strings to avoid string concatenation.
-
- Building strings through concatenation has a memory and performance cost -
- a memory cost since we must over-allocate the buffer to leave space to append
- into, and performance in that the string may still require reallocation (and
- thus copying during construction). Instead move the full construction to
- within a single function call (makeString), so that the arguments' lengths
- can be calculated and an appropriate sized buffer allocated before copying
- any characters.
-
- ~No performance change (~2% progression on date tests).
-
- * bytecode/CodeBlock.cpp:
- (JSC::escapeQuotes):
- (JSC::valueToSourceString):
- (JSC::constantName):
- (JSC::idName):
- (JSC::CodeBlock::registerName):
- (JSC::regexpToSourceString):
- (JSC::regexpName):
- * bytecompiler/NodesCodegen.cpp:
- (JSC::substitute):
- * profiler/Profiler.cpp:
- (JSC::Profiler::createCallIdentifier):
- * runtime/DateConstructor.cpp:
- (JSC::callDate):
- * runtime/DateConversion.cpp:
- (JSC::formatDate):
- (JSC::formatDateUTCVariant):
- (JSC::formatTime):
- (JSC::formatTimeUTC):
- * runtime/DateConversion.h:
- (JSC::):
- * runtime/DatePrototype.cpp:
- (JSC::dateProtoFuncToString):
- (JSC::dateProtoFuncToUTCString):
- (JSC::dateProtoFuncToDateString):
- (JSC::dateProtoFuncToTimeString):
- (JSC::dateProtoFuncToGMTString):
- * runtime/ErrorPrototype.cpp:
- (JSC::errorProtoFuncToString):
- * runtime/ExceptionHelpers.cpp:
- (JSC::createUndefinedVariableError):
- (JSC::createErrorMessage):
- (JSC::createInvalidParamError):
- * runtime/FunctionPrototype.cpp:
- (JSC::insertSemicolonIfNeeded):
- (JSC::functionProtoFuncToString):
- * runtime/ObjectPrototype.cpp:
- (JSC::objectProtoFuncToString):
- * runtime/RegExpConstructor.cpp:
- (JSC::constructRegExp):
- * runtime/RegExpObject.cpp:
- (JSC::RegExpObject::match):
- * runtime/RegExpPrototype.cpp:
- (JSC::regExpProtoFuncCompile):
- (JSC::regExpProtoFuncToString):
- * runtime/StringPrototype.cpp:
- (JSC::stringProtoFuncBig):
- (JSC::stringProtoFuncSmall):
- (JSC::stringProtoFuncBlink):
- (JSC::stringProtoFuncBold):
- (JSC::stringProtoFuncFixed):
- (JSC::stringProtoFuncItalics):
- (JSC::stringProtoFuncStrike):
- (JSC::stringProtoFuncSub):
- (JSC::stringProtoFuncSup):
- (JSC::stringProtoFuncFontcolor):
- (JSC::stringProtoFuncFontsize):
- (JSC::stringProtoFuncAnchor):
- * runtime/UString.h:
- (JSC::):
- (JSC::makeString):
-
-2009-12-10 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- https://bugs.webkit.org/show_bug.cgi?id=32400
- Switch remaining cases of string addition to use ropes.
-
- Re-landing r51975 - added toPrimitiveString method,
- performs toPrimitive then subsequent toString operations.
-
- ~1% progression on Sunspidey.
-
- * jit/JITStubs.cpp:
- (JSC::DEFINE_STUB_FUNCTION):
- * runtime/JSString.h:
- (JSC::JSString::JSString):
- (JSC::JSString::appendStringInConstruct):
- * runtime/Operations.cpp:
- (JSC::jsAddSlowCase):
- * runtime/Operations.h:
- (JSC::jsString):
- (JSC::jsAdd):
-
-2009-12-11 Adam Roben <aroben@apple.com>
-
- Windows build fix
-
- * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: Added
- $(WebKitOutputDir)/include/private to the include path.
-
-2009-12-11 Adam Roben <aroben@apple.com>
-
- Move QuartzCorePresent.h to include/private
-
- This fixes other projects that use wtf/Platform.h
-
- Rubber-stamped by Steve Falkenburg.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Let VS do its thang.
- * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh: Write
- QuartzCorePresent.h to $(WebKitOutputDir)/include/private.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
- * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops:
- Added $(WebKitOutputDir)/include/private to the include path.
-
-2009-12-11 Adam Roben <aroben@apple.com>
-
- Fix clean builds and everything rebuilding on every build
-
- Reviewed by Sam Weinig.
-
- * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh: Don't
- write out QuartzCorePresent.h if it exists but is older than
- QuartzCore.h. Also, create the directory we write QuartzCorePresent.h
- into first.
-
-2009-12-11 Adam Roben <aroben@apple.com>
-
- Windows build fix for systems with spaces in their paths
-
- * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh: Quote some paths.
-
-2009-12-11 Chris Marrin <cmarrin@apple.com>
-
- Reviewed by Adam Roben.
-
- Add check for presence of QuartzCore headers
- https://bugs.webkit.org/show_bug.cgi?id=31856
-
- The script now checks for the presence of QuartzCore.h. If present
- it will turn on ACCELERATED_COMPOSITING and 3D_RENDERING to enable
- HW compositing on Windows. The script writes QuartzCorePresent.h to
- the build directory which has a define telling whether QuartzCore is
- present.
-
- * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh:
- * wtf/Platform.h:
-
-2009-12-11 Kent Tamura <tkent@chromium.org>
-
- Reviewed by Darin Adler.
-
- Fix a problem that JSC::gregorianDateTimeToMS() returns a negative
- value for a huge year value.
- https://bugs.webkit.org/show_bug.cgi?id=32304
-
- * wtf/DateMath.cpp:
- (WTF::dateToDaysFrom1970): Renamed from dateToDayInYear, and changed the return type to double.
- (WTF::calculateDSTOffset): Follow the dateToDaysFrom1970() change.
- (WTF::timeClip): Use maxECMAScriptTime.
- (JSC::gregorianDateTimeToMS): Follow the dateToDaysFrom1970() change.
-
-2009-12-10 Adam Barth <abarth@webkit.org>
-
- No review, rolling out r51975.
- http://trac.webkit.org/changeset/51975
-
- * jit/JITStubs.cpp:
- (JSC::DEFINE_STUB_FUNCTION):
- * runtime/JSString.h:
- (JSC::JSString::JSString):
- (JSC::JSString::appendStringInConstruct):
- * runtime/Operations.cpp:
- (JSC::jsAddSlowCase):
- * runtime/Operations.h:
- (JSC::jsString):
- (JSC::jsAdd):
-
-2009-12-10 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- Incorrect caching of prototype lookup with dictionary base
- https://bugs.webkit.org/show_bug.cgi?id=32402
-
- Make sure we don't add cached prototype lookup to the proto_list
- lookup chain if the top level object is a dictionary.
-
- * jit/JITStubs.cpp:
- (JSC::JITThunks::tryCacheGetByID):
-
-2009-12-10 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- https://bugs.webkit.org/show_bug.cgi?id=32400
- Switch remaining cases of string addition to use ropes.
-
- ~1% progression on Sunspidey.
-
- * jit/JITStubs.cpp:
- (JSC::DEFINE_STUB_FUNCTION):
- * runtime/JSString.h:
- (JSC::JSString::JSString):
- (JSC::JSString::appendStringInConstruct):
- * runtime/Operations.cpp:
- (JSC::jsAddSlowCase):
- * runtime/Operations.h:
- (JSC::jsString):
- (JSC::jsAdd):
-
-2009-12-10 Kent Hansen <kent.hansen@nokia.com>
-
- Reviewed by Geoffrey Garen.
-
- Remove JSObject::getPropertyAttributes() and all usage of it.
- https://bugs.webkit.org/show_bug.cgi?id=31933
-
- getOwnPropertyDescriptor() should be used instead.
-
- * JavaScriptCore.exp:
- * JavaScriptCore.order:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * debugger/DebuggerActivation.cpp:
- (JSC::DebuggerActivation::getOwnPropertyDescriptor):
- * debugger/DebuggerActivation.h:
- * runtime/JSObject.cpp:
- (JSC::JSObject::propertyIsEnumerable):
- * runtime/JSObject.h:
- * runtime/JSVariableObject.cpp:
- * runtime/JSVariableObject.h:
-
-2009-12-10 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt & Mark Rowe.
-
- https://bugs.webkit.org/show_bug.cgi?id=32367
- Add support for short Ropes (up to 3 entries) inline within JSString.
- (rather than externally allocating an object to hold the rope).
- Switch jsAdd of (JSString* + JSString*) to now make use of Ropes.
-
- ~1% progression on Sunspidey.
-
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::privateExecute):
- * jit/JITOpcodes.cpp:
- (JSC::JIT::privateCompileCTIMachineTrampolines):
- * jit/JITStubs.cpp:
- (JSC::DEFINE_STUB_FUNCTION):
- * runtime/JSString.cpp:
- (JSC::JSString::resolveRope):
- (JSC::JSString::toBoolean):
- (JSC::JSString::getStringPropertyDescriptor):
- * runtime/JSString.h:
- (JSC::JSString::Rope::Fiber::deref):
- (JSC::JSString::Rope::Fiber::ref):
- (JSC::JSString::Rope::Fiber::refAndGetLength):
- (JSC::JSString::Rope::append):
- (JSC::JSString::JSString):
- (JSC::JSString::~JSString):
- (JSC::JSString::value):
- (JSC::JSString::tryGetValue):
- (JSC::JSString::length):
- (JSC::JSString::canGetIndex):
- (JSC::JSString::appendStringInConstruct):
- (JSC::JSString::appendValueInConstructAndIncrementLength):
- (JSC::JSString::isRope):
- (JSC::JSString::string):
- (JSC::JSString::ropeLength):
- (JSC::JSString::getStringPropertySlot):
- * runtime/Operations.h:
- (JSC::jsString):
- (JSC::jsAdd):
- (JSC::resolveBase):
-
-2009-12-09 Anders Carlsson <andersca@apple.com>
-
- Reviewed by Geoffrey Garen.
-
- Fix three more things found by compiling with clang++.
-
- * runtime/Structure.h:
- (JSC::StructureTransitionTable::reifySingleTransition):
- Add the 'std' qualifier to the call to make_pair.
-
- * wtf/DateMath.cpp:
- (WTF::initializeDates):
- Incrementing a bool is deprecated according to the C++ specification.
-
- * wtf/PtrAndFlags.h:
- (WTF::PtrAndFlags::PtrAndFlags):
- Name lookup should not be done in dependent bases, so explicitly qualify the call to set.
-
-2009-12-09 Maciej Stachowiak <mjs@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Google reader gets stuck in the "Loading..." state and does not complete
- https://bugs.webkit.org/show_bug.cgi?id=32256
- <rdar://problem/7456388>
-
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emitSlow_op_jless): Fix some backward branches.
-
-2009-12-09 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- https://bugs.webkit.org/show_bug.cgi?id=32228
- Make destruction of ropes non-recursive to prevent stack exhaustion.
- Also, pass a UString& into initializeFiber rather than a Ustring::Rep*,
- since the Rep is not being ref counted this could result in usage of a
- Rep with refcount zero (where the Rep comes from a temporary UString
- returned from a function).
-
- * runtime/JSString.cpp:
- (JSC::JSString::Rope::destructNonRecursive):
- (JSC::JSString::Rope::~Rope):
- * runtime/JSString.h:
- (JSC::JSString::Rope::initializeFiber):
- * runtime/Operations.h:
- (JSC::concatenateStrings):
-
-2009-12-09 Zoltan Herczeg <zherczeg@inf.u-szeged.hu>
-
- Reviewed by Eric Seidel.
-
- https://bugs.webkit.org/show_bug.cgi?id=31930
-
- Update to r51457. ASSERTs changed to COMPILE_ASSERTs.
- The speedup is 25%.
-
- * runtime/JSGlobalData.cpp:
- (JSC::VPtrSet::VPtrSet):
-
-2009-12-09 Steve Block <steveblock@google.com>
-
- Reviewed by Adam Barth.
-
- Updates Android Makefiles with latest additions.
- https://bugs.webkit.org/show_bug.cgi?id=32278
-
- * Android.mk: Modified.
- * Android.v8.wtf.mk: Modified.
-
-2009-12-09 Sam Weinig <sam@webkit.org>
-
- Reviewed by Gavin Barraclough.
-
- Fix a bug found while trying to compile JavaScriptCore with clang++.
-
- * yarr/RegexPattern.h:
- (JSC::Yarr::PatternTerm::PatternTerm): Don't self assign here. Use false instead.
-
-2009-12-09 Anders Carlsson <andersca@apple.com>
-
- Reviewed by Sam Weinig.
-
- Attempt to fix the Windows build.
-
- * wtf/FastMalloc.h:
-
-2009-12-09 Anders Carlsson <andersca@apple.com>
-
- Reviewed by Sam Weinig.
-
- Fix some things found while trying to compile JavaScriptCore with clang++.
-
- * wtf/FastMalloc.h:
- Add correct exception specifications for the allocation/deallocation operators.
-
- * wtf/Vector.h:
- * wtf/VectorTraits.h:
- Fix a bunch of struct/class mismatches.
-
-2009-12-08 Maciej Stachowiak <mjs@apple.com>
-
- Reviewed by Darin Adler.
-
- move code generation portions of Nodes.cpp to bytecompiler directory
- https://bugs.webkit.org/show_bug.cgi?id=32284
-
- * bytecompiler/NodesCodegen.cpp: Copied from parser/Nodes.cpp. Removed parts that
- are not about codegen.
- * parser/Nodes.cpp: Removed everything that is about codegen.
-
- Update build systems:
-
- * Android.mk:
- * GNUmakefile.am:
- * JavaScriptCore.gypi:
- * JavaScriptCore.pri:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * JavaScriptCoreSources.bkl:
-
-2009-12-08 Kevin Watters <kevinwatters@gmail.com>
-
- Reviewed by Kevin Ollivier.
-
- [wx] Mac plugins support.
-
- https://bugs.webkit.org/show_bug.cgi?id=32236
-
- * wtf/Platform.h:
-
-2009-12-08 Dmitry Titov <dimich@chromium.org>
-
- Rubber-stamped by David Levin.
-
- Revert and reopen "Add asserts to RefCounted to make sure ref/deref happens on the right thread."
- It may have caused massive increase of reported leaks on the bots.
- https://bugs.webkit.org/show_bug.cgi?id=31639
-
- * GNUmakefile.am:
- * JavaScriptCore.gypi:
- * JavaScriptCore.vcproj/WTF/WTF.vcproj:
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * runtime/Structure.cpp:
- (JSC::Structure::Structure):
- * wtf/RefCounted.h:
- (WTF::RefCountedBase::ref):
- (WTF::RefCountedBase::hasOneRef):
- (WTF::RefCountedBase::refCount):
- (WTF::RefCountedBase::derefBase):
- * wtf/ThreadVerifier.h: Removed.
-
-2009-12-08 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk>
-
- Reviewed by Darin Adler.
-
- Make WebKit build correctly on FreeBSD, IA64, and Alpha.
- Based on work by Petr Salinger <Petr.Salinger@seznam.cz>,
- and Colin Watson <cjwatson@ubuntu.com>.
-
- * wtf/Platform.h:
-
-2009-12-08 Dmitry Titov <dimich@chromium.org>
-
- Reviewed by Darin Adler.
-
- Add asserts to RefCounted to make sure ref/deref happens on the right thread.
- https://bugs.webkit.org/show_bug.cgi?id=31639
-
- * runtime/Structure.cpp:
- (JSC::Structure::Structure): Disable thread verification on this class since it uses addressOfCount().
- * wtf/RefCounted.h:
- (WTF::RefCountedBase::ref): Add ASSERT.
- (WTF::RefCountedBase::hasOneRef): Ditto.
- (WTF::RefCountedBase::refCount): Ditto.
- (WTF::RefCountedBase::derefBase): Ditto.
- (WTF::RefCountedBase::disableThreadVerification): delegate to ThreadVerifier method.
- * wtf/ThreadVerifier.h: Added.
- (WTF::ThreadVerifier::ThreadVerifier): New Debug-only class to verify that ref/deref of RefCounted is done on the same thread.
- (WTF::ThreadVerifier::activate): Activates checks. Called when ref count becomes above 2.
- (WTF::ThreadVerifier::deactivate): Deactivates checks. Called when ref count drops below 2.
- (WTF::ThreadVerifier::disableThreadVerification): used on objects that should not be checked (StringImpl etc)
- (WTF::ThreadVerifier::verifyThread):
- * GNUmakefile.am: Add ThreadVerifier.h to the build file.
- * JavaScriptCore.gypi: Ditto.
- * JavaScriptCore.vcproj/WTF/WTF.vcproj: Ditto.
- * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
-
-2009-12-08 Steve Block <steveblock@google.com>
-
- Reviewed by Adam Barth.
-
- [Android] Adds Makefiles for Android port.
- https://bugs.webkit.org/show_bug.cgi?id=31325
-
- * Android.mk: Added.
- * Android.v8.wtf.mk: Added.
-
-2009-12-07 Dmitry Titov <dimich@chromium.org>
-
- Rubber-stamped by Darin Adler.
-
- Remove ENABLE_SHARED_SCRIPT flags
- https://bugs.webkit.org/show_bug.cgi?id=32245
- This patch was obtained by "git revert" command and then un-reverting of ChangeLog files.
-
- * Configurations/FeatureDefines.xcconfig:
- * wtf/Platform.h:
-
-2009-12-07 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (Windows build fixage part I).
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2009-12-05 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- https://bugs.webkit.org/show_bug.cgi?id=32184
- Handle out-of-memory conditions with JSC Ropes with a JS exception, rather than crashing.
- Switch from using fastMalloc to tryFastMalloc, pass an ExecState to record the exception on.
-
- * API/JSCallbackObjectFunctions.h:
- (JSC::::toString):
- * API/JSValueRef.cpp:
- (JSValueIsStrictEqual):
- * JavaScriptCore.exp:
- * bytecompiler/BytecodeGenerator.cpp:
- (JSC::BytecodeGenerator::emitEqualityOp):
- * debugger/DebuggerCallFrame.cpp:
- (JSC::DebuggerCallFrame::functionName):
- (JSC::DebuggerCallFrame::calculatedFunctionName):
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::callEval):
- (JSC::Interpreter::privateExecute):
- * jit/JITStubs.cpp:
- (JSC::DEFINE_STUB_FUNCTION):
- * profiler/ProfileGenerator.cpp:
- (JSC::ProfileGenerator::addParentForConsoleStart):
- * profiler/Profiler.cpp:
- (JSC::Profiler::willExecute):
- (JSC::Profiler::didExecute):
- (JSC::Profiler::createCallIdentifier):
- (JSC::createCallIdentifierFromFunctionImp):
- * profiler/Profiler.h:
- * runtime/ArrayPrototype.cpp:
+ (JSC::arrayProtoFuncToLocaleString):
+ (JSC::arrayProtoFuncJoin):
+ (JSC::arrayProtoFuncConcat):
+ (JSC::arrayProtoFuncPop):
+ (JSC::arrayProtoFuncPush):
+ (JSC::arrayProtoFuncReverse):
+ (JSC::arrayProtoFuncShift):
+ (JSC::arrayProtoFuncSlice):
+ (JSC::arrayProtoFuncSort):
+ (JSC::arrayProtoFuncSplice):
+ (JSC::arrayProtoFuncUnShift):
+ (JSC::arrayProtoFuncFilter):
+ (JSC::arrayProtoFuncMap):
+ (JSC::arrayProtoFuncEvery):
+ (JSC::arrayProtoFuncForEach):
+ (JSC::arrayProtoFuncSome):
+ (JSC::arrayProtoFuncReduce):
+ (JSC::arrayProtoFuncReduceRight):
(JSC::arrayProtoFuncIndexOf):
(JSC::arrayProtoFuncLastIndexOf):
+ * runtime/BooleanConstructor.cpp:
+ (JSC::callBooleanConstructor):
+ * runtime/BooleanPrototype.cpp:
+ (JSC::booleanProtoFuncToString):
+ (JSC::booleanProtoFuncValueOf):
* runtime/DateConstructor.cpp:
- (JSC::constructDate):
- * runtime/FunctionPrototype.cpp:
- (JSC::functionProtoFuncToString):
- * runtime/InternalFunction.cpp:
- (JSC::InternalFunction::name):
- (JSC::InternalFunction::displayName):
- (JSC::InternalFunction::calculatedDisplayName):
- * runtime/InternalFunction.h:
- * runtime/JSCell.cpp:
- (JSC::JSCell::getString):
- * runtime/JSCell.h:
- (JSC::JSValue::getString):
- * runtime/JSONObject.cpp:
- (JSC::gap):
- (JSC::Stringifier::Stringifier):
- (JSC::Stringifier::appendStringifiedValue):
- * runtime/JSObject.cpp:
- (JSC::JSObject::putDirectFunction):
- (JSC::JSObject::putDirectFunctionWithoutTransition):
- (JSC::JSObject::defineOwnProperty):
- * runtime/JSObject.h:
- * runtime/JSPropertyNameIterator.cpp:
- (JSC::JSPropertyNameIterator::get):
- * runtime/JSString.cpp:
- (JSC::JSString::Rope::~Rope):
- (JSC::JSString::resolveRope):
- (JSC::JSString::getPrimitiveNumber):
- (JSC::JSString::toNumber):
- (JSC::JSString::toString):
- (JSC::JSString::toThisString):
- (JSC::JSString::getStringPropertyDescriptor):
- * runtime/JSString.h:
- (JSC::JSString::Rope::createOrNull):
- (JSC::JSString::Rope::operator new):
- (JSC::JSString::value):
- (JSC::JSString::tryGetValue):
- (JSC::JSString::getIndex):
- (JSC::JSString::getStringPropertySlot):
- (JSC::JSValue::toString):
- * runtime/JSValue.h:
- * runtime/NativeErrorConstructor.cpp:
- (JSC::NativeErrorConstructor::NativeErrorConstructor):
- * runtime/Operations.cpp:
- (JSC::JSValue::strictEqualSlowCase):
- * runtime/Operations.h:
- (JSC::JSValue::equalSlowCaseInline):
- (JSC::JSValue::strictEqualSlowCaseInline):
- (JSC::JSValue::strictEqual):
- (JSC::jsLess):
- (JSC::jsLessEq):
- (JSC::jsAdd):
- (JSC::concatenateStrings):
- * runtime/PropertyDescriptor.cpp:
- (JSC::PropertyDescriptor::equalTo):
- * runtime/PropertyDescriptor.h:
- * runtime/StringPrototype.cpp:
- (JSC::stringProtoFuncReplace):
- (JSC::stringProtoFuncToLowerCase):
- (JSC::stringProtoFuncToUpperCase):
-
-2009-12-07 Nikolas Zimmermann <nzimmermann@rim.com>
-
- Reviewed by Holger Freyther.
-
- Turn on (SVG) Filters support, by default.
- https://bugs.webkit.org/show_bug.cgi?id=32224
-
- * Configurations/FeatureDefines.xcconfig: Enable FILTERS build flag.
-
-2009-12-07 Steve Falkenburg <sfalken@apple.com>
-
- Build fix. Be flexible about which version of ICU is used on Windows.
-
- * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: Add optional xcopy commands to copy ICU 4.2.
-
-2009-12-07 Maciej Stachowiak <mjs@apple.com>
-
- Reviewed by Oliver Hunt.
-
- op_loop_if_less JIT codegen is broken for 64-bit
- https://bugs.webkit.org/show_bug.cgi?id=32221
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_loop_if_false): Fix codegen in this version - test was backwards.
-
-2009-12-07 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Maciej Stachowiak.
-
- Object.create fails if properties on the descriptor are getters
- https://bugs.webkit.org/show_bug.cgi?id=32219
-
- Correctly initialise the PropertySlots with the descriptor object.
-
- * runtime/ObjectConstructor.cpp:
- (JSC::toPropertyDescriptor):
-
-2009-12-06 Maciej Stachowiak <mjs@apple.com>
-
- Not reviewed, build fix.
-
- Actually tested 64-bit *and* 32-bit build this time.
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_loop_if_false):
-
-2009-12-06 Maciej Stachowiak <mjs@apple.com>
-
- Not reviewed, build fix.
-
- Really really fix 64-bit build for prior patch (actually tested this time).
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_loop_if_false):
- (JSC::JIT::emitSlow_op_loop_if_false):
-
-2009-12-06 Maciej Stachowiak <mjs@apple.com>
-
- Not reviewed, build fix.
-
- Really fix 64-bit build for prior patch.
-
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emitSlow_op_jless):
-
-2009-12-06 Maciej Stachowiak <mjs@apple.com>
-
- Not reviewed, build fix.
-
- Fix 64-bit build for prior patch.
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emitSlow_op_loop_if_less):
-
-2009-12-05 Maciej Stachowiak <mjs@apple.com>
-
- Reviewed by Oliver Hunt.
-
- conway benchmark spends half it's time in op_less (jump fusion fails)
- https://bugs.webkit.org/show_bug.cgi?id=32190
-
- <1% speedup on SunSpider and V8
- 2x speedup on "conway" benchmark
-
- Two optimizations:
- 1) Improve codegen for logical operators &&, || and ! in a condition context
-
- When generating code for combinations of &&, || and !, in a
- condition context (i.e. in an if statement or loop condition), we
- used to produce a value, and then separately jump based on its
- truthiness. Now we pass the false and true targets in, and let the
- logical operators generate jumps directly. This helps in four
- ways:
-
- a) Individual clauses of a short-circuit logical operator can now
- jump directly to the then or else clause of an if statement (or to
- the top or exit of a loop) instead of jumping to a jump.
-
- b) It used to be that jump fusion with the condition of the first
- clause of a logical operator was inhibited, because the register
- was ref'd to be used later, in the actual condition jump; this no
- longer happens since a jump straight to the final target is
- generated directly.
-
- c) It used to be that jump fusion with the condition of the second
- clause of a logical operator was inhibited, because there was a
- jump target right after the second clause and before the actual
- condition jump. But now it's no longer necessary for the first
- clause to jump there so jump fusion is not blocked.
-
- d) We avoid generating excess mov statements in some cases.
-
- As a concrete example this source:
-
- if (!((x < q && y < q) || (t < q && z < q))) {
- // ...
- }
-
- Used to generate this bytecode:
-
- [ 34] less r1, r-15, r-19
- [ 38] jfalse r1, 7(->45)
- [ 41] less r1, r-16, r-19
- [ 45] jtrue r1, 14(->59)
- [ 48] less r1, r-17, r-19
- [ 52] jfalse r1, 7(->59)
- [ 55] less r1, r-18, r-19
- [ 59] jtrue r1, 17(->76)
-
- And now generates this bytecode (also taking advantage of the second optimization below):
-
- [ 34] jnless r-15, r-19, 8(->42)
- [ 38] jless r-16, r-19, 26(->64)
- [ 42] jnless r-17, r-19, 8(->50)
- [ 46] jless r-18, r-19, 18(->64)
-
- Note the jump fusion and the fact that there's less jump
- indirection - three of the four jumps go straight to the target
- clause instead of indirecting through another jump.
-
- 2) Implement jless opcode to take advantage of the above, since we'll now often generate
- a less followed by a jtrue where fusion is not forbidden.
-
- * parser/Nodes.h:
- (JSC::ExpressionNode::hasConditionContextCodegen): Helper function to determine
- whether a node supports special conditional codegen. Return false as this is the default.
- (JSC::ExpressionNode::emitBytecodeInConditionContext): Assert not reached - only really
- defined for nodes that do have conditional codegen.
- (JSC::UnaryOpNode::expr): Add const version.
- (JSC::LogicalNotNode::hasConditionContextCodegen): Returne true only if subexpression
- supports it.
- (JSC::LogicalOpNode::hasConditionContextCodegen): Return true.
- * parser/Nodes.cpp:
- (JSC::LogicalNotNode::emitBytecodeInConditionContext): Implemented - just swap
- the true and false targets for the child node.
- (JSC::LogicalOpNode::emitBytecodeInConditionContext): Implemented - handle jumps
- directly, improving codegen quality. Also handles further nested conditional codegen.
- (JSC::ConditionalNode::emitBytecode): Use condition context codegen when available.
- (JSC::IfNode::emitBytecode): ditto
- (JSC::IfElseNode::emitBytecode): ditto
- (JSC::DoWhileNode::emitBytecode): ditto
- (JSC::WhileNode::emitBytecode): ditto
- (JSC::ForNode::emitBytecode): ditto
-
- * bytecode/Opcode.h:
- - Added loop_if_false opcode - needed now that falsey jumps can be backwards.
- - Added jless opcode to take advantage of new fusion opportunities.
- * bytecode/CodeBlock.cpp:
- (JSC::CodeBlock::dump): Handle above.
- * bytecompiler/BytecodeGenerator.cpp:
- (JSC::BytecodeGenerator::emitJumpIfTrue): Add peephole for less + jtrue ==> jless.
- (JSC::BytecodeGenerator::emitJumpIfFalse): Add handling of backwrds falsey jumps.
- * bytecompiler/BytecodeGenerator.h:
- (JSC::BytecodeGenerator::emitNodeInConditionContext): Wrapper to handle tracking of
- overly deep expressions etc.
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::privateExecute): Implement the two new opcodes (loop_if_false, jless).
- * jit/JIT.cpp:
- (JSC::JIT::privateCompileMainPass): Implement JIT support for the two new opcodes.
- (JSC::JIT::privateCompileSlowCases): ditto
- * jit/JIT.h:
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_jless):
- (JSC::JIT::emitSlow_op_jless): ditto
- (JSC::JIT::emitBinaryDoubleOp): ditto
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emitSlow_op_loop_if_less): ditto
- (JSC::JIT::emit_op_loop_if_false): ditto
- (JSC::JIT::emitSlow_op_loop_if_false): ditto
- * jit/JITStubs.cpp:
- * jit/JITStubs.h:
- (JSC::):
-
-2009-12-04 Kent Hansen <kent.hansen@nokia.com>
-
- Reviewed by Darin Adler.
-
- JavaScript delete operator should return false for string properties
- https://bugs.webkit.org/show_bug.cgi?id=32012
-
- * runtime/StringObject.cpp:
- (JSC::StringObject::deleteProperty):
-
-2009-12-03 Drew Wilson <atwilson@chromium.org>
-
- Rolled back r51633 because it causes a perf regression in Chromium.
-
- * wtf/Platform.h:
-
-2009-12-03 Gavin Barraclough <barraclough@apple.com>
-
- Try and fix the Windows build.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Export a symbol that should be exported.
-
-2009-12-03 Mark Rowe <mrowe@apple.com>
-
- Try and fix the Mac build.
-
- * JavaScriptCore.exp: Export a symbol that should be exported.
-
-2009-12-03 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- REGRESSION(4.0.3-48777): Crash in JSC::ExecState::propertyNames() (Debug-only?)
- https://bugs.webkit.org/show_bug.cgi?id=32133
-
- Work around odd GCC-ism and correct the scopechain for use by
- calls made while a cachedcall is active on the callstack.
-
- * interpreter/CachedCall.h:
- (JSC::CachedCall::newCallFrame):
- * runtime/JSArray.cpp:
- (JSC::AVLTreeAbstractorForArrayCompare::compare_key_key):
- * runtime/StringPrototype.cpp:
- (JSC::stringProtoFuncReplace):
-
-2009-12-03 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver "Brraaaaiiiinnnnnzzzzzzzz" Hunt.
-
- https://bugs.webkit.org/show_bug.cgi?id=32136
- Add a rope representation to JSString. Presently JSString always holds its data in UString form.
- Instead, allow the result of a string concatenation to be represented in a tree form - with a
- variable sized, reference-counted rope node retaining a set of UString::Reps (or other rope nopes).
-
- Strings must still currently be resolved down to a flat UString representation before being used,
- but by holding the string in a rope representation during construction we can avoid copying data
- until we know the final size of the string.
-
- ~2% progression on SunSpider (~25% on date-format-xparb, ~20% on string-validate-input).
-
- * JavaScriptCore.exp:
-
- - Update exports.
-
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::privateExecute):
-
- - Make use of new JSString::length() method to avoid prematurely resolving ropes.
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::privateCompileCTIMachineTrampolines):
-
- - Switch the string length trampoline to read the length directly from JSString::m_length,
- rather than from the JSString's UString::Rep's 'len' property.
-
- * jit/JITStubs.cpp:
- (JSC::DEFINE_STUB_FUNCTION):
-
- - Modify op_add such that addition of two strings, where either or both strings are already
- in rope representation, produces a rope as a result.
-
- * runtime/JSString.cpp:
- (JSC::JSString::Rope::~Rope):
- (JSC::copyChars):
- (JSC::JSString::resolveRope):
- (JSC::JSString::getPrimitiveNumber):
- (JSC::JSString::toBoolean):
- (JSC::JSString::toNumber):
- (JSC::JSString::toString):
- (JSC::JSString::toThisString):
- (JSC::JSString::getStringPropertyDescriptor):
- * runtime/JSString.h:
- (JSC::JSString::Rope::Fiber::Fiber):
- (JSC::JSString::Rope::Fiber::destroy):
- (JSC::JSString::Rope::Fiber::isRope):
- (JSC::JSString::Rope::Fiber::rope):
- (JSC::JSString::Rope::Fiber::string):
- (JSC::JSString::Rope::create):
- (JSC::JSString::Rope::initializeFiber):
- (JSC::JSString::Rope::ropeLength):
- (JSC::JSString::Rope::stringLength):
- (JSC::JSString::Rope::fibers):
- (JSC::JSString::Rope::Rope):
- (JSC::JSString::Rope::operator new):
- (JSC::JSString::JSString):
- (JSC::JSString::value):
- (JSC::JSString::length):
- (JSC::JSString::isRope):
- (JSC::JSString::rope):
- (JSC::JSString::string):
- (JSC::JSString::canGetIndex):
- (JSC::jsSingleCharacterSubstring):
- (JSC::JSString::getIndex):
- (JSC::jsSubstring):
- (JSC::JSString::getStringPropertySlot):
-
- - Add rope form.
-
- * runtime/Operations.h:
- (JSC::jsAdd):
- (JSC::concatenateStrings):
-
- - Update string concatenation, and addition of ropes, to produce ropes.
-
- * runtime/StringObject.cpp:
- (JSC::StringObject::getOwnPropertyNames):
-
- - Make use of new JSString::length() method to avoid prematurely resolving ropes.
-
-2009-11-23 Jeremy Moskovich <jeremy@chromium.org>
-
- Reviewed by Eric Seidel.
-
- Switch Chrome/Mac to use Core Text APIs rather than ATSUI APIs.
- https://bugs.webkit.org/show_bug.cgi?id=31802
-
- No test since this is already covered by existing pixel tests.
-
- * wtf/Platform.h: #define USE_CORE_TEXT for Chrome/Mac.
-
-2009-12-02 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- Add files missed in prior patch.
-
- * runtime/JSZombie.cpp:
- (JSC::):
- (JSC::JSZombie::leakedZombieStructure):
- * runtime/JSZombie.h: Added.
- (JSC::JSZombie::JSZombie):
- (JSC::JSZombie::isZombie):
- (JSC::JSZombie::classInfo):
- (JSC::JSZombie::isGetterSetter):
- (JSC::JSZombie::isAPIValueWrapper):
- (JSC::JSZombie::isPropertyNameIterator):
- (JSC::JSZombie::getCallData):
- (JSC::JSZombie::getConstructData):
- (JSC::JSZombie::getUInt32):
- (JSC::JSZombie::toPrimitive):
- (JSC::JSZombie::getPrimitiveNumber):
- (JSC::JSZombie::toBoolean):
- (JSC::JSZombie::toNumber):
- (JSC::JSZombie::toString):
- (JSC::JSZombie::toObject):
- (JSC::JSZombie::markChildren):
- (JSC::JSZombie::put):
- (JSC::JSZombie::deleteProperty):
- (JSC::JSZombie::toThisObject):
- (JSC::JSZombie::toThisString):
- (JSC::JSZombie::toThisJSString):
- (JSC::JSZombie::getJSNumber):
- (JSC::JSZombie::getOwnPropertySlot):
-
-2009-12-02 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- Add zombies to JSC
- https://bugs.webkit.org/show_bug.cgi?id=32103
-
- Add a compile time flag to make the JSC collector replace "unreachable"
- objects with zombie objects. The zombie object is a JSCell subclass that
- ASSERTs on any attempt to use the JSCell methods. In addition there are
- a number of additional assertions in bottleneck code to catch zombie usage
- as quickly as possible.
-
- Grrr. Argh. Brains.
-
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * interpreter/Register.h:
- (JSC::Register::Register):
- * runtime/ArgList.h:
- (JSC::MarkedArgumentBuffer::append):
- (JSC::ArgList::ArgList):
- * runtime/Collector.cpp:
- (JSC::Heap::destroy):
- (JSC::Heap::sweep):
- * runtime/Collector.h:
- * runtime/JSCell.h:
- (JSC::JSCell::isZombie):
- (JSC::JSValue::isZombie):
- * runtime/JSValue.h:
- (JSC::JSValue::decode):
- (JSC::JSValue::JSValue):
- * wtf/Platform.h:
-
-2009-12-01 Jens Alfke <snej@chromium.org>
-
- Reviewed by Darin Adler.
-
- Added variants of find/contains/add that allow a foreign key type to be used.
- This will allow AtomicString-keyed maps to be queried by C string without
- having to create a temporary AtomicString (see HTTPHeaderMap.)
- The code for this is adapted from the equivalent in HashSet.h.
-
- * wtf/HashMap.h:
- (WTF::HashMap::find):
- (WTF::HashMap::contains):
- (WTF::HashMap::add):
- * wtf/HashSet.h: Changed "method" to "function member" in a comment.
-
-2009-12-01 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk>
-
- Revert 51551 because it broke GTK+.
-
- * wtf/Platform.h:
-
-2009-11-30 Gavin Barraclough <barraclough@apple.com>
-
- Windows Build fix. Reviewed by NOBODY.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2009-11-24 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Geoff Garen.
-
- Bug 31859 - Make world selection for JSC IsolatedWorlds automagical.
-
- WebCore presently has to explicitly specify the world before entering into JSC,
- which is a little fragile (particularly since property access via a
- getter/setter might invoke execution). Instead derive the current world from
- the lexical global object.
-
- Remove the temporary duct tape of willExecute/didExecute virtual hooks on the JSGlobalData::ClientData - these are no longer necessary.
-
- * API/JSBase.cpp:
- (JSEvaluateScript):
- * API/JSObjectRef.cpp:
- (JSObjectCallAsFunction):
- * JavaScriptCore.exp:
- * runtime/JSGlobalData.cpp:
- * runtime/JSGlobalData.h:
-
-2009-11-30 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Kenneth Rohde Christiansen.
-
- [Qt] Remove obsolete PLATFORM(KDE) code
- https://bugs.webkit.org/show_bug.cgi?id=31958
-
- KDE is now using unpatched QtWebKit.
-
- * parser/Lexer.cpp: Remove obsolete KDE_USE_FINAL guard
- * wtf/Platform.h: Remove PLATFORM(KDE) definition and code
- section that is guarded with it.
-
-2009-11-30 Jan-Arve Sæther <jan-arve.saether@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- [Qt] Fix compilation with win32-icc
-
- The Intel compiler does not support the __has_trivial_constructor type
- trait. The Intel Compiler can report itself as _MSC_VER >= 1400. The
- reason for that is that the Intel Compiler depends on the Microsoft
- Platform SDK, and in order to try to be "fully" MS compatible it will
- "pretend" to be the same MS compiler as was shipped with the MS PSDK.
- (Thus, compiling with win32-icc with VC8 SDK will make the source code
- "think" the compiler at hand supports this type trait).
-
- * wtf/TypeTraits.h:
-
-2009-11-29 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Eric Seidel.
-
- [Qt] Mac build has JIT disabled
- https://bugs.webkit.org/show_bug.cgi?id=31828
-
- * wtf/Platform.h: Enable JIT for Qt Mac builds
-
-2009-11-28 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Eric Seidel.
-
- Apply workaround for the limitation of VirtualFree with MEM_RELEASE to all ports running on Windows
- https://bugs.webkit.org/show_bug.cgi?id=31943
-
- * runtime/MarkStack.h:
- (JSC::MarkStack::MarkStackArray::shrinkAllocation):
-
-2009-11-28 Zoltan Herczeg <zherczeg@inf.u-szeged.hu>
-
- Reviewed by Gavin Barraclough.
-
- https://bugs.webkit.org/show_bug.cgi?id=31930
-
- Seems a typo. We don't need ~270k memory to determine the vptrs.
-
- * runtime/JSGlobalData.cpp:
- (JSC::VPtrSet::VPtrSet):
-
-2009-11-27 Shinichiro Hamaji <hamaji@chromium.org>
-
- Unreviewed.
-
- Move GOwnPtr* from wtf to wtf/gtk
- https://bugs.webkit.org/show_bug.cgi?id=31793
-
- Build fix for chromium after r51423.
- Exclude gtk directory from chromium build.
-
- * JavaScriptCore.gyp/JavaScriptCore.gyp:
-
-2009-11-25 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- Incorrect behaviour of jneq_null in the interpreter
- https://bugs.webkit.org/show_bug.cgi?id=31901
-
- Correct the logic of jneq_null. This is already covered by existing tests.
-
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::privateExecute):
-
-2009-11-26 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Oliver Hunt.
-
- Move GOwnPtr* from wtf to wtf/gtk
- https://bugs.webkit.org/show_bug.cgi?id=31793
-
- * GNUmakefile.am: Change the path for GOwnPtr.*.
- * JavaScriptCore.gyp/JavaScriptCore.gyp: Remove
- GOwnPtr.cpp from the exclude list.
- * JavaScriptCore.gypi: Change the path for GOwnPtr.*.
- * wscript: Remove GOwnPtr.cpp from the exclude list.
- * wtf/GOwnPtr.cpp: Removed.
- * wtf/GOwnPtr.h: Removed.
- * wtf/Threading.h: Change the path for GOwnPtr.h.
- * wtf/gtk/GOwnPtr.cpp: Copied from JavaScriptCore/wtf/GOwnPtr.cpp.
- * wtf/gtk/GOwnPtr.h: Copied from JavaScriptCore/wtf/GOwnPtr.h.
- * wtf/unicode/glib/UnicodeGLib.h: Change the path for GOwnPtr.h.
-
-2009-11-24 Dmitry Titov <dimich@chromium.org>
-
- Reviewed by Eric Seidel.
-
- Add ENABLE_SHARED_SCRIPT feature define and flag for build-webkit
- https://bugs.webkit.org/show_bug.cgi?id=31444
-
- * Configurations/FeatureDefines.xcconfig:
- * wtf/Platform.h:
-
-2009-11-24 Chris Marrin <cmarrin@apple.com>
-
- Reviewed by Simon Fraser.
-
- Add ability to enable ACCELERATED_COMPOSITING on Windows (currently disabled)
- https://bugs.webkit.org/show_bug.cgi?id=27314
-
- * wtf/Platform.h:
-
-2009-11-24 Jason Smith <dark.panda@gmail.com>
-
- Reviewed by Alexey Proskuryakov.
-
- RegExp#exec's returned Array-like object behaves differently from
- regular Arrays
- https://bugs.webkit.org/show_bug.cgi?id=31689
-
- * JavaScriptCore/runtime/RegExpConstructor.cpp: ensure that undefined
- values are added to the returned RegExpMatchesArray
-
-2009-11-24 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Alexey Proskuryakov.
-
- JSON.stringify performance on undefined is very poor
- https://bugs.webkit.org/show_bug.cgi?id=31839
-
- Switch from a UString to a Vector<UChar> when building
- the JSON string, allowing us to safely remove the substr-copy
- we otherwise did when unwinding an undefined property.
-
- Also turns out to be a ~5% speedup on stringification.
-
- * runtime/JSONObject.cpp:
- (JSC::Stringifier::StringBuilder::append):
- (JSC::Stringifier::stringify):
- (JSC::Stringifier::Holder::appendNextProperty):
-
-2009-11-24 Mark Rowe <mrowe@apple.com>
-
- Fix production builds where the source tree may be read-only.
-
- * JavaScriptCore.xcodeproj/project.pbxproj:
-
-2009-11-23 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Kenneth Rohde Christiansen.
-
- Include "config.h" to meet Coding Style Guidelines
- https://bugs.webkit.org/show_bug.cgi?id=31792
-
- * wtf/unicode/UTF8.cpp:
- * wtf/unicode/glib/UnicodeGLib.cpp:
- * wtf/unicode/wince/UnicodeWince.cpp:
-
-2009-11-23 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Streamlined some Math functions where we expect or know the result not
- to be representable as an int.
-
- SunSpider says 0.6% faster.
-
- * runtime/JSNumberCell.h:
- (JSC::JSValue::JSValue):
- * runtime/JSValue.h:
- (JSC::JSValue::):
- (JSC::jsDoubleNumber):
- (JSC::JSValue::JSValue): Added a function for making a numeric JSValue
- and skipping the "can I encode this as an int?" check, avoiding the
- overhead of int <-> double roundtripping and double <-> double comparison
- and branching.
-
- * runtime/MathObject.cpp:
- (JSC::mathProtoFuncACos):
- (JSC::mathProtoFuncASin):
- (JSC::mathProtoFuncATan):
- (JSC::mathProtoFuncATan2):
- (JSC::mathProtoFuncCos):
- (JSC::mathProtoFuncExp):
- (JSC::mathProtoFuncLog):
- (JSC::mathProtoFuncRandom):
- (JSC::mathProtoFuncSin):
- (JSC::mathProtoFuncSqrt):
- (JSC::mathProtoFuncTan): For these functions, which we expect or know
- to produce results not representable as ints, call jsDoubleNumber instead
- of jsNumber.
-
-2009-11-23 Mark Rowe <mrowe@apple.com>
-
- Unreviewed. Unbreak the regression tests after r51329.
-
- * API/JSBase.cpp:
- (JSEvaluateScript): Null-check clientData before dereferencing it.
- * API/JSObjectRef.cpp:
- (JSObjectCallAsFunction): Ditto.
-
-2009-11-23 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Geoff Garen.
-
- Part 1/3 of <rdar://problem/7377477> REGRESSION: Many web pages fail to render after interesting script runs in isolated world
-
- Some clients of the JavaScriptCore API expect to be able to make callbacks over the JSC API,
- and for this to automagically cause execution to take place in the world associated with the
- global object associated with the ExecState (JSContextRef) passed. However this is not how
- things work - the world must be explicitly set within WebCore.
-
- Making this work just for API calls to evaluate & call will be a far from perfect solution,
- since direct (non-API) use of JSC still relies on WebCore setting the current world correctly.
- A better solution would be to make this all work automagically all throughout WebCore, but this
- will require more refactoring.
-
- Since the API is in JSC but worlds only exist in WebCore, add callbacks on the JSGlobalData::ClientData
- to allow it to update the current world on entry/exit via the JSC API. This is temporary duck
- tape, and should be removed once the current world no longer needs to be explicitly tracked.
-
- * API/JSBase.cpp:
- (JSEvaluateScript):
- * API/JSObjectRef.cpp:
- (JSObjectCallAsFunction):
- * JavaScriptCore.exp:
- * runtime/JSGlobalData.cpp:
- (JSC::JSGlobalData::ClientData::beginningExecution):
- (JSC::JSGlobalData::ClientData::completedExecution):
- * runtime/JSGlobalData.h:
-
-2009-11-23 Steve Block <steveblock@google.com>
-
- Reviewed by Dmitry Titov.
-
- Adds MainThreadAndroid.cpp with Android-specific WTF threading functions.
- https://bugs.webkit.org/show_bug.cgi?id=31807
-
- * wtf/android: Added.
- * wtf/android/MainThreadAndroid.cpp: Added.
- (WTF::timeoutFired):
- (WTF::initializeMainThreadPlatform):
- (WTF::scheduleDispatchFunctionsOnMainThread):
-
-2009-11-23 Alexey Proskuryakov <ap@apple.com>
-
- Reviewed by Brady Eidson.
-
- https://bugs.webkit.org/show_bug.cgi?id=31748
- Make WebSocketHandleCFNet respect proxy auto-configuration files via CFProxySupport
-
- * JavaScriptCore.exp: Export callOnMainThreadAndWait.
-
-2009-11-23 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Kenneth Rohde Christiansen.
-
- [Symbian] Fix lastIndexOf() for Symbian
- https://bugs.webkit.org/show_bug.cgi?id=31773
-
- Symbian soft floating point library has problems with operators
- comparing NaN to numbers. Without a workaround lastIndexOf()
- function does not work.
-
- Patch developed by David Leong.
-
- * runtime/StringPrototype.cpp:
- (JSC::stringProtoFuncLastIndexOf):Add an extra test
- to check for NaN for Symbian.
-
-2009-11-23 Steve Block <steveblock@google.com>
-
- Reviewed by Eric Seidel.
-
- Android port lacks implementation of atomicIncrement and atomicDecrement.
- https://bugs.webkit.org/show_bug.cgi?id=31715
-
- * wtf/Threading.h: Modified.
- (WTF::atomicIncrement): Added Android implementation.
- (WTF::atomicDecrement): Added Android implementation.
-
-2009-11-22 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Unreviewed.
-
- [Qt] Sort source lists and remove obsolete comments
- from the build system.
-
- * JavaScriptCore.pri:
-
-2009-11-21 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Eric Seidel.
-
- [Qt][Mac] Turn on multiple JavaScript threads for QtWebkit on Mac
- https://bugs.webkit.org/show_bug.cgi?id=31753
-
- * wtf/Platform.h:
-
-2009-11-19 Steve Block <steveblock@google.com>
-
- Android port lacks configuration in Platform.h and config.h.
- https://bugs.webkit.org/show_bug.cgi?id=31671
-
- * wtf/Platform.h: Modified. Added Android-specific configuration.
-
-2009-11-19 Alexey Proskuryakov <ap@apple.com>
-
- Reviewed by Darin Adler.
-
- https://bugs.webkit.org/show_bug.cgi?id=31690
- Make SocketStreamHandleCFNet work on Windows
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * wtf/MainThread.cpp:
- (WTF::FunctionWithContext::FunctionWithContext):
- (WTF::dispatchFunctionsFromMainThread):
- (WTF::callOnMainThreadAndWait):
- * wtf/MainThread.h:
- Re-add callOnMainThreadAndWait(), which was removed in bug 23926.
-
-2009-11-19 Dmitry Titov <dimich@chromium.org>
-
- Reviewed by David Levin.
-
- isMainThread() on Chromium (Mac and Linux) is so slow it timeouts LayoutTests..
- https://bugs.webkit.org/show_bug.cgi?id=31693
-
- * wtf/ThreadingPthreads.cpp:
- (WTF::initializeThreading): grab and use the pthread_t of the main thread instead of ThreadIdentifier.
- (WTF::isMainThread): Ditto.
-
-2009-11-19 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Darin Adler.
-
- Remove HAVE(STRING_H) guard from JavaScriptCore
- https://bugs.webkit.org/show_bug.cgi?id=31668
-
- * config.h:
- * runtime/UString.cpp:
-
-2009-11-19 Dumitru Daniliuc <dumi@chromium.org>
-
- Reviewed by Dmitry Titov.
-
- Fixing a bug in MessageQueue::removeIf() that leads to an
- assertion failure.
-
- https://bugs.webkit.org/show_bug.cgi?id=31657
-
- * wtf/MessageQueue.h:
- (WTF::MessageQueue::removeIf):
-
-2009-11-19 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Darin Adler.
-
- Remove HAVE(FLOAT_H) guard
- https://bugs.webkit.org/show_bug.cgi?id=31661
-
- JavaScriptCore has a dependency on float.h, there is
- no need to guard float.h.
-
- * runtime/DatePrototype.cpp: Remove include directive
- for float.h as it is included in MathExtras.h already.
- * runtime/Operations.cpp: Ditto.
- * runtime/UString.cpp: Ditto.
- * wtf/dtoa.cpp: Ditto.
- * wtf/MathExtras.h: Remove HAVE(FLOAT_H) guard.
- * wtf/Platform.h: Ditto.
-
-2009-11-19 Thiago Macieira <thiago.macieira@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- Build fix for 32-bit Sparc machines: these machines are big-endian.
-
- * wtf/Platform.h:
-
-2009-11-18 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Kenneth Rohde Christiansen.
-
- [Qt] Remove support for Qt v4.3 or older versions
- https://bugs.webkit.org/show_bug.cgi?id=29469
-
- * JavaScriptCore.pro:
- * jsc.pro:
- * wtf/unicode/qt4/UnicodeQt4.h:
-
-2009-11-18 Kent Tamura <tkent@chromium.org>
-
- Reviewed by Darin Adler.
-
- Move UString::from(double) implementation to new
- WTF::doubleToStringInJavaScriptFormat(), and expose it because WebCore
- code will use it.
- https://bugs.webkit.org/show_bug.cgi?id=31330
-
- - Introduce new function createRep(const char*, unsigned) and
- UString::UString(const char*, unsigned) to reduce 2 calls to strlen().
- - Fix a bug that dtoa() doesn't update *rve if the input value is NaN
- or Infinity.
-
- No new tests because this doesn't change the behavior.
-
- * JavaScriptCore.exp:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * runtime/UString.cpp:
- (JSC::createRep):
- (JSC::UString::UString):
- (JSC::UString::from): Move the code to doubleToStringInJavaScriptFormat().
- * runtime/UString.h:
- * wtf/dtoa.cpp:
- (WTF::dtoa): Fix a bug about rve.
- (WTF::append): A helper for doubleToStringInJavaScriptFormat().
- (WTF::doubleToStringInJavaScriptFormat): Move the code from UString::from(double).
- * wtf/dtoa.h:
-
-2009-11-18 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Kenneth Rohde Christiansen.
-
- [Qt] Remove WTF_USE_JAVASCRIPTCORE_BINDINGS as it is no longer used
- https://bugs.webkit.org/show_bug.cgi?id=31643
-
- * JavaScriptCore.pro:
-
-2009-11-18 Nate Chapin <japhet@chromium.org>
-
- Reviewed by Darin Fisher.
-
- Remove Chromium's unnecessary dependency on wtf's tcmalloc files.
-
- https://bugs.webkit.org/show_bug.cgi?id=31648
-
- * JavaScriptCore.gyp/JavaScriptCore.gyp:
-
-2009-11-18 Thiago Macieira <thiago.macieira@nokia.com>
-
- Reviewed by Gavin Barraclough.
-
- [Qt] Implement symbol hiding for JSC's JIT functions.
-
- These functions are implemented directly in assembly, so they need the
- proper directives to enable/disable visibility. On ELF systems, it's
- .hidden, whereas on Mach-O systems (Mac) it's .private_extern. On
- Windows, it's not necessary since you have to explicitly export. I
- also implemented the AIX idiom, though it's unlikely anyone will
- implement AIX/POWER JIT.
- https://bugs.webkit.org/show_bug.cgi?id=30864
-
- * jit/JITStubs.cpp:
-
-2009-11-18 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Alexey Proskuryakov.
-
- Interpreter may do an out of range access when throwing an exception in the profiler.
- https://bugs.webkit.org/show_bug.cgi?id=31635
-
- Add bounds check.
-
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::throwException):
-
-2009-11-18 Gabor Loki <loki@inf.u-szeged.hu>
-
- Reviewed by Darin Adler.
-
- Fix the clobber list of cacheFlush for ARM and Thumb2 on Linux
- https://bugs.webkit.org/show_bug.cgi?id=31631
-
- * jit/ExecutableAllocator.h:
- (JSC::ExecutableAllocator::cacheFlush):
-
-2009-11-18 Harald Fernengel <harald.fernengel@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- [Qt] Fix detection of linux-g++
-
- Never use "linux-g++*" to check for linux-g++, since this will break embedded
- builds which use linux-arm-g++ and friends. Use 'linux*-g++*' to check for any
- g++ on linux mkspec.
-
- * JavaScriptCore.pri:
-
-2009-11-17 Jon Honeycutt <jhoneycutt@apple.com>
-
- Add JSContextRefPrivate.h to list of copied files.
-
- Reviewed by Mark Rowe.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
-
-2009-11-17 Martin Robinson <martin.james.robinson@gmail.com>
-
- Reviewed by Adam Barth.
-
- [GTK] Style cleanup for GOwnPtr
- https://bugs.webkit.org/show_bug.cgi?id=31506
-
- Remove forward declaration in GOwnPtr and do some style cleanup.
-
- * wtf/GOwnPtr.cpp:
- * wtf/GOwnPtr.h:
- (WTF::GOwnPtr::GOwnPtr):
- (WTF::GOwnPtr::~GOwnPtr):
- (WTF::GOwnPtr::get):
- (WTF::GOwnPtr::release):
- (WTF::GOwnPtr::outPtr):
- (WTF::GOwnPtr::set):
- (WTF::GOwnPtr::clear):
- (WTF::GOwnPtr::operator*):
- (WTF::GOwnPtr::operator->):
- (WTF::GOwnPtr::operator!):
- (WTF::GOwnPtr::operator UnspecifiedBoolType):
- (WTF::GOwnPtr::swap):
- (WTF::swap):
- (WTF::operator==):
- (WTF::operator!=):
- (WTF::getPtr):
- (WTF::freeOwnedGPtr):
-
-2009-11-17 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Maciej Stachowiak.
-
- Incorrect use of JavaScriptCore API in DumpRenderTree
- https://bugs.webkit.org/show_bug.cgi?id=31577
-
- Add assertions to the 'toJS' functions to catch mistakes like
- this early. Restructure existing code which blindly passed potentially
- null values to toJS when forwarding exceptions so that a null check is
- performed first.
-
- * API/APICast.h:
- (toJS):
- (toJSForGC):
- * API/JSCallbackObjectFunctions.h:
- (JSC::::getOwnPropertySlot):
- (JSC::::put):
- (JSC::::deleteProperty):
- (JSC::::construct):
- (JSC::::hasInstance):
- (JSC::::call):
- (JSC::::toNumber):
- (JSC::::toString):
- (JSC::::staticValueGetter):
- (JSC::::callbackGetter):
- * API/tests/testapi.c: Fix errors in the API tester.
- (MyObject_getProperty):
- (MyObject_convertToType):
- (EvilExceptionObject_convertToType):
-
-2009-11-16 Zoltan Herczeg <zherczeg@inf.u-szeged.hu>
-
- Reviewed by Gavin Barraclough.
-
- https://bugs.webkit.org/show_bug.cgi?id=31050
-
- Minor fixes for JSVALUE32_64: branchConvertDoubleToInt32
- failed on a CortexA8 CPU, but not on a simulator; and
- JITCall.cpp modifications was somehow not committed to mainline.
-
- * assembler/ARMAssembler.h:
- (JSC::ARMAssembler::fmrs_r):
- * assembler/MacroAssemblerARM.h:
- (JSC::MacroAssemblerARM::branchConvertDoubleToInt32):
- * jit/JITCall.cpp:
- (JSC::JIT::compileOpCall):
-
-2009-11-16 Joerg Bornemann <joerg.bornemann@trolltech.com>
-
- Reviewed by Simon Hausmann.
-
- Fix Qt build on Windows CE 6.
-
- * JavaScriptCore.pri: Add missing include path.
- * wtf/Platform.h: Include ce_time.h for Windows CE 6.
-
-2009-11-13 Zoltan Herczeg <zherczeg@inf.u-szeged.hu>
-
- Reviewed by Gavin Barraclough.
-
- https://bugs.webkit.org/show_bug.cgi?id=31050
-
- Adding optimization support for mode JSVALUE32_64
- on ARM systems.
-
- * jit/JIT.h:
- * jit/JITCall.cpp:
- (JSC::JIT::compileOpCall):
- * jit/JITPropertyAccess.cpp:
- (JSC::JIT::emit_op_method_check):
- (JSC::JIT::compileGetByIdHotPath):
- (JSC::JIT::compileGetByIdSlowCase):
- (JSC::JIT::emit_op_put_by_id):
-
-2009-11-14 Zoltan Herczeg <zherczeg@inf.u-szeged.hu>
-
- Reviewed by Gavin Barraclough.
-
- https://bugs.webkit.org/show_bug.cgi?id=31050
-
- Adding JSVALUE32_64 support for ARM (but not turning it
- on by default). All optimizations must be disabled, since
- this patch is only the first of a series of patches.
-
- During the work, a lot of x86 specific code revealed and
- made platform independent.
- See revisions: 50531 50541 50593 50594 50595
-
- * assembler/ARMAssembler.h:
- (JSC::ARMAssembler::):
- (JSC::ARMAssembler::fdivd_r):
- * assembler/MacroAssemblerARM.h:
- (JSC::MacroAssemblerARM::lshift32):
- (JSC::MacroAssemblerARM::neg32):
- (JSC::MacroAssemblerARM::rshift32):
- (JSC::MacroAssemblerARM::branchOr32):
- (JSC::MacroAssemblerARM::set8):
- (JSC::MacroAssemblerARM::setTest8):
- (JSC::MacroAssemblerARM::loadDouble):
- (JSC::MacroAssemblerARM::divDouble):
- (JSC::MacroAssemblerARM::convertInt32ToDouble):
- (JSC::MacroAssemblerARM::zeroDouble):
- * jit/JIT.cpp:
- * jit/JIT.h:
- * jit/JITOpcodes.cpp:
- (JSC::JIT::privateCompileCTIMachineTrampolines):
- * jit/JITStubs.cpp:
- * wtf/StdLibExtras.h:
-
-2009-11-13 Dominik Röttsches <dominik.roettsches@access-company.com>
-
- Reviewed by Eric Seidel.
-
- Unify TextBoundaries implementations by only relying on WTF Unicode abstractions
- https://bugs.webkit.org/show_bug.cgi?id=31468
-
- Adding isAlphanumeric abstraction, required
- by TextBoundaries.cpp.
-
- * wtf/unicode/glib/UnicodeGLib.h:
- (WTF::Unicode::isAlphanumeric):
- * wtf/unicode/icu/UnicodeIcu.h:
- (WTF::Unicode::isAlphanumeric):
-
-2009-11-13 Norbert Leser <norbert.leser&nokia.com>
-
- Reviewed by Eric Seidel.
-
- Added macros for USERINCLUDE paths within symbian blocks
- to guarantee inclusion of respective header files from local path
- first (to avoid clashes with same names of header files in system include path).
-
- * JavaScriptCore.pri:
-
-2009-11-13 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Geoff Garen.
-
- JSValueProtect and JSValueUnprotect don't protect API wrapper values
- https://bugs.webkit.org/show_bug.cgi?id=31485
-
- Make JSValueProtect/Unprotect use a new 'toJS' function, 'toJSForGC' that
- does not attempt to to strip out API wrapper objects.
-
- * API/APICast.h:
- (toJSForGC):
- * API/JSValueRef.cpp:
- (JSValueProtect):
- (JSValueUnprotect):
- * API/tests/testapi.c:
- (makeGlobalNumberValue):
- (main):
-
-2009-11-13 İsmail Dönmez <ismail@namtrac.org>
-
- Reviewed by Antti Koivisto.
-
- Fix typo, ce_time.cpp should be ce_time.c
-
- * JavaScriptCore.pri:
-
-2009-11-12 Steve VanDeBogart <vandebo@chromium.org>
-
- Reviewed by Adam Barth.
-
- Calculate the time offset only if we were able to parse
- the date string. This saves an IPC in Chromium for
- invalid date strings.
- https://bugs.webkit.org/show_bug.cgi?id=31416
-
- * wtf/DateMath.cpp:
- (WTF::parseDateFromNullTerminatedCharacters):
- (JSC::parseDateFromNullTerminatedCharacters):
-
-2009-11-12 Oliver Hunt <oliver@apple.com>
-
- Rollout r50896 until i can work out why it causes failures.
-
- * bytecompiler/BytecodeGenerator.cpp:
- (JSC::BytecodeGenerator::emitReturn):
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::execute):
- * parser/Nodes.cpp:
- (JSC::EvalNode::emitBytecode):
-
-2009-11-12 Steve Falkenburg <sfalken@apple.com>
-
- Reviewed by Stephanie Lewis.
-
- Remove LIBRARY directive from def file to fix Debug_All target.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2009-11-12 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk>
-
- Rubber-stamped by Holger Freyther.
-
- Revert r50204, since it makes DRT crash on 32 bits release builds
- for GTK+.
-
- * wtf/FastMalloc.h:
-
-2009-11-12 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- Start unifying entry logic for function and eval code.
-
- Eval now uses a ret instruction to end execution, and sets up
- a callframe more in line with what we do for function entry.
-
- * bytecompiler/BytecodeGenerator.cpp:
- (JSC::BytecodeGenerator::emitReturn):
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::execute):
- * parser/Nodes.cpp:
- (JSC::EvalNode::emitBytecode):
-
-2009-11-12 Richard Moe Gustavsen <richard.gustavsen@nokia.com>
-
- Reviewed by Kenneth Rohde Christiansen.
-
- [Qt] Disable pthread_setname_np.
-
- This allows Qt builds on Mac from 10.6 to run on earlier version
- where this symbol is not present.
- https://bugs.webkit.org/show_bug.cgi?id=31403
-
- * wtf/Platform.h:
-
-2009-11-12 Thiago Macieira <thiago.macieira@nokia.com>
-
- Reviewed by Kenneth Rohde Christiansen.
-
- [Qt] Fix linking on Linux 32-bit.
-
- It was missing the ".text" directive at the top of the file,
- indicating that code would follow. Without it, the assembler created
- "NOTYPE" symbols, which would result in linker errors.
- https://bugs.webkit.org/show_bug.cgi?id=30863
-
- * jit/JITStubs.cpp:
-
-2009-11-11 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Alexey Proskuryakov.
-
- Refactor multiple JavaScriptCore threads
- https://bugs.webkit.org/show_bug.cgi?id=31328
-
- Remove the id field from the PlatformThread structure
- as it is not used.
-
- * runtime/Collector.cpp:
- (JSC::getCurrentPlatformThread):
- (JSC::suspendThread):
- (JSC::resumeThread):
- (JSC::getPlatformThreadRegisters):
-
-2009-11-10 Geoffrey Garen <ggaren@apple.com>
-
- Linux build fix: Added an #include for UINT_MAX.
-
- * runtime/WeakRandom.h:
-
-2009-11-10 Geoffrey Garen <ggaren@apple.com>
-
- JavaScriptGlue build fix: Marked a file 'private' instead of 'project'.
-
- * JavaScriptCore.xcodeproj/project.pbxproj:
-
-2009-11-10 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Gavin "avGni arBalroguch" Barraclough.
-
- Faster Math.random, based on GameRand.
-
- SunSpider says 1.4% faster.
-
- * GNUmakefile.am:
- * JavaScriptCore.gypi:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
- * JavaScriptCore.xcodeproj/project.pbxproj: Added the header to the project.
-
- * runtime/JSGlobalData.cpp:
- (JSC::JSGlobalData::JSGlobalData):
- * runtime/JSGlobalData.h: Use an object to track random number generation
- state, initialized to the current time.
-
- * runtime/MathObject.cpp:
- (JSC::MathObject::MathObject):
- (JSC::mathProtoFuncRandom): Use the new hotness.
-
- * runtime/WeakRandom.h: Added.
- (JSC::WeakRandom::WeakRandom):
- (JSC::WeakRandom::get):
- (JSC::WeakRandom::advance): The new hotness.
-
-2009-11-09 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Imported the v8 DST cache.
-
- SunSpider says 1.5% faster.
-
- * runtime/JSGlobalData.cpp:
- (JSC::JSGlobalData::resetDateCache): Reset the DST cache when resetting
- other date data.
-
- * runtime/JSGlobalData.h:
- (JSC::DSTOffsetCache::DSTOffsetCache):
- (JSC::DSTOffsetCache::reset): Added a struct for the DST cache.
-
- * wtf/DateMath.cpp:
- (WTF::calculateDSTOffsetSimple):
- (WTF::calculateDSTOffset):
- (WTF::parseDateFromNullTerminatedCharacters):
- (JSC::getDSTOffset):
- (JSC::gregorianDateTimeToMS):
- (JSC::msToGregorianDateTime):
- (JSC::parseDateFromNullTerminatedCharacters):
- * wtf/DateMath.h: The imported code for probing and updating the cache.
-
-2009-11-09 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Fixed an edge case that could cause the engine not to notice a timezone
- change.
-
- No test because this case would require manual intervention to change
- the timezone during the test.
-
- SunSpider reports no change.
-
- * runtime/DateInstanceCache.h:
- (JSC::DateInstanceCache::DateInstanceCache):
- (JSC::DateInstanceCache::reset): Added a helper function for resetting
- this cache. Also, shrank the cache, since we'll be resetting it often.
-
- * runtime/JSGlobalData.cpp:
- (JSC::JSGlobalData::resetDateCache): Include resetting the DateInstanceCache
- in resetting Date data. (Otherwise, a cache hit could bypass a necessary
- timezone update check.)
-
-2009-11-09 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Some manual inlining and constant propogation in Date code.
-
- SunSpider reports a 0.4% speedup on date-*, no overall speedup. Shark
- says some previously evident stalls are now gone.
-
- * runtime/DateConstructor.cpp:
- (JSC::callDate):
- * runtime/DateConversion.cpp:
- (JSC::formatTime):
- (JSC::formatTimeUTC): Split formatTime into UTC and non-UTC variants.
-
- * runtime/DateConversion.h:
- * runtime/DateInstance.cpp:
- (JSC::DateInstance::calculateGregorianDateTime):
- (JSC::DateInstance::calculateGregorianDateTimeUTC):
- * runtime/DateInstance.h:
- (JSC::DateInstance::gregorianDateTime):
- (JSC::DateInstance::gregorianDateTimeUTC): Split gregorianDateTime into
- a UTC and non-UTC variant, and split each variant into a fast inline
- case and a slow out-of-line case.
-
- * runtime/DatePrototype.cpp:
- (JSC::formatLocaleDate):
- (JSC::dateProtoFuncToString):
- (JSC::dateProtoFuncToUTCString):
- (JSC::dateProtoFuncToISOString):
- (JSC::dateProtoFuncToDateString):
- (JSC::dateProtoFuncToTimeString):
- (JSC::dateProtoFuncGetFullYear):
- (JSC::dateProtoFuncGetUTCFullYear):
- (JSC::dateProtoFuncToGMTString):
- (JSC::dateProtoFuncGetMonth):
- (JSC::dateProtoFuncGetUTCMonth):
- (JSC::dateProtoFuncGetDate):
- (JSC::dateProtoFuncGetUTCDate):
- (JSC::dateProtoFuncGetDay):
- (JSC::dateProtoFuncGetUTCDay):
- (JSC::dateProtoFuncGetHours):
- (JSC::dateProtoFuncGetUTCHours):
- (JSC::dateProtoFuncGetMinutes):
- (JSC::dateProtoFuncGetUTCMinutes):
- (JSC::dateProtoFuncGetSeconds):
- (JSC::dateProtoFuncGetUTCSeconds):
- (JSC::dateProtoFuncGetTimezoneOffset):
- (JSC::setNewValueFromTimeArgs):
- (JSC::setNewValueFromDateArgs):
- (JSC::dateProtoFuncSetYear):
- (JSC::dateProtoFuncGetYear): Updated for the gregorianDateTime change above.
-
-2009-11-09 Geoffrey Garen <ggaren@apple.com>
-
- Build fix: export a new symbol.
-
- * JavaScriptCore.exp:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2009-11-09 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam "Home Wrecker" Weinig.
-
- Added a tiny cache for Date parsing.
-
- SunSpider says 1.2% faster.
-
- * runtime/DateConversion.cpp:
- (JSC::parseDate): Try to reuse the last parsed Date, if present.
-
- * runtime/JSGlobalData.cpp:
- (JSC::JSGlobalData::resetDateCache):
- * runtime/JSGlobalData.h: Added storage for last parsed Date. Refactored
- this code to make resetting the date cache easier.
-
- * runtime/JSGlobalObject.h:
- (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope): Updated for
- refactoring.
-
- * wtf/DateMath.cpp:
- (JSC::parseDateFromNullTerminatedCharacters):
- * wtf/DateMath.h: Changed ExecState to be first parameter, as is the JSC custom.
-
-2009-11-09 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- Can cache prototype lookups on uncacheable dictionaries.
- https://bugs.webkit.org/show_bug.cgi?id=31198
-
- Replace fromDictionaryTransition with flattenDictionaryObject and
- flattenDictionaryStructure. This change is necessary as we need to
- guarantee that our attempt to convert away from a dictionary structure
- will definitely succeed, and in some cases this requires mutating the
- object storage itself.
-
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::tryCacheGetByID):
- * jit/JITStubs.cpp:
- (JSC::JITThunks::tryCacheGetByID):
- (JSC::DEFINE_STUB_FUNCTION):
- * runtime/BatchedTransitionOptimizer.h:
- (JSC::BatchedTransitionOptimizer::~BatchedTransitionOptimizer):
- * runtime/JSObject.h:
- (JSC::JSObject::flattenDictionaryObject):
- * runtime/Operations.h:
- (JSC::normalizePrototypeChain):
- * runtime/Structure.cpp:
- (JSC::Structure::flattenDictionaryStructure):
- (JSC::comparePropertyMapEntryIndices):
- * runtime/Structure.h:
-
-2009-11-09 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Not reviewed, build fix.
-
- Remove extra character from r50701.
-
- * JavaScriptCore.pri:
-
-2009-11-09 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Not reviewed, build fix.
-
- Revert r50695 because it broke QtWebKit (clean builds).
-
- * JavaScriptCore.pri:
-
-2009-11-09 Norbert Leser <norbert.leser@nokia.com>
-
- Reviewed by Kenneth Rohde Christiansen.
-
- Prepended $$PWD to GENERATED_SOURCES_DIR to avoid potential ambiguities when included from WebCore.pro.
- Some preprocessors consider this GENERATED_SOURCES_DIR relative to current invoking dir (e.g., ./WebCore),
- and not the working dir of JavaCriptCore.pri (i.e., ../JavaScriptCore/).
-
- * JavaScriptCore.pri:
-
-2009-11-09 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Kenneth Rohde Christiansen.
-
- Use explicit parentheses to silence gcc 4.4 -Wparentheses warnings
- https://bugs.webkit.org/show_bug.cgi?id=31040
-
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::privateExecute):
-
-2009-11-08 David Levin <levin@chromium.org>
-
- Reviewed by NOBODY (speculative snow leopard and windows build fixes).
-
- * wtf/DateMath.cpp:
- (WTF::parseDateFromNullTerminatedCharacters):
- (JSC::gregorianDateTimeToMS):
- (JSC::msToGregorianDateTime):
- (JSC::parseDateFromNullTerminatedCharacters):
- * wtf/DateMath.h:
- (JSC::GregorianDateTime::GregorianDateTime):
-
-2009-11-08 David Levin <levin@chromium.org>
-
- Reviewed by NOBODY (chromium build fix).
-
- Hopefully, the last build fix.
-
- Create better separation in DateMath about the JSC
- and non-JSC portions. Also, only expose the non-JSC
- version in the exports.
-
- * JavaScriptCore.exp:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * wtf/DateMath.cpp:
- (WTF::parseDateFromNullTerminatedCharacters):
- (JSC::getUTCOffset):
- (JSC::gregorianDateTimeToMS):
- (JSC::msToGregorianDateTime):
- (JSC::parseDateFromNullTerminatedCharacters):
- * wtf/DateMath.h:
- (JSC::gmtoffset):
-
-2009-11-08 David Levin <levin@chromium.org>
-
- Reviewed by NOBODY (chromium build fix).
-
- For the change in DateMath.
-
- * config.h:
- * wtf/DateMath.cpp:
-
-2009-11-06 Geoffrey Garen <ggaren@apple.com>
-
- Windows build fix: export some symbols.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2009-11-06 Geoffrey Garen <ggaren@apple.com>
-
- Build fix: updated export file.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
-
-2009-11-06 Geoffrey Garen <ggaren@apple.com>
-
- Build fix: added some #includes.
-
- * wtf/CurrentTime.h:
- * wtf/DateMath.h:
-
-2009-11-06 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Oliver Hunt.
-
- https://bugs.webkit.org/show_bug.cgi?id=31197
- Implemented a timezone cache not based on Mac OS X's notify_check API.
-
- If the VM calculates the local timezone offset from UTC, it caches the
- result until the end of the current VM invocation. (We don't want to cache
- forever, because the user's timezone may change over time.)
-
- This removes notify_* overhead on Mac, and, more significantly, removes
- OS time and date call overhead on non-Mac platforms.
-
- ~8% speedup on Date microbenchmark on Mac. SunSpider reports maybe a tiny
- speedup on Mac. (Speedup on non-Mac platforms should be even more noticeable.)
-
- * JavaScriptCore.exp:
-
- * interpreter/CachedCall.h:
- (JSC::CachedCall::CachedCall):
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::execute):
- * runtime/JSGlobalObject.h:
- (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope): Made the
- DynamicGlobalObjectScope constructor responsible for checking whether a
- dynamicGlobalObject has already been set. This eliminated some duplicate
- client code, and allowed me to avoid adding even more duplicate client
- code. Made DynamicGlobalObjectScope responsible for resetting the
- local timezone cache upon first entry to the VM.
-
- * runtime/DateConstructor.cpp:
- (JSC::constructDate):
(JSC::callDate):
(JSC::dateParse):
+ (JSC::dateNow):
(JSC::dateUTC):
- * runtime/DateConversion.cpp:
- (JSC::parseDate):
- * runtime/DateConversion.h:
- * runtime/DateInstance.cpp:
- (JSC::DateInstance::gregorianDateTime):
- * runtime/DateInstance.h:
- * runtime/DateInstanceCache.h:
- * runtime/DatePrototype.cpp:
- (JSC::setNewValueFromTimeArgs):
- (JSC::setNewValueFromDateArgs):
- (JSC::dateProtoFuncSetYear):
- * runtime/InitializeThreading.cpp:
- (JSC::initializeThreadingOnce):
- * runtime/JSGlobalData.cpp:
- (JSC::JSGlobalData::JSGlobalData):
- * runtime/JSGlobalData.h:
- * wtf/DateMath.cpp:
- (WTF::getCurrentUTCTime):
- (WTF::getCurrentUTCTimeWithMicroseconds):
- (WTF::getLocalTime):
- (JSC::getUTCOffset): Use the new cache. Also, see below.
- (JSC::gregorianDateTimeToMS):
- (JSC::msToGregorianDateTime):
- (JSC::initializeDates):
- (JSC::parseDateFromNullTerminatedCharacters): Simplified the way this function
- accounts for the local timezone offset, to accomodate our new caching API,
- and a (possibly misguided) caller in WebCore. Also, see below.
- * wtf/DateMath.h:
- (JSC::GregorianDateTime::GregorianDateTime): Moved most of the code in
- DateMath.* into the JSC namespace. The code needed to move so it could
- naturally interact with ExecState and JSGlobalData to support caching.
- Logically, it seemed right to move it, too, since this code is not really
- as low-level as the WTF namespace might imply -- it implements a set of
- date parsing and conversion quirks that are finely tuned to the JavaScript
- language. Also removed the Mac OS X notify_* infrastructure.
-
- * wtf/CurrentTime.h:
- (WTF::currentTimeMS):
- (WTF::getLocalTime): Moved the rest of the DateMath code here, and renamed
- it to make it consistent with WTF's currentTime function.
-
-2009-11-06 Gabor Loki <loki@inf.u-szeged.hu>
-
- Unreviewed trivial buildfix after r50595.
-
- Rename the remaining rshiftPtr calls to rshift32
-
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_rshift):
- * jit/JITInlineMethods.h:
- (JSC::JIT::emitFastArithImmToInt):
-
-2009-11-06 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Tidy up the shift methods on the macro-assembler interface.
-
- Currently behaviour of shifts of a magnitude > 0x1f is undefined.
- Instead defined that all shifts are masked to this range. This makes a lot of
- practical sense, both since having undefined behaviour is not particularly
- desirable, and because this behaviour is commonly required (particularly since
- it is required bt ECMA-262 for shifts).
-
- Update the ARM assemblers to provide this behaviour. Remove (now) redundant
- masks from JITArithmetic, and remove rshiftPtr (this was used in case that
- could be rewritten in a simpler form using rshift32, only optimized JSVALUE32
- on x86-64, which uses JSVALUE64!)
-
- * assembler/MacroAssembler.h:
- * assembler/MacroAssemblerARM.h:
- (JSC::MacroAssemblerARM::lshift32):
- (JSC::MacroAssemblerARM::rshift32):
- * assembler/MacroAssemblerARMv7.h:
- (JSC::MacroAssemblerARMv7::lshift32):
- (JSC::MacroAssemblerARMv7::rshift32):
- * assembler/MacroAssemblerX86_64.h:
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_lshift):
- (JSC::JIT::emit_op_rshift):
-
-2009-11-05 Gavin Barraclough <barraclough@apple.com>
-
- Rubber Stamped by Oliver Hunt.
-
- Remove a magic number (1) from the JIT, instead compute the value with OBJECT_OFFSET.
-
- * jit/JITInlineMethods.h:
- (JSC::JIT::emitPutJITStubArg):
- (JSC::JIT::emitPutJITStubArgConstant):
- (JSC::JIT::emitGetJITStubArg):
- (JSC::JIT::emitPutJITStubArgFromVirtualRegister):
- * jit/JITStubCall.h:
- (JSC::JITStubCall::JITStubCall):
- (JSC::JITStubCall::getArgument):
- * jit/JITStubs.h:
-
-2009-11-05 Zoltan Herczeg <zherczeg@inf.u-szeged.hu>
-
- Reviewed by Gavin Barraclough.
-
- https://bugs.webkit.org/show_bug.cgi?id=31159
- Fix branchDouble behaviour on ARM THUMB2 JIT.
-
- The x86 branchDouble behaviour is reworked, and all JIT
- ports should follow the x86 port. See bug 31104 and 31151
-
- This patch contains a fix for the traditional ARM port
-
- * assembler/ARMAssembler.h:
- (JSC::ARMAssembler::):
- (JSC::ARMAssembler::fmrs_r):
- (JSC::ARMAssembler::ftosid_r):
- * assembler/MacroAssemblerARM.h:
- (JSC::MacroAssemblerARM::):
- (JSC::MacroAssemblerARM::branchDouble):
- (JSC::MacroAssemblerARM::branchConvertDoubleToInt32):
-
-2009-11-05 Chris Jerdonek <chris.jerdonek@gmail.com>
-
- Reviewed by Eric Seidel.
-
- Removed the "this is part of the KDE project" comments from
- all *.h, *.cpp, *.idl, and *.pm files.
-
- https://bugs.webkit.org/show_bug.cgi?id=31167
-
- The maintenance and architecture page in the project wiki lists
- this as a task.
-
- This change includes no changes or additions to test cases
- since the change affects only comments.
-
- * wtf/wince/FastMallocWince.h:
-
-2009-11-05 Gabor Loki <loki@inf.u-szeged.hu>
-
- Reviewed by Gavin Barraclough.
-
- Use ARMv7 specific encoding for immediate constants on ARMv7 target
- https://bugs.webkit.org/show_bug.cgi?id=31060
-
- * assembler/ARMAssembler.cpp:
- (JSC::ARMAssembler::getOp2): Use INVALID_IMM
- (JSC::ARMAssembler::getImm): Use encodeComplexImm for complex immediate
- (JSC::ARMAssembler::moveImm): Ditto.
- (JSC::ARMAssembler::encodeComplexImm): Encode a constant by one or two
- instructions or a PC relative load.
- * assembler/ARMAssembler.h: Use INVALID_IMM if a constant cannot be
- encoded as an immediate constant.
- (JSC::ARMAssembler::):
- (JSC::ARMAssembler::movw_r): 16-bit immediate load
- (JSC::ARMAssembler::movt_r): High halfword 16-bit immediate load
- (JSC::ARMAssembler::getImm16Op2): Encode immediate constant for
- movw_r and mowt_r
-
-2009-11-04 Mark Mentovai <mark@chromium.org>
-
- Reviewed by Mark Rowe.
-
- Provide TARGETING_TIGER and TARGETING_LEOPARD as analogues to
- BUILDING_ON_TIGER and BUILDING_ON_LEOPARD. The TARGETING_ macros
- consider the deployment target; the BUILDING_ON_ macros consider the
- headers being built against.
-
- * wtf/Platform.h:
-
-2009-11-04 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- https://bugs.webkit.org/show_bug.cgi?id=31151
- Fix branchDouble behaviour on ARM THUMB2 JIT.
-
- The ARMv7 JIT is currently using ARMv7Assembler::ConditionEQ to branch
- for DoubleEqualOrUnordered, however this is incorrect - ConditionEQ won't
- branch on unordered operands. Similarly, DoubleLessThanOrUnordered &
- DoubleLessThanOrEqualOrUnordered use ARMv7Assembler::ConditionLO &
- ARMv7Assembler::ConditionLS, whereas they should be using
- ARMv7Assembler::ConditionLT & ARMv7Assembler::ConditionLE.
-
- Fix these, and fill out the missing DoubleConditions.
-
- * assembler/MacroAssemblerARMv7.h:
- (JSC::MacroAssemblerARMv7::):
- (JSC::MacroAssemblerARMv7::branchDouble):
-
-2009-11-04 Gavin Barraclough <barraclough@apple.com>
-
- Rubber Stamped by Oliver Hunt.
-
- Enable native call optimizations on ARMv7. (Existing ARM_TRADITIONAL
- implementation was generic, worked perfectly, just needed turning on).
-
- * jit/JITOpcodes.cpp:
- * wtf/Platform.h:
-
-2009-11-04 Gavin Barraclough <barraclough@apple.com>
-
- Rubber Stamped by Mark Rowe, Oliver Hunt, and Sam Weinig.
-
- Add a missing assert to the ARMv7 JIT.
-
- * assembler/ARMv7Assembler.h:
- (JSC::ARMThumbImmediate::ARMThumbImmediate):
-
-2009-11-04 Mark Rowe <mrowe@apple.com>
-
- Rubber-stamped by Oliver Hunt.
-
- Remove bogus op_ prefix on dumped version of three opcodes.
-
- * bytecode/CodeBlock.cpp:
- (JSC::CodeBlock::dump):
-
-2009-11-04 Mark Rowe <mrowe@apple.com>
-
- Reviewed by Sam Weinig.
-
- Fix dumping of constants in bytecode so that they aren't printed as large positive register numbers.
-
- We do this by having the registerName function return information about the constant if the register
- number corresponds to a constant. This requires that registerName, and several functions that call it,
- be converted to member functions of CodeBlock so that the constant value can be retrieved. The
- ExecState also needs to be threaded down through these functions so that it can be passed on to
- constantName when needed.
-
- * bytecode/CodeBlock.cpp:
- (JSC::constantName):
- (JSC::CodeBlock::registerName):
- (JSC::CodeBlock::printUnaryOp):
- (JSC::CodeBlock::printBinaryOp):
- (JSC::CodeBlock::printConditionalJump):
- (JSC::CodeBlock::printGetByIdOp):
- (JSC::CodeBlock::printPutByIdOp):
- (JSC::CodeBlock::dump):
- * bytecode/CodeBlock.h:
- (JSC::CodeBlock::isConstantRegisterIndex):
-
-2009-11-04 Pavel Heimlich <tropikhajma@gmail.com>
-
- Reviewed by Alexey Proskuryakov.
-
- https://bugs.webkit.org/show_bug.cgi?id=30647
- Solaris build failure due to strnstr.
-
- * wtf/StringExtras.h: Enable strnstr on Solaris, too.
-
-2009-11-04 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- https://bugs.webkit.org/show_bug.cgi?id=31104
- Refactor x86-specific behaviour out of the JIT.
-
- - Add explicit double branch conditions for ordered and unordered comparisons (presently the brehaviour is a mix).
- - Refactor double to int conversion out into the MacroAssembler.
- - Remove broken double to int conversion for !JSVALUE32_64 builds - this code was broken and slowing us down, fixing it showed it not to be an improvement.
- - Remove exclusion of double to int conversion from (1 % X) cases in JSVALUE32_64 builds - if this was of benefit this is no longer the case; simplify.
-
- * assembler/MacroAssemblerARM.h:
- (JSC::MacroAssemblerARM::):
- * assembler/MacroAssemblerARMv7.h:
- (JSC::MacroAssemblerARMv7::):
- * assembler/MacroAssemblerX86Common.h:
- (JSC::MacroAssemblerX86Common::):
- (JSC::MacroAssemblerX86Common::convertInt32ToDouble):
- (JSC::MacroAssemblerX86Common::branchDouble):
- (JSC::MacroAssemblerX86Common::branchConvertDoubleToInt32):
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emitBinaryDoubleOp):
- (JSC::JIT::emit_op_div):
- (JSC::JIT::emitSlow_op_jnless):
- (JSC::JIT::emitSlow_op_jnlesseq):
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_jfalse):
-
-2009-11-04 Mark Mentovai <mark@chromium.org>
-
- Reviewed by Eric Seidel.
-
- Remove BUILDING_ON_LEOPARD from JavaScriptCore.gyp. This is supposed
- to be set as needed only in wtf/Platform.h.
-
- * JavaScriptCore.gyp/JavaScriptCore.gyp:
-
-2009-11-02 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- REGRESSION (r48573): JSC may incorrectly cache chain lookups with a dictionary at the head of the chain
- https://bugs.webkit.org/show_bug.cgi?id=31045
-
- Add guards to prevent caching of prototype chain lookups with dictionaries at the
- head of the chain. Also add a few tighter assertions to cached prototype lookups
- to catch this in future.
-
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::tryCacheGetByID):
- (JSC::Interpreter::privateExecute):
- * jit/JITStubs.cpp:
- (JSC::JITThunks::tryCacheGetByID):
-
-2009-11-02 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Darin Adler.
-
- PLATFORM(CF) should be set when building for Qt on Darwin
- https://bugs.webkit.org/show_bug.cgi?id=23671
-
- * wtf/Platform.h: Turn on CF support if both QT and DARWIN
- platforms are defined.
-
-2009-11-02 Dmitry Titov <dimich@chromium.org>
-
- Reviewed by David Levin.
-
- Remove threadsafe refcounting from tasks used with WTF::MessageQueue.
- https://bugs.webkit.org/show_bug.cgi?id=30612
-
- * wtf/MessageQueue.h:
- (WTF::MessageQueue::alwaysTruePredicate):
- (WTF::MessageQueue::~MessageQueue):
- (WTF::MessageQueue::append):
- (WTF::MessageQueue::appendAndCheckEmpty):
- (WTF::MessageQueue::prepend):
- (WTF::MessageQueue::waitForMessage):
- (WTF::MessageQueue::waitForMessageFilteredWithTimeout):
- (WTF::MessageQueue::tryGetMessage):
- (WTF::MessageQueue::removeIf):
- The MessageQueue is changed to act as a queue of OwnPtr<DataType>. It takes ownership
- of posted tasks and passes it to the new owner (in another thread) when the task is fetched.
- All methods have arguments of type PassOwnPtr<DataType> and return the same type.
-
- * wtf/Threading.cpp:
- (WTF::createThread):
- Superficial change to trigger rebuild of JSC project on Windows,
- workaround for https://bugs.webkit.org/show_bug.cgi?id=30890
-
-2009-10-30 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Fixed failing layout test: restore a special case I accidentally deleted.
-
- * runtime/DatePrototype.cpp:
- (JSC::setNewValueFromDateArgs): In the case of applying a change to a date
- that is NaN, reset the date to 0 *and* then apply the change; don't just
- reset the date to 0.
-
-2009-10-30 Geoffrey Garen <ggaren@apple.com>
-
- Windows build fix: update for object-to-pointer change.
-
- * runtime/DatePrototype.cpp:
- (JSC::formatLocaleDate):
-
-2009-10-29 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Darin Adler.
-
- https://bugs.webkit.org/show_bug.cgi?id=30942
- Use pointers instead of copies to pass GregorianDateTime objects around.
-
- SunSpider reports a shocking 4.5% speedup on date-format-xparb, and 1.3%
- speedup on date-format-tofte.
-
- * runtime/DateInstance.cpp:
- (JSC::DateInstance::gregorianDateTime):
- * runtime/DateInstance.h:
- * runtime/DatePrototype.cpp:
- (JSC::formatLocaleDate):
- (JSC::dateProtoFuncToString):
- (JSC::dateProtoFuncToUTCString):
- (JSC::dateProtoFuncToISOString):
- (JSC::dateProtoFuncToDateString):
- (JSC::dateProtoFuncToTimeString):
- (JSC::dateProtoFuncGetFullYear):
- (JSC::dateProtoFuncGetUTCFullYear):
- (JSC::dateProtoFuncToGMTString):
- (JSC::dateProtoFuncGetMonth):
- (JSC::dateProtoFuncGetUTCMonth):
- (JSC::dateProtoFuncGetDate):
- (JSC::dateProtoFuncGetUTCDate):
- (JSC::dateProtoFuncGetDay):
- (JSC::dateProtoFuncGetUTCDay):
- (JSC::dateProtoFuncGetHours):
- (JSC::dateProtoFuncGetUTCHours):
- (JSC::dateProtoFuncGetMinutes):
- (JSC::dateProtoFuncGetUTCMinutes):
- (JSC::dateProtoFuncGetSeconds):
- (JSC::dateProtoFuncGetUTCSeconds):
- (JSC::dateProtoFuncGetTimezoneOffset):
- (JSC::setNewValueFromTimeArgs):
- (JSC::setNewValueFromDateArgs):
- (JSC::dateProtoFuncSetYear):
- (JSC::dateProtoFuncGetYear): Renamed getGregorianDateTime to gregorianDateTime,
- since it no longer has an out parameter. Uses 0 to indicate invalid dates.
-
-2009-10-30 Zoltan Horvath <zoltan@webkit.org>
-
- Reviewed by Darin Adler.
-
- Allow custom memory allocation control for JavaScriptCore's ListHashSet
- https://bugs.webkit.org/show_bug.cgi?id=30853
-
- Inherits ListHashSet class from FastAllocBase because it is
- instantiated by 'new' in WebCore/rendering/RenderBlock.cpp:1813.
-
- * wtf/ListHashSet.h:
-
-2009-10-30 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- Regression: crash enumerating properties of an object with getters or setters
- https://bugs.webkit.org/show_bug.cgi?id=30948
-
- Add a guard to prevent us trying to cache property enumeration on
- objects with getters or setters.
-
- * runtime/JSPropertyNameIterator.cpp:
- (JSC::JSPropertyNameIterator::create):
-
-2009-10-30 Roland Steiner <rolandsteiner@chromium.org>
-
- Reviewed by Eric Seidel.
-
- Remove ENABLE_RUBY guards as discussed with Dave Hyatt and Maciej Stachowiak.
-
- Bug 28420 - Implement HTML5 <ruby> rendering
- (https://bugs.webkit.org/show_bug.cgi?id=28420)
-
- No new tests (no functional change).
-
- * Configurations/FeatureDefines.xcconfig:
-
-2009-10-29 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Maciej Stachowiak.
-
- REGRESSION (r50218-r50262): E*TRADE accounts page is missing content
- https://bugs.webkit.org/show_bug.cgi?id=30947
- <rdar://problem/7348833>
-
- The logic for flagging that a structure has non-enumerable properties
- was in addPropertyWithoutTransition, rather than in the core Structure::put
- method. Despite this I was unable to produce a testcase that caused
- the failure that etrade was experiencing, but the new assertion in
- getEnumerablePropertyNames triggers on numerous layout tests without
- the fix, so in effecti all for..in enumeration in any test ends up
- doing the required consistency check.
-
- * runtime/Structure.cpp:
- (JSC::Structure::addPropertyWithoutTransition):
- (JSC::Structure::put):
- (JSC::Structure::getEnumerablePropertyNames):
- (JSC::Structure::checkConsistency):
-
-2009-10-29 Gabor Loki <loki@inf.u-szeged.hu>
-
- Reviewed by Gavin Barraclough.
-
- Add cacheFlush support for Thumb-2 on Linux
- https://bugs.webkit.org/show_bug.cgi?id=30865
-
- * jit/ExecutableAllocator.h:
- (JSC::ExecutableAllocator::cacheFlush):
-
-2009-10-28 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- JSC JIT on ARMv7 cannot link jumps >16Mb range
- https://bugs.webkit.org/show_bug.cgi?id=30891
-
- Start planing all relative jumps as move-32-bit-immediate-to-register-BX.
- In the cases where the jump would fall within a relative jump range, use a relative jump.
-
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * assembler/ARMv7Assembler.h:
- (JSC::ARMv7Assembler::~ARMv7Assembler):
- (JSC::ARMv7Assembler::LinkRecord::LinkRecord):
- (JSC::ARMv7Assembler::):
- (JSC::ARMv7Assembler::executableCopy):
- (JSC::ARMv7Assembler::linkJump):
- (JSC::ARMv7Assembler::relinkJump):
- (JSC::ARMv7Assembler::setInt32):
- (JSC::ARMv7Assembler::isB):
- (JSC::ARMv7Assembler::isBX):
- (JSC::ARMv7Assembler::isMOV_imm_T3):
- (JSC::ARMv7Assembler::isMOVT):
- (JSC::ARMv7Assembler::isNOP_T1):
- (JSC::ARMv7Assembler::isNOP_T2):
- (JSC::ARMv7Assembler::linkJumpAbsolute):
- (JSC::ARMv7Assembler::twoWordOp5i6Imm4Reg4EncodedImmFirst):
- (JSC::ARMv7Assembler::twoWordOp5i6Imm4Reg4EncodedImmSecond):
- (JSC::ARMv7Assembler::ARMInstructionFormatter::twoWordOp5i6Imm4Reg4EncodedImm):
- * assembler/MacroAssemblerARMv7.h:
- (JSC::MacroAssemblerARMv7::makeJump):
- (JSC::MacroAssemblerARMv7::makeBranch):
- * jit/JIT.h:
- * wtf/Platform.h:
-
-2009-10-28 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Geoff Garen.
-
- Improve for..in enumeration performance
- https://bugs.webkit.org/show_bug.cgi?id=30887
-
- Improve indexing of an object with a for..in iterator by
- identifying cases where get_by_val is being used with a iterator
- as the subscript and replace it with a new get_by_pname
- bytecode. get_by_pname then optimizes lookups that directly access
- the base object.
-
- * bytecode/CodeBlock.cpp:
- (JSC::CodeBlock::dump):
- * bytecode/Opcode.h:
- * bytecompiler/BytecodeGenerator.cpp:
- (JSC::BytecodeGenerator::emitGetByVal):
- * bytecompiler/BytecodeGenerator.h:
- (JSC::BytecodeGenerator::pushOptimisedForIn):
- (JSC::BytecodeGenerator::popOptimisedForIn):
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::privateExecute):
- * jit/JIT.cpp:
- (JSC::JIT::privateCompileMainPass):
- (JSC::JIT::privateCompileSlowCases):
- * jit/JIT.h:
- * jit/JITPropertyAccess.cpp:
- (JSC::JIT::compileGetDirectOffset):
- (JSC::JIT::emit_op_get_by_pname):
- (JSC::JIT::emitSlow_op_get_by_pname):
- * parser/Nodes.cpp:
- (JSC::ForInNode::emitBytecode):
- * runtime/JSObject.h:
- * runtime/JSPropertyNameIterator.cpp:
- (JSC::JSPropertyNameIterator::create):
- * runtime/JSPropertyNameIterator.h:
- (JSC::JSPropertyNameIterator::getOffset):
- (JSC::JSPropertyNameIterator::JSPropertyNameIterator):
- * runtime/JSValue.h:
- (JSC::JSValue::):
- * runtime/Structure.cpp:
- (JSC::Structure::addPropertyTransition):
- (JSC::Structure::changePrototypeTransition):
- (JSC::Structure::despecifyFunctionTransition):
- (JSC::Structure::addAnonymousSlotsTransition):
- (JSC::Structure::getterSetterTransition):
- (JSC::Structure::toDictionaryTransition):
- (JSC::Structure::addPropertyWithoutTransition):
- Track the existence (or not) of non-enumerable properties.
- * runtime/Structure.h:
- (JSC::Structure::propertyStorageCapacity):
- (JSC::Structure::propertyStorageSize):
- (JSC::Structure::hasNonEnumerableProperties):
- (JSC::Structure::hasAnonymousSlots):
-
-2009-10-28 Dmitry Titov <dimich@chromium.org>
-
- Not reviewed, attemp to fix Windows build.
-
- Touch the cpp file to cause recompile.
-
- * wtf/Threading.cpp:
- (WTF::threadEntryPoint):
-
-2009-10-28 Dmitry Titov <dimich@chromium.org>
-
- Reviewed by David Levin.
-
- https://bugs.webkit.org/show_bug.cgi?id=30805
- Add MessageQueue::removeIf(Predicate&) to remove certain tasks without pulling them from the queue.
- Existing Database tests cover this since Database removes tasks when it is stopped.
-
- * wtf/MessageQueue.h:
- (WTF::::removeIf):
-
-2009-10-28 Afonso R. Costa Jr. <afonso.costa@openbossa.org>
-
- Reviewed by Oliver Hunt.
-
- [Qt] Enable YARR when YARR_JIT is enabled
- https://bugs.webkit.org/show_bug.cgi?id=30730
-
- When enabling or disabling JIT using JAVASCRIPTCORE_JIT, the ENABLE_YARR should
- be toggled also.
-
- * JavaScriptCore.pri:
-
-2009-10-24 Martin Robinson <martin.james.robinson@gmail.com>
-
- Reviewed by Oliver Hunt.
-
- Fix strict aliasing warning by switching reinterpret_cast to bitwise_cast.
-
- strict-aliasing warnings in JSFunction.h
- https://bugs.webkit.org/show_bug.cgi?id=27869
-
- * runtime/JSFunction.h:
- (JSC::JSFunction::nativeFunction):
- (JSC::JSFunction::scopeChain):
- (JSC::JSFunction::setScopeChain):
- (JSC::JSFunction::setNativeFunction):
-
-2009-10-28 Jan-Arve Sæther <jan-arve.saether@nokia.com>
-
- Reviewed by Tor Arne Vestbø.
-
- Build-fix for 64-bit Windows
-
- * wtf/Platform.h: Make sure to use WTF_USE_JSVALUE64
-
-2009-10-28 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (build fix!).
-
- * jit/JIT.h:
-
-2009-10-26 Holger Hans Peter Freyther <zecke@selfish.org>
-
- Rubber-stamped by Darin Adler.
-
- Export fastMalloc, fastCalloc, fastRealloc and fastFree on GCC/Unix
- https://bugs.webkit.org/show_bug.cgi?id=30769
-
- When using -fvisibility=hidden to hide all internal symbols by default
- the malloc symbols will be hidden as well. For memory instrumentation
- it is needed to provide an instrumented version of these symbols and
- override the normal routines and by changing the visibility back to
- default this becomes possible.
-
- The only other solution would be to use system malloc instead of the
- TCmalloc implementation but this will not allow to analyze memory
- behavior with the default allocator.
-
- * wtf/FastMalloc.h: Define WTF_FAST_MALLOC_EXPORT for GCC and !darwin
-
-2009-10-27 Gavin Barraclough <barraclough@apple.com>
-
- Rubber Stamped by Samuel Q. Weinig.
-
- Make the asserts protecting the offsets in the JIT more descriptive.
-
- * jit/JIT.h:
- * jit/JITCall.cpp:
- (JSC::JIT::compileOpCall):
- * jit/JITPropertyAccess.cpp:
- (JSC::JIT::emit_op_method_check):
- (JSC::JIT::compileGetByIdHotPath):
- (JSC::JIT::compileGetByIdSlowCase):
- (JSC::JIT::emit_op_put_by_id):
-
-2009-10-27 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- A little bit of refactoring in the date code.
-
- * JavaScriptCore.exp: Don't export this unused symbol.
-
- * runtime/DateConstructor.cpp:
- (JSC::constructDate):
-
- * runtime/DateInstance.cpp:
- (JSC::DateInstance::DateInstance):
- * runtime/DateInstance.h: Removed some unused functions. Changed the default
- constructor to ensure that a DateInstance is always initialized.
-
- * runtime/DatePrototype.cpp:
- (JSC::DatePrototype::DatePrototype): Pass an initializer to our constructor,
- since it now requires one.
-
- * wtf/DateMath.cpp:
- (WTF::msToGregorianDateTime): Only compute our offset from UTC if our
- output will require it. Otherwise, our offset is 0.
-
-2009-10-27 Geoffrey Garen <ggaren@apple.com>
-
- Build fix: Mark DateInstaceCache.h private, so other frameworks can see it.
-
- * JavaScriptCore.xcodeproj/project.pbxproj:
-
-2009-10-27 Geoffrey Garen <ggaren@apple.com>
-
- Build fix: re-readded this file.
-
- * runtime/DateInstanceCache.h: Added.
- (JSC::DateInstanceData::create):
- (JSC::DateInstanceData::DateInstanceData):
- (JSC::DateInstanceCache::DateInstanceCache):
- (JSC::DateInstanceCache::add):
- (JSC::DateInstanceCache::lookup):
-
-2009-10-27 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Darin Adler and Oliver Hunt.
-
- https://bugs.webkit.org/show_bug.cgi?id=30800
- Cache recently computed date data.
-
- SunSpider reports a ~0.5% speedup, mostly from date-format-tofte.js.
-
- * GNUmakefile.am:
- * JavaScriptCore.gypi:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
- * JavaScriptCore.xcodeproj/project.pbxproj: Added new file.
-
- * runtime/DateInstance.cpp:
- (JSC::DateInstance::DateInstance):
- (JSC::DateInstance::getGregorianDateTime): Use the shared cache.
-
- * runtime/DateInstance.h: Renamed m_cache to m_data, to avoid the confusion
- of a "cache cache".
-
- * runtime/DatePrototype.cpp:
- (JSC::formatLocaleDate):
- (JSC::dateProtoFuncToString):
- (JSC::dateProtoFuncToUTCString):
- (JSC::dateProtoFuncToISOString):
- (JSC::dateProtoFuncToDateString):
- (JSC::dateProtoFuncToTimeString):
- (JSC::dateProtoFuncGetFullYear):
- (JSC::dateProtoFuncGetUTCFullYear):
- (JSC::dateProtoFuncToGMTString):
- (JSC::dateProtoFuncGetMonth):
- (JSC::dateProtoFuncGetUTCMonth):
- (JSC::dateProtoFuncGetDate):
- (JSC::dateProtoFuncGetUTCDate):
- (JSC::dateProtoFuncGetDay):
- (JSC::dateProtoFuncGetUTCDay):
- (JSC::dateProtoFuncGetHours):
- (JSC::dateProtoFuncGetUTCHours):
- (JSC::dateProtoFuncGetMinutes):
- (JSC::dateProtoFuncGetUTCMinutes):
- (JSC::dateProtoFuncGetSeconds):
- (JSC::dateProtoFuncGetUTCSeconds):
- (JSC::dateProtoFuncGetTimezoneOffset):
- (JSC::setNewValueFromTimeArgs):
- (JSC::setNewValueFromDateArgs):
- (JSC::dateProtoFuncSetYear):
- (JSC::dateProtoFuncGetYear): Pass an ExecState to these functions, so they
- can access the DateInstanceCache.
-
- * runtime/JSGlobalData.h: Keep a DateInstanceCache.
-
-2009-10-27 James Robinson <jamesr@chromium.org>
-
- Reviewed by Darin Fisher.
-
- Ensures that JavaScriptCore/wtf/CurrentTime.cpp is not built in PLATFORM(CHROMIUM) builds.
-
- Chromium uses a different method to calculate the current time than is used in
- JavaScriptCore/wtf/CurrentTime.cpp. This can lead to time skew when calls to currentTime() and Chromium's time
- function are mixed. In particular, timers can get scheduled in the past which leads to 100% CPU use.
- See http://code.google.com/p/chromium/issues/detail?id=25892 for an example.
-
- https://bugs.webkit.org/show_bug.cgi?id=30833
-
- * JavaScriptCore.gyp/JavaScriptCore.gyp:
- * wtf/CurrentTime.cpp:
-
-2009-10-27 Peter Varga <pvarga@inf.u-szeged.hu>
-
- Rubber-stamped by Tor Arne Vestbø.
-
- Fix typo in RegexInterpreter.cpp and RegexJIT.cpp alterantive to
- alternative.
-
- * yarr/RegexInterpreter.cpp:
- (JSC::Yarr::ByteCompiler::alternativeBodyDisjunction):
- (JSC::Yarr::ByteCompiler::alternativeDisjunction):
- (JSC::Yarr::ByteCompiler::emitDisjunction):
- * yarr/RegexJIT.cpp:
- (JSC::Yarr::RegexGenerator::generateDisjunction):
-
-2009-10-26 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Darin Adler.
-
- Make .rc files compile on Windows without depending on MFC headers
- https://bugs.webkit.org/show_bug.cgi?id=30750
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.rc: Use
- winresrc.h because it exists even when MFC is not installed, and is
- all that's needed here.
-
-2009-10-26 Gabor Loki <loki@inf.u-szeged.hu>
-
- Reviewed by Gavin Barraclough.
-
- The thunkReturnAddress is on JITStackFrame on ARM JIT as well
- https://bugs.webkit.org/show_bug.cgi?id=30782
-
- Move the thunkReturnAddress from top of the stack into the JITStackFrame
- structure. This is a requirement for JSValue32_64 support on ARM.
-
- * assembler/MacroAssemblerARM.h:
- (JSC::MacroAssemblerARM::ret): Return with link register
- (JSC::MacroAssemblerARM::prepareCall): Store the return address in link register
- * jit/JIT.h: Remove unused ctiReturnRegister
- * jit/JITInlineMethods.h: Same as ARMv7
- (JSC::JIT::restoreArgumentReference): Ditto.
- (JSC::JIT::restoreArgumentReferenceForTrampoline): Ditto.
- * jit/JITOpcodes.cpp: Remove ctiReturnRegister related instruction
- * jit/JITStubs.cpp: Store thunkReturnAddress on JITStackFrame. Use
- small trampoline functions which handle return addresses for each
- CTI_STUB_FUNCTION.
- * jit/JITStubs.h: Store thunkReturnAddress on JITStackFrame
- (JSC::JITStackFrame::returnAddressSlot): Return with the address of thunkReturnAddress
- * yarr/RegexJIT.cpp:
- (JSC::Yarr::RegexGenerator::generateEnter): Remove the unnecessary instruction
-
-2009-10-26 Steve Block <steveblock@google.com>
-
- Reviewed by Darin Adler.
-
- Adds ability to disable ReadWriteLock on platforms (eg Android) that use pthreads but do not support pthread_rwlock.
- https://bugs.webkit.org/show_bug.cgi?id=30713
-
- * wtf/Platform.h: Modified. Defines HAVE_PTHREAD_RWLOCK for all platforms currently using pthreads.
- * wtf/Threading.h: Modified. Use pthread_rwlock_t only when HAVE_PTHREAD_RWLOCK is defined.
- * wtf/ThreadingPthreads.cpp: Modified. Build ReadWriteLock methods only when HAVE_PTHREAD_RWLOCK is defined.
-
-2009-10-24 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Holger Freyther.
-
- [Qt] [Symbian] Set the capability and memory required to run QtWebKit for Symbian
- https://bugs.webkit.org/show_bug.cgi?id=30476
-
- Assign ReadUserData WriteUserData NetworkServices Symbian capabilities
- to jsc.exe.
-
- * jsc.pro:
-
-2009-10-23 Steve Block <steveblock@google.com>
-
- Reviewed by Dmitry Titov.
-
- Fixes a leak in createThreadInternal on Android.
- https://bugs.webkit.org/show_bug.cgi?id=30698
-
- * wtf/ThreadingPthreads.cpp: Modified.
- (WTF::createThreadInternal): Avoid leaking a ThreadData object on failure.
-
-2009-10-22 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Alexey Proskuryakov.
-
- Fixed ASSERT when opening Safari's Caches window while the Web Inspector
- is open.
-
- * runtime/Collector.cpp:
- (JSC::typeName): Added two new types to the type name list in the Collector.
- These types have been around for a while, but nobody remembered to consider them here.
-
- * runtime/JSCell.h:
- (JSC::JSCell::isPropertyNameIterator):
- * runtime/JSPropertyNameIterator.h:
- (JSC::JSPropertyNameIterator::isPropertyNameIterator): Give the Collector
- a way to tell if a cell is a JSPropertyNameIterator.
-
-2009-10-22 Steve Falkenburg <sfalken@apple.com>
-
- Reviewed by Jon Honeycutt.
-
- https://bugs.webkit.org/show_bug.cgi?id=30686
- Remove debug-specific def file.
- Only Debug_All target uses JavaScriptCore_debug.dll naming, and since
- that target is only used internally, maintaining two files just to
- suppress a single link warning isn't worthwhile.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: Removed.
-
-2009-10-21 Jon Honeycutt <jhoneycutt@apple.com>
-
- <rdar://problem/7270320> Screenshots of off-screen plug-ins are blank
- <rdar://problem/7270314> After halting a transparent PluginView on
- Windows, the transparency is applied twice
-
- Reviewed by Dan Bernstein.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- Export WTF::deleteOwnedPtr(HDC).
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
- Ditto.
-
-2009-10-20 Geoffrey Garen <ggaren@apple.com>
-
- Windows build fix: updated variable name.
-
- * runtime/DatePrototype.cpp:
- (JSC::formatLocaleDate):
-
-2009-10-20 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Mark Rowe.
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_next_pname): Slightly tweaked this #ifdef to match the
- size of a JSValue because m_jsStrings is an array of JSValues.
-
-2009-10-20 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Mark Rowe.
-
- Fixed a 64-bit regression caused by the fix for
- https://bugs.webkit.org/show_bug.cgi?id=30570.
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_next_pname): Use TimesEight stepping on 64-bit, since
- 64-bit pointers are eight bytes long.
-
-2009-10-20 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Refactored DateInstance::msToGregorianDateTime so that a DateInstance's
- caller doesn't need to supply the DateInstance's own internal value to
- the DateInstance.
-
- * runtime/DateInstance.cpp:
- (JSC::DateInstance::getGregorianDateTime): Renamed from "msToGregorianDateTime".
-
- * runtime/DateInstance.h:
* runtime/DatePrototype.cpp:
(JSC::formatLocaleDate):
+ (JSC::fillStructuresUsingTimeArgs):
+ (JSC::fillStructuresUsingDateArgs):
(JSC::dateProtoFuncToString):
(JSC::dateProtoFuncToUTCString):
(JSC::dateProtoFuncToISOString):
@@ -16059,12073 +284,576 @@ The very last cell in the block is not allocated -- should not be marked.
(JSC::dateProtoFuncGetUTCMinutes):
(JSC::dateProtoFuncGetSeconds):
(JSC::dateProtoFuncGetUTCSeconds):
+ (JSC::dateProtoFuncGetMilliSeconds):
+ (JSC::dateProtoFuncGetUTCMilliseconds):
(JSC::dateProtoFuncGetTimezoneOffset):
+ (JSC::dateProtoFuncSetTime):
(JSC::setNewValueFromTimeArgs):
(JSC::setNewValueFromDateArgs):
+ (JSC::dateProtoFuncSetMilliSeconds):
+ (JSC::dateProtoFuncSetUTCMilliseconds):
+ (JSC::dateProtoFuncSetSeconds):
+ (JSC::dateProtoFuncSetUTCSeconds):
+ (JSC::dateProtoFuncSetMinutes):
+ (JSC::dateProtoFuncSetUTCMinutes):
+ (JSC::dateProtoFuncSetHours):
+ (JSC::dateProtoFuncSetUTCHours):
+ (JSC::dateProtoFuncSetDate):
+ (JSC::dateProtoFuncSetUTCDate):
+ (JSC::dateProtoFuncSetMonth):
+ (JSC::dateProtoFuncSetUTCMonth):
+ (JSC::dateProtoFuncSetFullYear):
+ (JSC::dateProtoFuncSetUTCFullYear):
(JSC::dateProtoFuncSetYear):
- (JSC::dateProtoFuncGetYear): Also renamed "utc" to "outputIsUTC", for clarity.
-
-2009-10-20 Gabor Loki <loki@inf.u-szeged.hu>
-
- Reviewed by Geoffrey Garen.
-
- The op_next_pname should use 4 bytes addressing mode in case of JSValue32
- https://bugs.webkit.org/show_bug.cgi?id=30570
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_next_pname):
-
-2009-10-20 Gabor Loki <loki@inf.u-szeged.hu>
-
- Reviewed by Oliver Hunt.
-
- Move OverridesMarkChildren flag from DatePrototype to its parent class
- https://bugs.webkit.org/show_bug.cgi?id=30372
-
- * runtime/DateInstance.h:
- (JSC::DateInstance::createStructure):
- * runtime/DatePrototype.h:
-
-2009-10-19 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Tightened up some put_by_id_transition code generation.
- https://bugs.webkit.org/show_bug.cgi?id=30539
-
- * jit/JIT.h:
- * jit/JITPropertyAccess.cpp:
- (JSC::JIT::testPrototype):
- (JSC::JIT::privateCompilePutByIdTransition): No need to do object type
- checks or read Structures and prototypes from objects: they're all known
- constants at compile time.
-
-2009-10-19 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Added a private API for getting a global context from a context, for
- clients who want to preserve a context for a later callback.
-
- * API/APICast.h:
- (toGlobalRef): Added an ASSERT, since this function is used more often
- than before.
-
- * API/JSContextRef.cpp:
- * API/JSContextRefPrivate.h: Added. The new API.
-
- * API/tests/testapi.c:
- (print_callAsFunction):
- (main): Test the new API.
-
- * JavaScriptCore.exp:
- * JavaScriptCore.xcodeproj/project.pbxproj: Build and export the new API.
-
-2009-10-17 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Tightened up some instanceof code generation.
- https://bugs.webkit.org/show_bug.cgi?id=30488
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_instanceof):
- (JSC::JIT::emitSlow_op_instanceof): No need to do object type checks -
- cell type checks and ImplementsDefaultHasIntance checks implicitly
- supersede object type checks.
-
-2009-10-18 Kwang Yul Seo <skyul@company100.net>
-
- Reviewed by Darin Adler.
-
- Use _stricmp and _strnicmp instead of deprecated stricmp and strnicmp.
- https://bugs.webkit.org/show_bug.cgi?id=30474
-
- stricmp and strnicmp are deprecated beginning in Visual
- C++ 2005. Use _stricmp and _strnicmp instead in StringExtras.h.
-
- * wtf/StringExtras.h:
- (strncasecmp):
- (strcasecmp):
-
-2009-10-16 Geoffrey Garen <ggaren@apple.com>
-
- Build fix: apparently we shouldn't export those symbols?
-
- * JavaScriptCore.exp:
-
-2009-10-16 Geoffrey Garen <ggaren@apple.com>
-
- Build fix: export some symbols.
-
- * JavaScriptCore.exp:
-
-2009-10-16 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- structure typeinfo flags should be inherited.
- https://bugs.webkit.org/show_bug.cgi?id=30468
-
- Add StructureFlag constant to the various JSC classes and use
- it for the TypeInfo construction. This allows us to simply
- accumulate flags by basing each classes StructureInfo on its parents.
-
- * API/JSCallbackConstructor.h:
- (JSC::JSCallbackConstructor::createStructure):
- * API/JSCallbackFunction.h:
- (JSC::JSCallbackFunction::createStructure):
- * API/JSCallbackObject.h:
- (JSC::JSCallbackObject::createStructure):
- * debugger/DebuggerActivation.h:
- (JSC::DebuggerActivation::createStructure):
- * runtime/Arguments.h:
- (JSC::Arguments::createStructure):
- * runtime/BooleanObject.h:
- (JSC::BooleanObject::createStructure):
- * runtime/DatePrototype.h:
- (JSC::DatePrototype::createStructure):
- * runtime/FunctionPrototype.h:
- (JSC::FunctionPrototype::createStructure):
- * runtime/GlobalEvalFunction.h:
- (JSC::GlobalEvalFunction::createStructure):
- * runtime/InternalFunction.h:
- (JSC::InternalFunction::createStructure):
- * runtime/JSActivation.h:
- (JSC::JSActivation::createStructure):
- * runtime/JSArray.h:
- (JSC::JSArray::createStructure):
- * runtime/JSByteArray.cpp:
- (JSC::JSByteArray::createStructure):
- * runtime/JSByteArray.h:
- * runtime/JSFunction.h:
- (JSC::JSFunction::createStructure):
- * runtime/JSGlobalObject.h:
- (JSC::JSGlobalObject::createStructure):
- * runtime/JSNotAnObject.h:
- (JSC::JSNotAnObject::createStructure):
- * runtime/JSONObject.h:
- (JSC::JSONObject::createStructure):
- * runtime/JSObject.h:
- (JSC::JSObject::createStructure):
- * runtime/JSStaticScopeObject.h:
- (JSC::JSStaticScopeObject::createStructure):
- * runtime/JSVariableObject.h:
- (JSC::JSVariableObject::createStructure):
- * runtime/JSWrapperObject.h:
- (JSC::JSWrapperObject::createStructure):
- * runtime/MathObject.h:
- (JSC::MathObject::createStructure):
- * runtime/NumberConstructor.h:
- (JSC::NumberConstructor::createStructure):
- * runtime/NumberObject.h:
- (JSC::NumberObject::createStructure):
- * runtime/RegExpConstructor.h:
- (JSC::RegExpConstructor::createStructure):
- * runtime/RegExpObject.h:
- (JSC::RegExpObject::createStructure):
- * runtime/StringObject.h:
- (JSC::StringObject::createStructure):
- * runtime/StringObjectThatMasqueradesAsUndefined.h:
- (JSC::StringObjectThatMasqueradesAsUndefined::createStructure):
-
-2009-10-16 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Fast for-in enumeration: Cache JSPropertyNameIterator; cache JSStrings
- in JSPropertyNameIterator; inline more code.
-
- 1.024x as fast on SunSpider (fasta: 1.43x as fast).
-
- * bytecode/CodeBlock.cpp:
- (JSC::CodeBlock::dump):
- * bytecode/Opcode.h:
- * bytecompiler/BytecodeGenerator.cpp:
- (JSC::BytecodeGenerator::emitGetPropertyNames):
- (JSC::BytecodeGenerator::emitNextPropertyName):
- * bytecompiler/BytecodeGenerator.h: Added a few extra operands to
- op_get_pnames and op_next_pname so that we can track iteration state
- in the register file instead of in the JSPropertyNameIterator. (To be
- cacheable, the JSPropertyNameIterator must be stateless.)
-
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::tryCachePutByID):
- (JSC::Interpreter::tryCacheGetByID): Updated for rename to
- "normalizePrototypeChain" and removal of "isCacheable".
-
- (JSC::Interpreter::privateExecute): Updated for in-RegisterFile
- iteration state tracking.
-
- * jit/JIT.cpp:
- (JSC::JIT::privateCompileMainPass):
- * jit/JIT.h:
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_get_pnames): Updated for in-RegisterFile
- iteration state tracking.
-
- (JSC::JIT::emit_op_next_pname): Inlined code generation for op_next_pname.
-
- * jit/JITStubs.cpp:
- (JSC::JITThunks::tryCachePutByID):
- (JSC::JITThunks::tryCacheGetByID): Updated for rename to
- "normalizePrototypeChain" and removal of "isCacheable".
-
- (JSC::DEFINE_STUB_FUNCTION):
- * jit/JITStubs.h:
- (JSC::): Added has_property and to_object stubs. Removed op_next_pname
- stub, since has_property is all we need anymore.
-
- * parser/Nodes.cpp:
- (JSC::ForInNode::emitBytecode): Updated for in-RegisterFile
- iteration state tracking.
-
- * runtime/JSCell.h:
- * runtime/JSObject.cpp:
- (JSC::JSObject::getPropertyNames): Don't do caching at this layer
- anymore, since we don't create a JSPropertyNameIterator at this layer.
-
- * runtime/JSPropertyNameIterator.cpp:
- (JSC::JSPropertyNameIterator::create): Do do caching at this layer.
- (JSC::JSPropertyNameIterator::get): Updated for in-RegisterFile
- iteration state tracking.
- (JSC::JSPropertyNameIterator::markChildren): Mark our JSStrings.
-
- * runtime/JSPropertyNameIterator.h:
- (JSC::JSPropertyNameIterator::size):
- (JSC::JSPropertyNameIterator::setCachedStructure):
- (JSC::JSPropertyNameIterator::cachedStructure):
- (JSC::JSPropertyNameIterator::setCachedPrototypeChain):
- (JSC::JSPropertyNameIterator::cachedPrototypeChain):
- (JSC::JSPropertyNameIterator::JSPropertyNameIterator):
- (JSC::Structure::setEnumerationCache): Don't store iteration state in
- a JSPropertyNameIterator. Do cache a JSPropertyNameIterator in a
- Structure.
-
- * runtime/JSValue.h:
- (JSC::asCell):
- * runtime/MarkStack.h: Make those mischievous #include gods happy.
-
- * runtime/ObjectConstructor.cpp:
-
- * runtime/Operations.h:
- (JSC::normalizePrototypeChain): Renamed countPrototypeChainEntriesAndCheckForProxies
- to normalizePrototypeChain, since it changes dictionary prototypes to
- non-dictionary objects.
-
- * runtime/PropertyNameArray.cpp:
- (JSC::PropertyNameArray::add):
- * runtime/PropertyNameArray.h:
- (JSC::PropertyNameArrayData::PropertyNameArrayData):
- (JSC::PropertyNameArray::data):
- (JSC::PropertyNameArray::size):
- (JSC::PropertyNameArray::begin):
- (JSC::PropertyNameArray::end): Simplified some code here to help with
- current and future refactoring.
-
- * runtime/Protect.h:
- * runtime/Structure.cpp:
- (JSC::Structure::~Structure):
- (JSC::Structure::addPropertyWithoutTransition):
- (JSC::Structure::removePropertyWithoutTransition): No need to clear
- the enumeration cache with adding / removing properties without
- transition. It is an error to add / remove properties without transition
- once an object has been observed, and we can ASSERT to catch that.
-
- * runtime/Structure.h:
- (JSC::Structure::enumerationCache): Changed the enumeration cache to
- hold a JSPropertyNameIterator.
-
- * runtime/StructureChain.cpp:
- * runtime/StructureChain.h:
- (JSC::StructureChain::head): Removed StructureChain::isCacheable because
- it was wrong-headed in two ways: (1) It gave up when a prototype was a
- dictionary, but instead we want un-dictionary heavily accessed
- prototypes; (2) It folded a test for hasDefaultGetPropertyNames() into
- a generic test for "cacheable-ness", but hasDefaultGetPropertyNames()
- is only releavant to for-in caching.
-
-2009-10-16 Steve Falkenburg <sfalken@apple.com>
-
- Reviewed by Adam Roben.
-
- Add a Debug_All configuration to build entire stack as debug.
- Change Debug_Internal to:
- - stop using _debug suffix for all WebKit/Safari binaries
- - not use _debug as a DLL naming suffix
- - use non-debug C runtime lib.
-
- * JavaScriptCore.vcproj/JavaScriptCore.make: Debug build in makefile should build Debug_All.
- * JavaScriptCore.vcproj/JavaScriptCore.sln: Add Debug_All configuration.
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add Debug_All configuration.
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj: Renamed single configuration from "Release" to "all".
- * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: Add Debug_All configuration.
- * JavaScriptCore.vcproj/WTF/WTF.vcproj: Add Debug_All configuration.
- * JavaScriptCore.vcproj/jsc/jsc.vcproj: Add Debug_All configuration.
- * JavaScriptCore.vcproj/testapi/testapi.vcproj: Add Debug_All configuration.
-
-2009-10-16 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- Make typeinfo flags default to false
- https://bugs.webkit.org/show_bug.cgi?id=30372
-
- Last part -- replace HasDefaultGetPropertyNames with OverridesGetPropertyNames
- flag.
-
- * API/JSCallbackConstructor.h:
- (JSC::JSCallbackConstructor::createStructure):
- * API/JSCallbackObject.h:
- (JSC::JSCallbackObject::createStructure):
- * debugger/DebuggerActivation.h:
- (JSC::DebuggerActivation::createStructure):
- * runtime/Arguments.h:
- (JSC::Arguments::createStructure):
- * runtime/BooleanObject.h:
- (JSC::BooleanObject::createStructure):
- * runtime/DatePrototype.h:
- (JSC::DatePrototype::createStructure):
- * runtime/FunctionPrototype.h:
- (JSC::FunctionPrototype::createStructure):
- * runtime/GlobalEvalFunction.h:
- (JSC::GlobalEvalFunction::createStructure):
- * runtime/JSAPIValueWrapper.h:
- (JSC::JSAPIValueWrapper::createStructure):
- * runtime/JSActivation.h:
- (JSC::JSActivation::createStructure):
- * runtime/JSArray.h:
- (JSC::JSArray::createStructure):
- * runtime/JSByteArray.cpp:
- (JSC::JSByteArray::createStructure):
- * runtime/JSFunction.h:
- (JSC::JSFunction::createStructure):
- * runtime/JSGlobalObject.h:
- (JSC::JSGlobalObject::createStructure):
- * runtime/JSNotAnObject.h:
- (JSC::JSNotAnObject::createStructure):
- * runtime/JSONObject.h:
- (JSC::JSONObject::createStructure):
- * runtime/JSObject.cpp:
- (JSC::JSObject::getPropertyNames):
- * runtime/JSObject.h:
- (JSC::JSObject::createStructure):
- * runtime/JSStaticScopeObject.h:
- (JSC::JSStaticScopeObject::createStructure):
- * runtime/JSTypeInfo.h:
- (JSC::TypeInfo::overridesGetPropertyNames):
- * runtime/JSVariableObject.h:
- (JSC::JSVariableObject::createStructure):
- * runtime/JSWrapperObject.h:
- (JSC::JSWrapperObject::createStructure):
- * runtime/MathObject.h:
- (JSC::MathObject::createStructure):
- * runtime/NumberConstructor.h:
- (JSC::NumberConstructor::createStructure):
- * runtime/NumberObject.h:
- (JSC::NumberObject::createStructure):
- * runtime/RegExpConstructor.h:
- (JSC::RegExpConstructor::createStructure):
- * runtime/RegExpObject.h:
- (JSC::RegExpObject::createStructure):
- * runtime/StringObject.h:
- (JSC::StringObject::createStructure):
- * runtime/StringObjectThatMasqueradesAsUndefined.h:
- (JSC::StringObjectThatMasqueradesAsUndefined::createStructure):
- * runtime/StructureChain.cpp:
- (JSC::StructureChain::isCacheable):
-
-2009-10-16 Kevin Ollivier <kevino@theolliviers.com>
-
- wxMSW build fix, we can't use the simple hash there because the PlatformModuleVersion
- structure differs.
-
- * wtf/Platform.h:
-
-2009-10-16 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- [Qt] Implement ExecutableAllocator for Symbian
- https://bugs.webkit.org/show_bug.cgi?id=29946
-
- Tested with YARR JIT enabled for Symbian;
- This patch does not (yet) enable YARR JIT by default.
-
- * JavaScriptCore.pri:
- * jit/ExecutableAllocator.h:
- * jit/ExecutableAllocatorSymbian.cpp: Added.
- (JSC::ExecutableAllocator::intializePageSize):
- (JSC::ExecutablePool::systemAlloc):
- (JSC::ExecutablePool::systemRelease):
-
-2009-10-15 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Darin Adler.
-
- Make typeinfo flags default to false
- https://bugs.webkit.org/show_bug.cgi?id=30372
-
- Part 2 -- Reverse the TypeInfo HasDefaultMark flag to OverridesMarkChildren, etc
-
- * API/JSCallbackConstructor.h:
- (JSC::JSCallbackConstructor::createStructure):
- * API/JSCallbackFunction.h:
- (JSC::JSCallbackFunction::createStructure):
- * API/JSCallbackObject.h:
- (JSC::JSCallbackObject::createStructure):
- * debugger/DebuggerActivation.h:
- (JSC::DebuggerActivation::createStructure):
- * runtime/Arguments.h:
- (JSC::Arguments::createStructure):
- * runtime/BooleanObject.h:
- (JSC::BooleanObject::createStructure):
- * runtime/DatePrototype.h:
- (JSC::DatePrototype::createStructure):
- * runtime/FunctionPrototype.h:
- (JSC::FunctionPrototype::createStructure):
- * runtime/GetterSetter.h:
- (JSC::GetterSetter::createStructure):
- * runtime/GlobalEvalFunction.h:
- (JSC::GlobalEvalFunction::createStructure):
- * runtime/InternalFunction.h:
- (JSC::InternalFunction::createStructure):
- * runtime/JSAPIValueWrapper.h:
- (JSC::JSAPIValueWrapper::createStructure):
- * runtime/JSActivation.h:
- (JSC::JSActivation::createStructure):
- * runtime/JSArray.h:
- (JSC::JSArray::createStructure):
- (JSC::MarkStack::markChildren):
- * runtime/JSByteArray.cpp:
- (JSC::JSByteArray::createStructure):
- * runtime/JSFunction.h:
- (JSC::JSFunction::createStructure):
- * runtime/JSGlobalObject.h:
- (JSC::JSGlobalObject::createStructure):
- * runtime/JSNotAnObject.h:
- (JSC::JSNotAnObject::createStructure):
- * runtime/JSNumberCell.h:
- (JSC::JSNumberCell::createStructure):
- * runtime/JSONObject.h:
- (JSC::JSONObject::createStructure):
- * runtime/JSObject.h:
- (JSC::JSObject::createStructure):
- * runtime/JSPropertyNameIterator.h:
- (JSC::JSPropertyNameIterator::createStructure):
- * runtime/JSStaticScopeObject.h:
- (JSC::JSStaticScopeObject::createStructure):
- * runtime/JSString.h:
- (JSC::JSString::createStructure):
- * runtime/JSTypeInfo.h:
- (JSC::TypeInfo::overridesMarkChildren):
- * runtime/JSVariableObject.h:
- (JSC::JSVariableObject::createStructure):
- * runtime/JSWrapperObject.h:
- (JSC::JSWrapperObject::createStructure):
- * runtime/MathObject.h:
- (JSC::MathObject::createStructure):
- * runtime/NumberConstructor.h:
- (JSC::NumberConstructor::createStructure):
- * runtime/NumberObject.h:
- (JSC::NumberObject::createStructure):
- * runtime/RegExpConstructor.h:
- (JSC::RegExpConstructor::createStructure):
- * runtime/RegExpObject.h:
- (JSC::RegExpObject::createStructure):
- * runtime/StringObject.h:
- (JSC::StringObject::createStructure):
- * runtime/StringObjectThatMasqueradesAsUndefined.h:
- (JSC::StringObjectThatMasqueradesAsUndefined::createStructure):
-
-2009-10-14 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Geoff Garen.
-
- Make typeinfo flags default to false
- https://bugs.webkit.org/show_bug.cgi?id=30372
-
- Part 1. Reverse the HasStandardGetOwnPropertySlot flag.
-
- * API/JSCallbackConstructor.h:
- (JSC::JSCallbackConstructor::createStructure):
- * API/JSCallbackFunction.h:
- (JSC::JSCallbackFunction::createStructure):
- * API/JSCallbackObject.h:
- (JSC::JSCallbackObject::createStructure):
- * debugger/DebuggerActivation.h:
- (JSC::DebuggerActivation::createStructure):
- * jit/JITStubs.cpp:
- (JSC::DEFINE_STUB_FUNCTION):
- * runtime/Arguments.h:
- (JSC::Arguments::createStructure):
- * runtime/BooleanObject.h:
- (JSC::BooleanObject::createStructure):
- * runtime/DatePrototype.h:
- (JSC::DatePrototype::createStructure):
- * runtime/FunctionPrototype.h:
- (JSC::FunctionPrototype::createStructure):
- * runtime/GlobalEvalFunction.h:
- (JSC::GlobalEvalFunction::createStructure):
- * runtime/InternalFunction.h:
- (JSC::InternalFunction::createStructure):
- * runtime/JSActivation.h:
- (JSC::JSActivation::createStructure):
- * runtime/JSArray.h:
- (JSC::JSArray::createStructure):
- * runtime/JSByteArray.cpp:
- (JSC::JSByteArray::createStructure):
- * runtime/JSFunction.h:
- (JSC::JSFunction::createStructure):
- * runtime/JSGlobalObject.h:
- (JSC::JSGlobalObject::createStructure):
- * runtime/JSNumberCell.h:
- (JSC::JSNumberCell::createStructure):
- * runtime/JSONObject.h:
- (JSC::JSONObject::createStructure):
- * runtime/JSObject.h:
- (JSC::JSObject::createStructure):
- (JSC::JSCell::fastGetOwnPropertySlot):
- * runtime/JSStaticScopeObject.h:
- (JSC::JSStaticScopeObject::createStructure):
- * runtime/JSString.h:
- (JSC::JSString::createStructure):
- * runtime/JSTypeInfo.h:
- (JSC::TypeInfo::overridesGetOwnPropertySlot):
- * runtime/JSVariableObject.h:
- (JSC::JSVariableObject::createStructure):
- * runtime/JSWrapperObject.h:
- (JSC::JSWrapperObject::createStructure):
- * runtime/MathObject.h:
- (JSC::MathObject::createStructure):
- * runtime/NumberConstructor.h:
- (JSC::NumberConstructor::createStructure):
- * runtime/NumberObject.h:
- (JSC::NumberObject::createStructure):
- * runtime/RegExpConstructor.h:
- (JSC::RegExpConstructor::createStructure):
- * runtime/RegExpObject.h:
- (JSC::RegExpObject::createStructure):
- * runtime/StringObject.h:
- (JSC::StringObject::createStructure):
- * runtime/StringObjectThatMasqueradesAsUndefined.h:
- (JSC::StringObjectThatMasqueradesAsUndefined::createStructure):
-
-2009-10-14 Kevin Ollivier <kevino@theolliviers.com>
-2009-10-14 Darin Adler <darin@apple.com>
-
- Additions so fix for https://bugs.webkit.org/show_bug.cgi?id=18994
- can build on Windows.
-
- * wtf/MathExtras.h: Added llround and llroundf for Windows.
-
-2009-10-14 Kevin Ollivier <kevino@theolliviers.com>
-
- wx build fix. Set ENABLE_PLUGIN_PACKAGE_SIMPLE_HASH for plugins while we're still building stubs.
-
- * wtf/Platform.h:
-
-2009-10-13 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- Refactor ENABLE_PLUGIN_PACKAGE_SIMPLE_HASH
- https://bugs.webkit.org/show_bug.cgi?id=30278
-
- Move the definition of ENABLE_PLUGIN_PACKAGE_SIMPLE_HASH
- from the make system into common code.
-
- * wtf/Platform.h:
-
-2009-10-13 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Darin Adler.
-
- ARM compiler does not understand reinterpret_cast<void*>
- https://bugs.webkit.org/show_bug.cgi?id=29034
-
- Change reinterpret_cast<void*> to regular C style (void*) cast
- for the ARM RVCT compiler.
-
- * assembler/MacroAssemblerCodeRef.h:
- (JSC::FunctionPtr::FunctionPtr):
- * jit/JITOpcodes.cpp: Cast to FunctionPtr first
- instead of directly casting to reinterpret_cast
- * jit/JITStubCall.h: Ditto + change the type of m_stub
- from void* to FunctionPtr.
- (JSC::JITStubCall::JITStubCall):
- (JSC::JITStubCall::call):
- * jit/JITStubs.cpp: Ditto.
- (JSC::DEFINE_STUB_FUNCTION(EncodedJSValue, op_throw)):
-
-2009-10-11 Oliver Hunt <oliver@apple.com>
-
- Re-enable the JIT.
-
- * wtf/Platform.h:
-
-2009-10-10 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Maciej Stachowiak.
-
- Support for String.trim(), String.trimLeft() and String.trimRight() methods
- https://bugs.webkit.org/show_bug.cgi?id=26590
-
- Implement trim, trimLeft, and trimRight
-
- * runtime/StringPrototype.cpp:
- (JSC::isTrimWhitespace):
- Our normal string whitespace function does not include U+200B which
- is needed for compatibility with mozilla's implementation of trim.
- U+200B does not appear to be expected according to spec, however I am
- choosing to be lax, and match mozilla behavior so have added this
- exception.
- (JSC::trimString):
-
-2009-10-09 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Eliminated some legacy bytecode weirdness.
-
- Use vPC[x] subscripting instead of ++vPC to access instruction operands.
- This is simpler, and often more efficient.
-
- To support this, and to remove use of hard-coded offsets in bytecode and
- JIT code generation and dumping, calculate jump offsets from the beginning
- of an instruction, rather than the middle or end.
-
- Also, use OPCODE_LENGTH instead of hard-coded constants for the sizes of
- opcodes.
-
- SunSpider reports no change in JIT mode, and a 1.01x speedup in Interpreter
- mode.
-
- * bytecode/CodeBlock.cpp:
- (JSC::printConditionalJump):
- (JSC::CodeBlock::dump):
- * bytecompiler/BytecodeGenerator.cpp:
- (JSC::BytecodeGenerator::emitJump):
- (JSC::BytecodeGenerator::emitJumpIfTrue):
- (JSC::BytecodeGenerator::emitJumpIfFalse):
- (JSC::BytecodeGenerator::emitJumpIfNotFunctionCall):
- (JSC::BytecodeGenerator::emitJumpIfNotFunctionApply):
- (JSC::BytecodeGenerator::emitComplexJumpScopes):
- (JSC::BytecodeGenerator::emitJumpScopes):
- (JSC::BytecodeGenerator::emitNextPropertyName):
- (JSC::BytecodeGenerator::emitCatch):
- (JSC::BytecodeGenerator::emitJumpSubroutine):
- (JSC::prepareJumpTableForImmediateSwitch):
- (JSC::prepareJumpTableForCharacterSwitch):
- (JSC::prepareJumpTableForStringSwitch):
- (JSC::BytecodeGenerator::endSwitch):
- * bytecompiler/Label.h:
- (JSC::Label::setLocation):
- (JSC::Label::bind):
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::resolve):
- (JSC::Interpreter::resolveSkip):
- (JSC::Interpreter::resolveGlobal):
- (JSC::Interpreter::resolveBase):
- (JSC::Interpreter::resolveBaseAndProperty):
- (JSC::Interpreter::createExceptionScope):
- (JSC::Interpreter::privateExecute):
- * interpreter/Interpreter.h:
- * jit/JIT.cpp:
- (JSC::JIT::privateCompile):
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_jnless):
- (JSC::JIT::emitSlow_op_jnless):
- (JSC::JIT::emit_op_jnlesseq):
- (JSC::JIT::emitSlow_op_jnlesseq):
- (JSC::JIT::emitBinaryDoubleOp):
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_jmp):
- (JSC::JIT::emit_op_loop):
- (JSC::JIT::emit_op_loop_if_less):
- (JSC::JIT::emitSlow_op_loop_if_less):
- (JSC::JIT::emit_op_loop_if_lesseq):
- (JSC::JIT::emitSlow_op_loop_if_lesseq):
- (JSC::JIT::emit_op_loop_if_true):
- (JSC::JIT::emitSlow_op_loop_if_true):
- (JSC::JIT::emit_op_jfalse):
- (JSC::JIT::emitSlow_op_jfalse):
- (JSC::JIT::emit_op_jtrue):
- (JSC::JIT::emitSlow_op_jtrue):
- (JSC::JIT::emit_op_jeq_null):
- (JSC::JIT::emit_op_jneq_null):
- (JSC::JIT::emit_op_jneq_ptr):
- (JSC::JIT::emit_op_jsr):
- (JSC::JIT::emit_op_next_pname):
- (JSC::JIT::emit_op_jmp_scopes):
-
-2009-10-09 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Migrated some code that didn't belong out of Structure.
-
- SunSpider says maybe 1.03x faster.
-
- * runtime/JSCell.h: Nixed Structure::markAggregate, and made marking of
- a Structure's prototype the direct responsility of the object using it.
- (Giving Structure a mark function was misleading because it implied that
- all live structures get marked during GC, when they don't.)
-
- * runtime/JSGlobalObject.cpp:
- (JSC::markIfNeeded):
- (JSC::JSGlobalObject::markChildren): Added code to mark prototypes stored
- on the global object. Maybe this wasn't necessary, but now we don't have
- to wonder.
-
- * runtime/JSObject.cpp:
- (JSC::JSObject::getPropertyNames):
- (JSC::JSObject::getOwnPropertyNames):
- (JSC::JSObject::getEnumerableNamesFromClassInfoTable):
- * runtime/JSObject.h:
- (JSC::JSObject::markChildrenDirect):
- * runtime/PropertyNameArray.h:
- * runtime/Structure.cpp:
- * runtime/Structure.h:
- (JSC::Structure::setEnumerationCache):
- (JSC::Structure::enumerationCache): Moved property name gathering code
- from Structure to JSObject because having a Structure iterate its JSObject
- was a layering violation. A JSObject is implemented using a Structure; not
- the other way around.
-
-2009-10-09 Mark Rowe <mrowe@apple.com>
-
- Attempt to fix the GTK release build.
-
- * GNUmakefile.am: Include Grammar.cpp in release builds now that
- AllInOneFile.cpp is gone.
-
-2009-10-09 Gabor Loki <loki@inf.u-szeged.hu>
-
- Rubber-stamped by Eric Seidel.
-
- Add ARM JIT support for Gtk port (disabled by default)
- https://bugs.webkit.org/show_bug.cgi?id=30228
-
- * GNUmakefile.am:
-
-2009-10-08 Geoffrey Garen <ggaren@apple.com>
-
- Tiger build fix: added a few more variable initializations.
-
- * runtime/StringPrototype.cpp:
- (JSC::stringProtoFuncReplace):
- (JSC::stringProtoFuncSearch):
-
-2009-10-08 Geoffrey Garen <ggaren@apple.com>
-
- Qt build fix: added missing #include.
-
- * jsc.cpp:
-
-2009-10-08 Geoffrey Garen <ggaren@apple.com>
-
- Tiger build fix: initialize variable whose initialization the compiler
- can't otherwise figure out.
-
- * runtime/RegExpObject.cpp:
- (JSC::RegExpObject::match):
-
-2009-10-08 Geoffrey Garen <ggaren@apple.com>
-
- Windows build fix: updated exports.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
-
-2009-10-08 Geoffrey Garen <ggaren@apple.com>
-
- Tiger build fix: fixed file name case.
-
- * JavaScriptCore.xcodeproj/project.pbxproj:
-
-2009-10-08 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Maciej Stachowiak.
-
- At long last, I pronounce the death of AllInOneFile.cpp.
-
- SunSpider reports a 1.01x speedup.
-
- * AllInOneFile.cpp: Removed.
- * GNUmakefile.am:
- * JavaScriptCore.exp:
- * JavaScriptCore.gypi:
- * JavaScriptCore.xcodeproj/project.pbxproj: Added missing project files
- to compilation stages.
-
- * parser/Grammar.y:
- * parser/Lexer.cpp:
- * parser/Lexer.h:
- (JSC::jscyylex):
- * runtime/ArrayConstructor.cpp:
- (JSC::constructArrayWithSizeQuirk):
- * runtime/Collector.h:
- * runtime/JSCell.cpp:
- (JSC::JSCell::operator new):
- * runtime/JSCell.h:
- (JSC::JSCell::operator new):
- * runtime/JSGlobalObject.cpp:
- (JSC::JSGlobalObject::operator new):
- * runtime/JSNumberCell.h:
- (JSC::JSNumberCell::operator new):
- * runtime/JSString.cpp:
- * runtime/JSString.h:
- (JSC::jsString):
- (JSC::jsSubstring):
- (JSC::jsOwnedString):
- * runtime/RegExpConstructor.cpp:
- * runtime/RegExpConstructor.h:
- (JSC::RegExpConstructorPrivate::RegExpConstructorPrivate):
- (JSC::RegExpConstructorPrivate::lastOvector):
- (JSC::RegExpConstructorPrivate::tempOvector):
- (JSC::RegExpConstructorPrivate::changeLastOvector):
- (JSC::RegExpConstructor::performMatch):
- * runtime/StringPrototype.cpp:
- (JSC::stringProtoFuncMatch):
- * yarr/RegexJIT.cpp:
- * yarr/RegexJIT.h:
- (JSC::Yarr::executeRegex): Inlined a few things that Shark said
- were hot, on the presumption that AllInOneFile.cpp used to inline them
- automatically.
-
-2009-10-08 Zoltan Herczeg <zherczeg@inf.u-szeged.hu>
-
- Reviewed by Gavin Barraclough.
-
- Fix for JIT'ed op_call instructions (evals, constructs, etc.)
- when !ENABLE(JIT_OPTIMIZE_CALL) && USE(JSVALUE32_64)
-
- https://bugs.webkit.org/show_bug.cgi?id=30201
-
- * jit/JITCall.cpp:
- (JSC::JIT::compileOpCall):
-
-2009-10-07 Geoffrey Garen <ggaren@apple.com>
-
- Windows build fix: removed no longer exported symbol.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
-
-2009-10-07 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Fixed <rdar://problem/5751979> Database code takes JSLock on secondary
- thread, permanently slowing down JavaScript
-
- Removed the optional lock from Heap::protect, Heap::unprotect, and friends,
- since WebCore no longer uses it.
-
- * JavaScriptCore.exp:
- * runtime/Collector.cpp:
- (JSC::Heap::protect):
- (JSC::Heap::unprotect):
- (JSC::Heap::markProtectedObjects):
- (JSC::Heap::protectedGlobalObjectCount):
- (JSC::Heap::protectedObjectCount):
- (JSC::Heap::protectedObjectTypeCounts):
- * runtime/Collector.h:
-
-2009-10-07 Zoltan Horvath <zoltan@webkit.org>
-
- Reviewed by Darin Adler.
-
- Allow custom memory allocation control for JavaScriptCore's IdentifierArena
- https://bugs.webkit.org/show_bug.cgi?id=30158
-
- Inherits IdentifierArena class from FastAllocBase because it has been
- instantiated by 'new' in JavaScriptCore/parser/ParserArena.cpp:36.
-
- * parser/ParserArena.h:
-
-2009-10-07 Adam Roben <aroben@apple.com>
-
- Export DateInstance::info in a way that works on Windows
-
- Fixes <http://webkit.org/b/30171>
- fast/dom/Window/window-postmessage-clone.html fails on Windows
-
- Reviewed by Anders Carlsson.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
- Removed the export of DateInstance::info from here.
-
- * runtime/DateInstance.h: Use JS_EXPORTDATA to export
- DateInstance::info, which is the required way of exporting data on
- Windows.
-
-2009-10-07 Jørgen Lind <jorgen.lind@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- When enabling or disabling the JIT through .qmake.cache, make sure
- to also toggle ENABLE_YARR_JIT.
-
- * JavaScriptCore.pri:
-
-2009-10-06 Priit Laes <plaes@plaes.org>
-
- Reviewed by Gavin Barraclough.
-
- Linking fails with "relocation R_X86_64_PC32 against symbol
- `cti_vm_throw'"
- https://bugs.webkit.org/show_bug.cgi?id=28422
-
- * jit/JITStubs.cpp:
- Mark cti_vm_throw symbol as PLT-indirect symbol, so it doesn't end up
- in text segment causing relocation errors on amd64 architecture.
- Introduced new define SYMBOL_STRING_RELOCATION for such symbols.
-
-2009-10-06 Oliver Hunt <oliver@apple.com>
-
- Windows linking fix
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
-
-2009-10-06 Oliver Hunt <oliver@apple.com>
-
- Reviewed by NOBODY (build fix).
-
- Windows build fix.
-
- * runtime/DateInstance.cpp:
-
-2009-10-05 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- It should be possible to post (clone) built-in JS objects to Workers
- https://bugs.webkit.org/show_bug.cgi?id=22878
-
- Expose helpers to throw correct exceptions during object graph walk
- used for cloning and add a helper function to create Date instances
- without going through the JS Date constructor function.
-
- * JavaScriptCore.exp:
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * runtime/DateInstance.cpp:
- (JSC::DateInstance::DateInstance):
- * runtime/DateInstance.h:
- * runtime/ExceptionHelpers.cpp:
- (JSC::createTypeError):
- * runtime/ExceptionHelpers.h:
-
-2009-10-06 David Levin <levin@chromium.org>
-
- Reviewed by Oliver Hunt.
-
- StringImpl needs a method to get an instance for another thread which doesn't copy the underlying buffer.
- https://bugs.webkit.org/show_bug.cgi?id=30095
-
- * wtf/CrossThreadRefCounted.h:
- Removed an unused function and assert improvement.
- (WTF::CrossThreadRefCounted::isOwnedByCurrentThread): Moved out common code from asserts.
- (WTF::CrossThreadRefCounted::ref): Changed assert to use the common method.
- (WTF::CrossThreadRefCounted::deref): Changed assert to use the common method.
- (WTF::CrossThreadRefCounted::crossThreadCopy): Since this includes a potentially
- non-threadsafe operation, add an assert that the class is owned by the current thread.
-
-2009-10-05 Kevin Ollivier <kevino@theolliviers.com>
-
- wx build fix. Add Symbian files to the list of excludes.
-
- * wscript:
-
-2009-10-05 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- [Qt] Remove precompiled header from JavaScriptCore compilation to
- prevent qmake warning during autonomous compilation.
- https://bugs.webkit.org/show_bug.cgi?id=30069
-
- * JavaScriptCore.pro:
-
-2009-10-02 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Removed the concept of a "fast access cutoff" in arrays, because it
- punished some patterns of array access too much, and made things too
- complex for inlining in some cases.
-
- 1.3% speedup on SunSpider.
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emitSlow_op_get_by_val):
- (JSC::JIT::emitSlow_op_put_by_val):
- * jit/JITPropertyAccess.cpp:
- (JSC::JIT::emit_op_get_by_val):
- (JSC::JIT::emitSlow_op_get_by_val):
- (JSC::JIT::emit_op_put_by_val):
- (JSC::JIT::emitSlow_op_put_by_val):
- * jit/JITStubs.cpp:
- * jit/JITStubs.h:
- (JSC::): Check m_vectorLength instead of m_fastAccessCutoff when
- getting / putting from / to an array. Inline putting past the end of
- the array.
-
- * runtime/JSArray.cpp:
- (JSC::JSArray::JSArray):
- (JSC::JSArray::getOwnPropertySlot):
- (JSC::JSArray::getOwnPropertyDescriptor):
- (JSC::JSArray::put):
- (JSC::JSArray::putSlowCase):
- (JSC::JSArray::deleteProperty):
- (JSC::JSArray::getOwnPropertyNames):
- (JSC::JSArray::increaseVectorLength):
- (JSC::JSArray::setLength):
- (JSC::JSArray::pop):
- (JSC::JSArray::push):
- (JSC::JSArray::sort):
- (JSC::JSArray::fillArgList):
- (JSC::JSArray::copyToRegisters):
- (JSC::JSArray::compactForSorting):
- (JSC::JSArray::checkConsistency):
- * runtime/JSArray.h:
- (JSC::JSArray::canGetIndex):
- (JSC::JSArray::canSetIndex):
- (JSC::JSArray::setIndex):
- (JSC::JSArray::markChildrenDirect): Removed m_fastAccessCutoff, and
- replaced with checks for JSValue() to detect reads and writes from / to
- uninitialized parts of the array.
-
-2009-10-02 Jonni Rainisto <jonni.rainisto@nokia.com>
-
- Reviewed by Darin Adler.
-
- Math.random() gives too low values on Win32 when _CRT_RAND_S is not defined
- https://bugs.webkit.org/show_bug.cgi?id=29956
-
- * wtf/RandomNumber.cpp:
- (WTF::randomNumber): Added PLATFORM(WIN_OS) to handle 15bit rand()
-
-2009-10-02 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Take one branch instead of two to test for JSValue().
-
- 1.1% SunSpider speedup.
-
- * jit/JITCall.cpp:
- (JSC::JIT::compileOpCall):
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_to_jsnumber):
- (JSC::JIT::emit_op_create_arguments):
- * jit/JITPropertyAccess.cpp:
- (JSC::JIT::emitSlow_op_get_by_val):
- (JSC::JIT::emit_op_put_by_val): Test for the empty value tag, instead
- of testing for the cell tag with a 0 payload.
-
- * runtime/JSValue.cpp:
- (JSC::JSValue::description): Added support for dumping the new empty value,
- and deleted values, in debug builds.
-
- * runtime/JSValue.h:
- (JSC::JSValue::JSValue()): Construct JSValue() with the empty value tag.
-
- (JSC::JSValue::JSValue(JSCell*)): Convert null pointer to the empty value
- tag, to avoid having two different c++ versions of null / empty.
-
- (JSC::JSValue::operator bool): Test for the empty value tag, instead
- of testing for the cell tag with a 0 payload.
-
-2009-10-02 Steve Falkenburg <sfalken@apple.com>
-
- Reviewed by Mark Rowe.
-
- <https://bugs.webkit.org/show_bug.cgi?id=29989>
- Safari version number shouldn't be exposed in WebKit code
-
- For a WebKit version of 532.3.4:
- Product version is: 5.32.3.4 (was 4.0.3.0)
- File version is: 5.32.3.4 (was 4.532.3.4)
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.rc:
-
-2009-10-02 Tor Arne Vestbø <tor.arne.vestbo@nokia.com>
-
- Rubber-stamped by Simon Hausmann.
-
- Fix the Qt on Mac OS X build.
-
- * wtf/FastMalloc.cpp:
-
-2009-10-02 Jørgen Lind <jorgen.lind@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- Allow enabling and disabling of the JIT through a qmake variable.
-
- Qt's configure may set this variable through .qmake.cache if a
- commandline option is given and/or the compile test for hwcap.h
- failed/succeeded.
-
- * JavaScriptCore.pri:
-
-2009-10-01 Mark Rowe <mrowe@apple.com>
-
- Fix the Tiger build. Don't unconditionally enable 3D canvas as it is not supported on Tiger.
-
- * Configurations/FeatureDefines.xcconfig:
-
-2009-10-01 Yongjun Zhang <yongjun.zhang@nokia.com>
-
- Reviewed by Darin Adler.
-
- https://bugs.webkit.org/show_bug.cgi?id=29187
-
- Don't inline ~ListRefPtr() to work around winscw compiler forward declaration
- bug regarding templated classes.
-
- The compiler bug is reported at:
- https://xdabug001.ext.nokia.com/bugzilla/show_bug.cgi?id=9812
-
- The change will be reverted when the above bug is fixed in winscw compiler.
-
- * wtf/ListRefPtr.h:
- (WTF::::~ListRefPtr):
-
-2009-10-01 Zoltan Horvath <zoltan@webkit.org>
-
- Reviewed by Simon Hausmann.
-
- [Qt] Allow custom memory allocation control for the whole JavaScriptCore
- https://bugs.webkit.org/show_bug.cgi?id=27029
-
- Since in JavaScriptCore almost every class which has been instantiated by operator new is
- inherited from FastAllocBase (bug #20422), we disable customizing global operator new for the Qt-port
- when USE_SYSTEM_MALLOC=0.
-
- Add #include <unistd.h> to FastMalloc.cpp because it's used by TCMalloc_PageHeap::scavengerThread().
- (It's needed for the functionality of TCmalloc.)
-
- Add TCSystemAlloc.cpp to JavaScriptCore.pri if USE_SYSTEM_MALLOC is disabled.
-
- * JavaScriptCore.pri:
- * wtf/FastMalloc.cpp:
- (WTF::sleep):
- * wtf/FastMalloc.h:
-
-2009-09-30 Gabor Loki <loki@inf.u-szeged.hu>
-
- Reviewed by George Staikos.
-
- Defines two pseudo-platforms for ARM and Thumb-2 instruction set.
- https://bugs.webkit.org/show_bug.cgi?id=29122
-
- Introduces WTF_PLATFORM_ARM_TRADITIONAL and WTF_PLATFORM_ARM_THUMB2
- macros on ARM platforms. The PLATFORM(ARM_THUMB2) should be used
- when Thumb-2 instruction set is the required target. The
- PLATFORM(ARM_TRADITIONAL) is for generic ARM instruction set. In
- case where the code is common the PLATFORM(ARM) have to be used.
-
- Modified by George Wright <gwright@rim.com> to correctly work
- with the RVCT-defined __TARGET_ARCH_ARM and __TARGET_ARCH_THUMB
- compiler macros, as well as adding readability changes.
-
- * wtf/Platform.h:
-
-2009-09-30 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Geoff Garen.
-
- Devirtualise array toString conversion
-
- Tweak the implementation of Array.prototype.toString to have a fast path
- when acting on a true JSArray.
-
- * runtime/ArrayPrototype.cpp:
- (JSC::arrayProtoFuncToString):
-
-2009-09-30 Csaba Osztrogonac <oszi@inf.u-szeged.hu>
-
- Reviewed by Geoffrey Garen.
-
- Buildfix for platforms using JSVALUE32.
- https://bugs.webkit.org/show_bug.cgi?id=29915
-
- After http://trac.webkit.org/changeset/48905 the build broke in JSVALUE32 case.
- Also removed unreachable code.
-
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_add):
- - Declaration of "OperandTypes types" moved before first use.
- - Typos fixed: dst modified to result, regT2 added.
- - Unreachable code removed.
- (JSC::JIT::emitSlow_op_add):
- - Missing declaration of "OperandTypes types" added.
-
-2009-09-30 Janne Koskinen <janne.p.koskinen@digia.com>
-
- Reviewed by Simon Hausmann.
-
- Reduce heap size on Symbian from 64MB to 8MB.
-
- This is not a perfect fix, it requires more fine tuning.
- But this makes it possible again to debug in the emulator,
- which is more important in order to be able to fix other
- run-time issues.
-
- * runtime/Collector.h:
-
-2009-09-30 Janne Koskinen <janne.p.koskinen@digia.com>
-
- Reviewed by Simon Hausmann.
-
- Fix CRASH() macro for Symbian build.
-
- * wtf/Assertions.h: Added missing }
-
-2009-09-29 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- Inlined a few math operations.
-
- ~1% SunSpider speedup.
-
- * jit/JIT.h:
- * jit/JITArithmetic.cpp:
- (JSC::JIT::compileBinaryArithOpSlowCase):
- (JSC::JIT::emitSlow_op_add):
- (JSC::JIT::emitSlow_op_mul):
- (JSC::JIT::emit_op_sub):
- (JSC::JIT::emitSlow_op_sub): Don't take a stub call when operating on
- a constant int and a double.
-
-2009-09-28 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- Tidy up codeblock sampler
- https://bugs.webkit.org/show_bug.cgi?id=29836
-
- Some rather simple refactoring of codeblock sampler so that
- it's easier for us to use it to find problems in non-jsc
- environments
-
- * JavaScriptCore.exp:
- * bytecode/SamplingTool.h:
- * debugger/Debugger.cpp:
- (JSC::evaluateInGlobalCallFrame):
- * debugger/DebuggerCallFrame.cpp:
- (JSC::DebuggerCallFrame::evaluate):
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::Interpreter):
- (JSC::Interpreter::execute):
- (JSC::Interpreter::privateExecute):
- (JSC::Interpreter::enableSampler):
- (JSC::Interpreter::dumpSampleData):
- (JSC::Interpreter::startSampling):
- (JSC::Interpreter::stopSampling):
- * interpreter/Interpreter.h:
- (JSC::Interpreter::sampler):
- * jit/JIT.h:
- * jsc.cpp:
- (runWithScripts):
- * runtime/Completion.cpp:
- (JSC::checkSyntax):
- (JSC::evaluate):
- * runtime/Executable.h:
- (JSC::EvalExecutable::EvalExecutable):
- (JSC::ProgramExecutable::create):
- (JSC::ProgramExecutable::ProgramExecutable):
- * runtime/JSGlobalData.cpp:
- (JSC::JSGlobalData::startSampling):
- (JSC::JSGlobalData::stopSampling):
- (JSC::JSGlobalData::dumpSampleData):
- * runtime/JSGlobalData.h:
- * runtime/JSGlobalObjectFunctions.cpp:
- (JSC::globalFuncEval):
-
-2009-09-29 Jeremy Orlow <jorlow@chromium.org>
-
- Reviewed by Dimitri Glazkov.
-
- Add GYP generated files to svn:ignore
- https://bugs.webkit.org/show_bug.cgi?id=29895
-
- The following files are generated by JavaScriptCore's GYP file and should be ignored:
-
- pcre.mk
- wtf.scons
- wtf.mk
- SConstruct
- wtf_config.scons
- wtf_config.mk
- pcre.scons
-
- * JavaScriptCore.gyp: Changed property svn:ignore.
-
-2009-09-29 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Standardized an optimization for adding non-numbers.
-
- SunSpider says maybe a tiny speedup.
-
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_add):
- (JSC::JIT::emitSlow_op_add):
-
-2009-09-29 Geoffrey Garen <ggaren@apple.com>
-
- Windows build fix: export a new symbol.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
-
-2009-09-28 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Removed virtual destructor from JSGlobalObjectData to eliminate pointer
- fix-ups when accessing JSGlobalObject::d.
-
- Replaced with an explicit destructor function pointer.
-
- 6% speedup on bench-alloc-nonretained.js.
-
- * JavaScriptCore.exp:
- * runtime/JSGlobalObject.cpp:
- (JSC::JSGlobalObject::~JSGlobalObject):
- (JSC::JSGlobalObject::destroyJSGlobalObjectData):
- * runtime/JSGlobalObject.h:
- (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
- (JSC::JSGlobalObject::JSGlobalObject):
-
-2009-09-29 Janne Koskinen <janne.p.koskinen@digia.com>
-
- Reviewed by David Kilzer.
-
- [Qt] Assert messages prints visible in Symbian
- https://bugs.webkit.org/show_bug.cgi?id=29808
-
- Asserts use vprintf to print the messages to stderr.
- In Symbian Open C it is not possible to see stderr so
- I routed the messages to stdout instead.
-
- * wtf/Assertions.cpp:
-
-2009-09-29 Janne Koskinen <janne.p.koskinen@digia.com>
-
- Reviewed by Darin Adler.
-
- [Qt] Symbian CRASH macro implementation
-
- Added Symbian specific crash macro that
- stops to crash line if JIT debugging is used.
- Additional differentiation of access violation
- (KERN-EXEC 3) and CRASH panic.
-
- * wtf/Assertions.h:
-
-2009-09-28 Mark Rowe <mrowe@apple.com>
-
- Fix the PowerPC build.
-
- * JavaScriptCore.exp:
-
-2009-09-28 Mark Rowe <mrowe@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- <rdar://problem/7195704> JavaScriptCore fails to mark registers when built for x86_64 using LLVM GCC.
-
- * runtime/Collector.cpp:
- (JSC::Heap::markCurrentThreadConservatively): Force jmp_buf to use the appropriate alignment for a pointer
- to ensure that we correctly interpret the contents of registers during marking.
-
-2009-09-28 Geoffrey Garen <ggaren@apple.com>
-
- Windows build fix: added new exports.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
-
-2009-09-28 Geoffrey Garen <ggaren@apple.com>
-
- Windows build fix: removed exports that no longer exist.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
-
-2009-09-28 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Darin Adler.
-
- NotNullPassRefPtr: smart pointer optimized for passing references that are not null
- https://bugs.webkit.org/show_bug.cgi?id=29822
-
- Added NotNullPassRefPtr, and deployed it in all places that initialize
- JavaScript objects.
-
- 2.2% speedup on bench-allocate-nonretained.js.
-
- * API/JSCallbackConstructor.cpp:
- (JSC::JSCallbackConstructor::JSCallbackConstructor):
- * API/JSCallbackConstructor.h:
- * API/JSCallbackObject.h:
- * API/JSCallbackObjectFunctions.h:
- (JSC::JSCallbackObject::JSCallbackObject):
- * JavaScriptCore.exp:
- * bytecode/CodeBlock.h:
- (JSC::CodeBlock::addFunctionDecl):
- (JSC::CodeBlock::addFunctionExpr):
- * runtime/ArrayConstructor.cpp:
- (JSC::ArrayConstructor::ArrayConstructor):
- * runtime/ArrayConstructor.h:
- * runtime/ArrayPrototype.cpp:
- (JSC::ArrayPrototype::ArrayPrototype):
- * runtime/ArrayPrototype.h:
- * runtime/BooleanConstructor.cpp:
- (JSC::BooleanConstructor::BooleanConstructor):
- * runtime/BooleanConstructor.h:
- * runtime/BooleanObject.cpp:
- (JSC::BooleanObject::BooleanObject):
- * runtime/BooleanObject.h:
- * runtime/BooleanPrototype.cpp:
- (JSC::BooleanPrototype::BooleanPrototype):
- * runtime/BooleanPrototype.h:
- * runtime/DateConstructor.cpp:
- (JSC::DateConstructor::DateConstructor):
- * runtime/DateConstructor.h:
- * runtime/DateInstance.cpp:
- (JSC::DateInstance::DateInstance):
- * runtime/DateInstance.h:
- * runtime/DatePrototype.cpp:
- (JSC::DatePrototype::DatePrototype):
- * runtime/DatePrototype.h:
+ (JSC::dateProtoFuncGetYear):
+ (JSC::dateProtoFuncToJSON):
* runtime/ErrorConstructor.cpp:
- (JSC::ErrorConstructor::ErrorConstructor):
- * runtime/ErrorConstructor.h:
- * runtime/ErrorInstance.cpp:
- (JSC::ErrorInstance::ErrorInstance):
- * runtime/ErrorInstance.h:
+ (JSC::callErrorConstructor):
* runtime/ErrorPrototype.cpp:
- (JSC::ErrorPrototype::ErrorPrototype):
- * runtime/ErrorPrototype.h:
+ (JSC::errorProtoFuncToString):
* runtime/FunctionConstructor.cpp:
- (JSC::FunctionConstructor::FunctionConstructor):
- * runtime/FunctionConstructor.h:
+ (JSC::callFunctionConstructor):
* runtime/FunctionPrototype.cpp:
- (JSC::FunctionPrototype::FunctionPrototype):
- * runtime/FunctionPrototype.h:
- * runtime/GlobalEvalFunction.cpp:
- (JSC::GlobalEvalFunction::GlobalEvalFunction):
- * runtime/GlobalEvalFunction.h:
- * runtime/InternalFunction.cpp:
- (JSC::InternalFunction::InternalFunction):
- * runtime/InternalFunction.h:
- (JSC::InternalFunction::InternalFunction):
- * runtime/JSActivation.cpp:
- (JSC::JSActivation::JSActivation):
- * runtime/JSActivation.h:
- (JSC::JSActivation::JSActivationData::JSActivationData):
- * runtime/JSArray.cpp:
- (JSC::JSArray::JSArray):
- * runtime/JSArray.h:
- * runtime/JSByteArray.cpp:
- (JSC::JSByteArray::JSByteArray):
- * runtime/JSByteArray.h:
- * runtime/JSFunction.cpp:
- (JSC::JSFunction::JSFunction):
- * runtime/JSFunction.h:
- * runtime/JSGlobalObject.h:
- (JSC::JSGlobalObject::JSGlobalObject):
- * runtime/JSONObject.h:
- (JSC::JSONObject::JSONObject):
- * runtime/JSObject.h:
- (JSC::JSObject::JSObject):
- (JSC::JSObject::setStructure):
- * runtime/JSVariableObject.h:
- (JSC::JSVariableObject::JSVariableObject):
- * runtime/JSWrapperObject.h:
- (JSC::JSWrapperObject::JSWrapperObject):
+ (JSC::callFunctionPrototype):
+ (JSC::functionProtoFuncToString):
+ (JSC::functionProtoFuncApply):
+ (JSC::functionProtoFuncCall):
+ * runtime/JSGlobalObjectFunctions.cpp:
+ (JSC::encode):
+ (JSC::decode):
+ (JSC::globalFuncEval):
+ (JSC::globalFuncParseInt):
+ (JSC::globalFuncParseFloat):
+ (JSC::globalFuncIsNaN):
+ (JSC::globalFuncIsFinite):
+ (JSC::globalFuncDecodeURI):
+ (JSC::globalFuncDecodeURIComponent):
+ (JSC::globalFuncEncodeURI):
+ (JSC::globalFuncEncodeURIComponent):
+ (JSC::globalFuncEscape):
+ (JSC::globalFuncUnescape):
+ (JSC::globalFuncJSCPrint):
+ * runtime/JSGlobalObjectFunctions.h:
+ * runtime/JSONObject.cpp:
+ (JSC::JSONProtoFuncParse):
+ (JSC::JSONProtoFuncStringify):
+ * runtime/JSString.h:
* runtime/MathObject.cpp:
- (JSC::MathObject::MathObject):
- * runtime/MathObject.h:
+ (JSC::mathProtoFuncAbs):
+ (JSC::mathProtoFuncACos):
+ (JSC::mathProtoFuncASin):
+ (JSC::mathProtoFuncATan):
+ (JSC::mathProtoFuncATan2):
+ (JSC::mathProtoFuncCeil):
+ (JSC::mathProtoFuncCos):
+ (JSC::mathProtoFuncExp):
+ (JSC::mathProtoFuncFloor):
+ (JSC::mathProtoFuncLog):
+ (JSC::mathProtoFuncMax):
+ (JSC::mathProtoFuncMin):
+ (JSC::mathProtoFuncPow):
+ (JSC::mathProtoFuncRandom):
+ (JSC::mathProtoFuncRound):
+ (JSC::mathProtoFuncSin):
+ (JSC::mathProtoFuncSqrt):
+ (JSC::mathProtoFuncTan):
* runtime/NativeErrorConstructor.cpp:
- (JSC::NativeErrorConstructor::NativeErrorConstructor):
- * runtime/NativeErrorConstructor.h:
- * runtime/NativeErrorPrototype.cpp:
- (JSC::NativeErrorPrototype::NativeErrorPrototype):
- * runtime/NativeErrorPrototype.h:
+ (JSC::callNativeErrorConstructor):
* runtime/NumberConstructor.cpp:
- (JSC::NumberConstructor::NumberConstructor):
- * runtime/NumberConstructor.h:
- * runtime/NumberObject.cpp:
- (JSC::NumberObject::NumberObject):
- * runtime/NumberObject.h:
+ (JSC::callNumberConstructor):
* runtime/NumberPrototype.cpp:
- (JSC::NumberPrototype::NumberPrototype):
- * runtime/NumberPrototype.h:
+ (JSC::numberProtoFuncToString):
+ (JSC::numberProtoFuncToLocaleString):
+ (JSC::numberProtoFuncValueOf):
+ (JSC::numberProtoFuncToFixed):
+ (JSC::numberProtoFuncToExponential):
+ (JSC::numberProtoFuncToPrecision):
* runtime/ObjectConstructor.cpp:
- (JSC::ObjectConstructor::ObjectConstructor):
- * runtime/ObjectConstructor.h:
+ (JSC::callObjectConstructor):
+ (JSC::objectConstructorGetPrototypeOf):
+ (JSC::objectConstructorGetOwnPropertyDescriptor):
+ (JSC::objectConstructorGetOwnPropertyNames):
+ (JSC::objectConstructorKeys):
+ (JSC::objectConstructorDefineProperty):
+ (JSC::objectConstructorDefineProperties):
+ (JSC::objectConstructorCreate):
* runtime/ObjectPrototype.cpp:
- (JSC::ObjectPrototype::ObjectPrototype):
+ (JSC::objectProtoFuncValueOf):
+ (JSC::objectProtoFuncHasOwnProperty):
+ (JSC::objectProtoFuncIsPrototypeOf):
+ (JSC::objectProtoFuncDefineGetter):
+ (JSC::objectProtoFuncDefineSetter):
+ (JSC::objectProtoFuncLookupGetter):
+ (JSC::objectProtoFuncLookupSetter):
+ (JSC::objectProtoFuncPropertyIsEnumerable):
+ (JSC::objectProtoFuncToLocaleString):
+ (JSC::objectProtoFuncToString):
* runtime/ObjectPrototype.h:
- * runtime/PropertyNameArray.h:
- (JSC::PropertyNameArrayData::setCachedPrototypeChain):
- * runtime/PrototypeFunction.cpp:
- (JSC::PrototypeFunction::PrototypeFunction):
- * runtime/PrototypeFunction.h:
+ * runtime/Operations.h:
+ (JSC::jsString):
* runtime/RegExpConstructor.cpp:
- (JSC::RegExpConstructor::RegExpConstructor):
- * runtime/RegExpConstructor.h:
+ (JSC::callRegExpConstructor):
* runtime/RegExpObject.cpp:
- (JSC::RegExpObject::RegExpObject):
+ (JSC::RegExpObject::test):
+ (JSC::RegExpObject::exec):
+ (JSC::callRegExpObject):
+ (JSC::RegExpObject::match):
* runtime/RegExpObject.h:
- (JSC::RegExpObject::RegExpObjectData::RegExpObjectData):
* runtime/RegExpPrototype.cpp:
- (JSC::RegExpPrototype::RegExpPrototype):
- * runtime/RegExpPrototype.h:
+ (JSC::regExpProtoFuncTest):
+ (JSC::regExpProtoFuncExec):
+ (JSC::regExpProtoFuncCompile):
+ (JSC::regExpProtoFuncToString):
* runtime/StringConstructor.cpp:
- (JSC::StringConstructor::StringConstructor):
- * runtime/StringConstructor.h:
- * runtime/StringObject.cpp:
- (JSC::StringObject::StringObject):
- * runtime/StringObject.h:
- * runtime/StringObjectThatMasqueradesAsUndefined.h:
- (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined):
+ (JSC::stringFromCharCodeSlowCase):
+ (JSC::stringFromCharCode):
+ (JSC::callStringConstructor):
* runtime/StringPrototype.cpp:
- (JSC::StringPrototype::StringPrototype):
- * runtime/StringPrototype.h:
- * wtf/PassRefPtr.h:
- (WTF::NotNullPassRefPtr::NotNullPassRefPtr):
- (WTF::NotNullPassRefPtr::~NotNullPassRefPtr):
- (WTF::NotNullPassRefPtr::get):
- (WTF::NotNullPassRefPtr::clear):
- (WTF::NotNullPassRefPtr::releaseRef):
- (WTF::NotNullPassRefPtr::operator*):
- (WTF::NotNullPassRefPtr::operator->):
- (WTF::NotNullPassRefPtr::operator!):
- (WTF::NotNullPassRefPtr::operator UnspecifiedBoolType):
- * wtf/RefPtr.h:
- (WTF::RefPtr::RefPtr):
- (WTF::operator==):
-
-2009-09-28 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Geoff Garen.
-
- Hard dependency on SSE2 instruction set with JIT
- https://bugs.webkit.org/show_bug.cgi?id=29779
-
- Add floating point support checks to op_jfalse and op_jtrue, and
- fix the logic for the slow case of op_add
-
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emitSlow_op_add):
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_jfalse):
- (JSC::JIT::emit_op_jtrue):
-
-2009-09-28 Yaar Schnitman <yaar@chromium.org>
-
- Reviewed by Dimitri Glazkov.
-
- Chromium port - recognize we are being built independently
- of chromium and look for dependencies under webkit/chromium rather
- than chromium/src.
-
- https://bugs.webkit.org/show_bug.cgi?id=29722
-
- * JavaScriptCore.gyp/JavaScriptCore.gyp:
-
-2009-09-28 Jakub Wieczorek <faw217@gmail.com>
-
- Reviewed by Simon Hausmann.
-
- [Qt] Implement XSLT support with QtXmlPatterns.
- https://bugs.webkit.org/show_bug.cgi?id=28303
-
- * wtf/Platform.h: Add a WTF_USE_QXMLQUERY #define.
-
-2009-09-28 Gabor Loki <loki@inf.u-szeged.hu>
-
- Reviewed by Simon Hausmann.
-
- Remove __clear_cache which is an internal function of GCC
- https://bugs.webkit.org/show_bug.cgi?id=28886
-
- Although __clear_cache is exported from GCC, this is an internal
- function. GCC makes no promises about it.
-
- * jit/ExecutableAllocator.h:
- (JSC::ExecutableAllocator::cacheFlush):
-
-2009-09-28 Sam Weinig <sam@webkit.org>
-
- Reviewed by Oliver Hunt.
-
- Fix an absolute path to somewhere in Oliver's machine to a relative path
- for derived JSONObject.lut.h.
-
- * JavaScriptCore.xcodeproj/project.pbxproj:
-
-2009-09-28 Joerg Bornemann <joerg.bornemann@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- Add ARM version detection for Windows CE.
-
- * wtf/Platform.h:
-
-2009-09-26 Yongjun Zhang <yongjun.zhang@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- Add MarkStackSymbian.cpp to build JavascriptCore for Symbian.
-
- Re-use Windows shrinkAllocation implementation because Symbian doesn't
- support releasing part of memory region.
-
- Use fastMalloc and fastFree to implement allocateStack and releaseStack
- for Symbian port.
-
- * JavaScriptCore.pri:
- * runtime/MarkStack.h:
- (JSC::MarkStack::MarkStackArray::shrinkAllocation):
- * runtime/MarkStackSymbian.cpp: Added.
- (JSC::MarkStack::initializePagesize):
- (JSC::MarkStack::allocateStack):
- (JSC::MarkStack::releaseStack):
-
-2009-09-25 Gabor Loki <loki@inf.u-szeged.hu>
-
- Reviewed by Gavin Barraclough.
-
- Fix unaligned data access in YARR_JIT on ARMv5 and below.
- https://bugs.webkit.org/show_bug.cgi?id=29695
-
- On ARMv5 and below all data access should be naturally aligned.
- In the YARR_JIT there is a case when character pairs are
- loaded from the input string, but this data access is not
- naturally aligned. This fix introduces load32WithUnalignedHalfWords
- and branch32WithUnalignedHalfWords functions which contain
- naturally aligned memory loads - half word loads - on ARMv5 and below.
-
- * assembler/MacroAssemblerARM.cpp:
- (JSC::MacroAssemblerARM::load32WithUnalignedHalfWords):
- * assembler/MacroAssemblerARM.h:
- (JSC::MacroAssemblerARM::load32WithUnalignedHalfWords):
- (JSC::MacroAssemblerARM::branch32WithUnalignedHalfWords):
- * assembler/MacroAssemblerARMv7.h:
- (JSC::MacroAssemblerARMv7::load32WithUnalignedHalfWords):
- (JSC::MacroAssemblerARMv7::branch32):
- (JSC::MacroAssemblerARMv7::branch32WithUnalignedHalfWords):
- * assembler/MacroAssemblerX86Common.h:
- (JSC::MacroAssemblerX86Common::load32WithUnalignedHalfWords):
- (JSC::MacroAssemblerX86Common::branch32WithUnalignedHalfWords):
- * wtf/Platform.h:
- * yarr/RegexJIT.cpp:
- (JSC::Yarr::RegexGenerator::generatePatternCharacterPair):
-
-2009-09-25 Jeremy Orlow <jorlow@chromium.org>
-
- This is breaking Chromium try bots, so I'm counting this as a build fix.
-
- Add more svn:ignore exceptions. On different platforms, these files are
- generated with different case for JavaScriptCore. Also there are some
- wtf project files that get built apparently.
-
- * JavaScriptCore.gyp: Changed property svn:ignore.
-
-2009-09-25 Ada Chan <adachan@apple.com>
-
- Build fix.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
-
-2009-09-25 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Darin Adler.
-
- Inlined some object creation code, including lexicalGlobalObject access
- https://bugs.webkit.org/show_bug.cgi?id=29750
-
- SunSpider says 0.5% faster.
-
- 0.8% speedup on bench-alloc-nonretained.js.
- 2.5% speedup on v8-splay.js.
-
- * interpreter/CachedCall.h:
- (JSC::CachedCall::CachedCall):
- * interpreter/CallFrame.h:
- (JSC::ExecState::lexicalGlobalObject):
- (JSC::ExecState::globalThisValue):
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::dumpRegisters):
- (JSC::Interpreter::execute):
- (JSC::Interpreter::privateExecute):
- * jit/JITStubs.cpp:
- (JSC::DEFINE_STUB_FUNCTION):
- * runtime/FunctionConstructor.cpp:
- (JSC::constructFunction):
- * runtime/ScopeChain.cpp:
- (JSC::ScopeChainNode::print):
- * runtime/ScopeChain.h:
- (JSC::ScopeChainNode::ScopeChainNode):
- (JSC::ScopeChainNode::~ScopeChainNode):
- (JSC::ScopeChainNode::push):
- (JSC::ScopeChain::ScopeChain):
- (JSC::ScopeChain::globalObject): Added a globalObject data member to ScopeChainNode.
- Replaced accessor function for globalObject() with data member. Replaced
- globalThisObject() accessor with direct access to globalThis, to match.
-
- * runtime/JSGlobalObject.cpp:
- (JSC::JSGlobalObject::init):
- * runtime/JSGlobalObject.h: Inlined array and object construction.
-
-2009-09-25 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Gavin Barraclough.
-
- Add ARM version detection rules for Symbian
- https://bugs.webkit.org/show_bug.cgi?id=29715
-
- * wtf/Platform.h:
-
-2009-09-24 Xan Lopez <xlopez@igalia.com>
-
- Reviewed by Mark "Do It!" Rowe.
-
- Some GCC versions don't like C++-style comments in preprocessor
- directives, change to C-style to shut them up.
-
- * wtf/Platform.h:
-
-2009-09-24 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- Division is needlessly slow in 64-bit
- https://bugs.webkit.org/show_bug.cgi?id=29723
-
- Add codegen for op_div on x86-64
-
- * jit/JIT.cpp:
- (JSC::JIT::privateCompileMainPass):
- (JSC::JIT::privateCompileSlowCases):
- * jit/JIT.h:
- * jit/JITArithmetic.cpp:
- (JSC::JIT::compileBinaryArithOpSlowCase):
- (JSC::JIT::emit_op_div):
- (JSC::JIT::emitSlow_op_div):
- * jit/JITInlineMethods.h:
- (JSC::JIT::isOperandConstantImmediateDouble):
- (JSC::JIT::addressFor):
- (JSC::JIT::emitLoadDouble):
- (JSC::JIT::emitLoadInt32ToDouble):
- (JSC::JIT::emitJumpSlowCaseIfNotImmediateNumber):
-
-2009-09-24 Jeremy Orlow <jorlow@chromium.org>
-
- Reviewed by Dimitri Glazkov.
-
- Add GYP generated files to svn:ignore
- https://bugs.webkit.org/show_bug.cgi?id=29724
-
- Adding the following files to the svn:ignore list (all in the
- JavaScriptCore/JavaScriptCore.gyp directory)
-
- JavaScriptCore.xcodeproj
- JavaScriptCore.sln
- JavaScriptCore.vcproj
- JavaScriptCore_Debug.rules
- JavaScriptCore_Release.rules
- JavaScriptCore_Release - no tcmalloc.rules
- JavaScriptCore_Purify.rules
- JavaScriptCore.mk
- JavaScriptCore_Debug_rules.mk
- JavaScriptCore_Release_rules.mk
- JavaScriptCore_Release - no tcmalloc_rules.mk
- JavaScriptCore_Purify_rules.mk
- JavaScriptCore.scons
- JavaScriptCore_main.scons
-
- * JavaScriptCore.gyp: Changed property svn:ignore.
-
-2009-09-24 Yong Li <yong.li@torchmobile.com>
-
- Reviewed by Adam Barth.
-
- Replace platform-dependent code with WTF::currentTime()
- https://bugs.webkit.org/show_bug.cgi?id=29148
-
- * jsc.cpp:
- (StopWatch::start):
- (StopWatch::stop):
- (StopWatch::getElapsedMS):
- * runtime/TimeoutChecker.cpp:
- (JSC::getCPUTime):
-
-2009-09-24 Mark Rowe <mrowe@apple.com>
-
- Reviewed by Sam Weinig.
-
- <rdar://problem/7215058> FastMalloc scavenging thread should be named
-
- * wtf/FastMalloc.cpp:
- (WTF::TCMalloc_PageHeap::scavengerThread): Set the thread name.
- * wtf/Platform.h: Move the knowledge of whether pthread_setname_np exists to here as HAVE(PTHREAD_SETNAME_NP).
- * wtf/ThreadingPthreads.cpp:
- (WTF::setThreadNameInternal): Use HAVE(PTHREAD_SETNAME_NP).
-
-2009-09-24 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Renamed clear to removeAll, as suggested by Darin Adler.
-
- * wtf/HashCountedSet.h:
- (WTF::::removeAll):
-
-2009-09-24 Mark Rowe <mrowe@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- Fix FastMalloc to build with assertions enabled.
-
- * wtf/FastMalloc.cpp:
- (WTF::TCMalloc_Central_FreeList::ReleaseToSpans):
- * wtf/TCSpinLock.h:
- (TCMalloc_SpinLock::IsHeld):
-
-2009-09-24 Geoffrey Garen <ggaren@apple.com>
-
- Suggested by Darin Adler.
-
- Removed some unnecessary parameter names.
-
- * wtf/HashCountedSet.h:
-
-2009-09-24 Janne Koskinen <janne.p.koskinen@digia.com>
-
- Reviewed by Simon Hausmann.
-
- On Windows JSChar is typedef'ed to wchar_t.
-
- When building with WINSCW for Symbian we need to do the
- same typedef.
-
- * API/JSStringRef.h:
-
-2009-09-23 Geoffrey Garen <ggaren@apple.com>
-
- A piece of my last patch that I forgot.
-
- * wtf/HashCountedSet.h:
- (WTF::::clear): Added HashCountedSet::clear.
-
-2009-09-24 Gabor Loki <loki@inf.u-szeged.hu>
-
- Reviewed by Gavin Barraclough.
-
- Avoid __clear_cache built-in function if DISABLE_BUILTIN_CLEAR_CACHE define is set
- https://bugs.webkit.org/show_bug.cgi?id=28886
-
- There are some GCC packages (for example GCC-2006q3 from CodeSourcery)
- which contain __clear_cache built-in function only for C while the C++
- version of __clear_cache is missing on ARM architectures.
-
- Fixed a small bug in the inline assembly of cacheFlush function on
- ARM_TRADITIONAL.
-
- * jit/ExecutableAllocator.h:
- (JSC::ExecutableAllocator::cacheFlush):
-
-2009-09-23 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Added the ability to swap vectors with inline capacities, so you can
- store a vector with inline capacity in a hash table.
-
- * wtf/Vector.h:
- (WTF::swap):
- (WTF::VectorBuffer::swap):
-
-2009-09-23 David Kilzer <ddkilzer@apple.com>
-
- Move definition of USE(PLUGIN_HOST_PROCESS) from WebKitPrefix.h to Platform.h
-
- Reviewed by Mark Rowe.
-
- * wtf/Platform.h: Define WTF_USE_PLUGIN_HOST_PROCESS to 1 when
- building on 64-bit SnowLeopard. Define to 0 elsewhere.
-
-2009-09-22 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Geoff Garen.
-
- Code sampling builds are broken.
- https://bugs.webkit.org/show_bug.cgi?id=29662
-
- Fix build.
-
- * bytecode/EvalCodeCache.h:
- (JSC::EvalCodeCache::get):
- * bytecode/SamplingTool.cpp:
- (JSC::ScriptSampleRecord::sample):
- (JSC::SamplingTool::doRun):
- (JSC::SamplingTool::notifyOfScope):
- (JSC::compareScriptSampleRecords):
- (JSC::SamplingTool::dump):
- * bytecode/SamplingTool.h:
- (JSC::ScriptSampleRecord::ScriptSampleRecord):
- (JSC::ScriptSampleRecord::~ScriptSampleRecord):
- (JSC::SamplingTool::SamplingTool):
- * bytecompiler/BytecodeGenerator.cpp:
- (JSC::BytecodeGenerator::BytecodeGenerator):
- (JSC::BytecodeGenerator::emitNewFunction):
- (JSC::BytecodeGenerator::emitNewFunctionExpression):
- * bytecompiler/BytecodeGenerator.h:
- (JSC::BytecodeGenerator::makeFunction):
- * debugger/Debugger.cpp:
- (JSC::evaluateInGlobalCallFrame):
- * debugger/DebuggerCallFrame.cpp:
- (JSC::DebuggerCallFrame::evaluate):
- * parser/Nodes.cpp:
- (JSC::ScopeNode::ScopeNode):
- * runtime/Completion.cpp:
- (JSC::checkSyntax):
- (JSC::evaluate):
- * runtime/Executable.cpp:
- (JSC::FunctionExecutable::fromGlobalCode):
- * runtime/Executable.h:
- (JSC::ScriptExecutable::ScriptExecutable):
- (JSC::EvalExecutable::EvalExecutable):
- (JSC::EvalExecutable::create):
- (JSC::ProgramExecutable::ProgramExecutable):
- (JSC::FunctionExecutable::create):
- (JSC::FunctionExecutable::FunctionExecutable):
- * runtime/JSGlobalObjectFunctions.cpp:
- (JSC::globalFuncEval):
-
-2009-09-22 Darin Adler <darin@apple.com>
-
- Reviewed by Sam Weinig.
-
- * wtf/Forward.h: Added PassOwnPtr.
-
-2009-09-22 Yaar Schnitman <yaar@chromium.org>
-
- Reviewed by David Levin.
-
- Ported chromium.org's javascriptcore.gyp for the webkit chromium port.
-
- https://bugs.webkit.org/show_bug.cgi?id=29617
-
- * JavaScriptCore.gyp/JavaScriptCore.gyp: Added.
-
-2009-09-22 Thiago Macieira <thiago.macieira@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- Fix compilation with WINSCW: no varargs macros
-
- Disable variadic arguments for WINSCW just like we do
- for MSVC7.
-
- * wtf/Assertions.h:
-
-2009-09-22 Kent Hansen <khansen@trolltech.com>
-
- Reviewed by Simon Hausmann.
-
- Disable variadic macros on MSVC7.
-
- This was originally added in r26589 but not extended
- when LOG_DISABLED/ASSERT_DISABLED was introduced.
-
- * wtf/Assertions.h:
-
-2009-09-22 Simon Hausmann <simon.hausmann@nokia.com>
-
- Unreviewed build fix for Windows CE < 5
-
- Define WINCEBASIC to disable the IsDebuggerPresent() code in
- wtf/Assertions.cpp.
-
- * JavaScriptCore.pri:
-
-2009-09-22 Joerg Bornemann <joerg.bornemann@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- Fix major memory leak in JavaScriptCore RegisterFile on Windows CE
-
- https://bugs.webkit.org/show_bug.cgi?id=29367
-
- On Widows CE we must decommit all committed pages before we release
- them. See VirtualFree documentation.
- Desktop Windows behaves much smoother in this situation.
-
- * interpreter/RegisterFile.cpp:
- (JSC::RegisterFile::~RegisterFile):
-
-2009-09-21 Greg Bolsinga <bolsinga@apple.com>
-
- Reviewed by Simon Fraser & Sam Weinig.
-
- Add ENABLE(ORIENTATION_EVENTS)
- https://bugs.webkit.org/show_bug.cgi?id=29508
-
- * wtf/Platform.h: Also sort PLATFORM(IPHONE) #defines.
-
-2009-09-21 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
-
- Reviewed by Eric Seidel.
-
- [Fix] SourceCode's uninitialized member
-
- Potential source of crashes and bugs was fixed. Default constructor
- didn't initialized m_provider member.
-
- https://bugs.webkit.org/show_bug.cgi?id=29364
-
- * parser/SourceCode.h:
- (JSC::SourceCode::SourceCode):
-
-2009-09-21 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Geoff Garen.
-
- REGRESSION (r48582): Crash in StructureStubInfo::initPutByIdTransition when reloading trac.webkit.org
- https://bugs.webkit.org/show_bug.cgi?id=29599
-
- It is unsafe to attempt to cache new property transitions on
- dictionaries of any type.
-
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::tryCachePutByID):
- * jit/JITStubs.cpp:
- (JSC::JITThunks::tryCachePutByID):
-
-2009-09-21 Oliver Hunt <oliver@apple.com>
-
- RS=Maciej Stachowiak.
-
- Re-land SNES fix with corrected assertion.
-
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::resolveGlobal):
- (JSC::Interpreter::tryCachePutByID):
- (JSC::Interpreter::tryCacheGetByID):
- * jit/JITStubs.cpp:
- (JSC::JITThunks::tryCachePutByID):
- (JSC::JITThunks::tryCacheGetByID):
- (JSC::DEFINE_STUB_FUNCTION):
- * runtime/BatchedTransitionOptimizer.h:
- (JSC::BatchedTransitionOptimizer::BatchedTransitionOptimizer):
- * runtime/JSObject.cpp:
- (JSC::JSObject::removeDirect):
- * runtime/Structure.cpp:
- (JSC::Structure::Structure):
- (JSC::Structure::getEnumerablePropertyNames):
- (JSC::Structure::despecifyDictionaryFunction):
- (JSC::Structure::addPropertyTransitionToExistingStructure):
- (JSC::Structure::addPropertyTransition):
- (JSC::Structure::removePropertyTransition):
- (JSC::Structure::toDictionaryTransition):
- (JSC::Structure::toCacheableDictionaryTransition):
- (JSC::Structure::toUncacheableDictionaryTransition):
- (JSC::Structure::fromDictionaryTransition):
- (JSC::Structure::removePropertyWithoutTransition):
- * runtime/Structure.h:
- (JSC::Structure::isDictionary):
- (JSC::Structure::isUncacheableDictionary):
- (JSC::Structure::):
- * runtime/StructureChain.cpp:
- (JSC::StructureChain::isCacheable):
-
-2009-09-21 Adam Roben <aroben@apple.com>
-
- Revert r48573, as it caused many assertion failures
-
- * interpreter/Interpreter.cpp:
- * jit/JITStubs.cpp:
- * runtime/BatchedTransitionOptimizer.h:
- * runtime/JSObject.cpp:
- * runtime/Structure.cpp:
- * runtime/Structure.h:
- * runtime/StructureChain.cpp:
-
-2009-09-21 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk>
-
- Unreviewed make dist build fix. Missing files.
-
- * GNUmakefile.am:
-
-2009-09-19 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Sam 'Cabin Boy' Weinig.
-
- Fix stack alignment with ARM THUMB2 JIT.
- https://bugs.webkit.org/show_bug.cgi?id=29526
-
- Stack is currently being decremented by 0x3c, bump this to 0x40 to make this a
- multiple of 16 bytes.
-
- * jit/JITStubs.cpp:
- (JSC::JITThunks::JITThunks):
- * jit/JITStubs.h:
-
-2009-09-20 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Maciej Stachowiak.
-
- SNES is too slow
- https://bugs.webkit.org/show_bug.cgi?id=29534
-
- The problem was that the emulator used multiple classes with
- more properties than our dictionary cutoff allowed, this resulted
- in more or less all critical logic inside the emulator requiring
- uncached property access.
-
- Rather than simply bumping the dictionary cutoff, this patch
- recognises that there are two ways to create a "dictionary"
- structure. Either by adding a large number of properties, or
- by removing a property. In the case of adding properties we
- know all the existing properties will maintain their existing
- offsets, so we could cache access to those properties, if we
- know they won't be removed.
-
- To make this possible, this patch adds the logic required to
- distinguish a dictionary created by addition from one created
- by removal. With this logic in place we can now cache access
- to objects with large numbers of properties.
-
- SNES performance improved by more than 6x.
-
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::resolveGlobal):
- (JSC::Interpreter::tryCachePutByID):
- (JSC::Interpreter::tryCacheGetByID):
- * jit/JITStubs.cpp:
- (JSC::JITThunks::tryCachePutByID):
- (JSC::JITThunks::tryCacheGetByID):
- (JSC::DEFINE_STUB_FUNCTION):
- * runtime/BatchedTransitionOptimizer.h:
- (JSC::BatchedTransitionOptimizer::BatchedTransitionOptimizer):
- * runtime/JSObject.cpp:
- (JSC::JSObject::removeDirect):
- * runtime/Structure.cpp:
- (JSC::Structure::Structure):
- (JSC::Structure::getEnumerablePropertyNames):
- (JSC::Structure::despecifyDictionaryFunction):
- (JSC::Structure::addPropertyTransitionToExistingStructure):
- (JSC::Structure::addPropertyTransition):
- (JSC::Structure::removePropertyTransition):
- (JSC::Structure::toDictionaryTransition):
- (JSC::Structure::toCacheableDictionaryTransition):
- (JSC::Structure::toUncacheableDictionaryTransition):
- (JSC::Structure::fromDictionaryTransition):
- (JSC::Structure::removePropertyWithoutTransition):
- * runtime/Structure.h:
- (JSC::Structure::isDictionary):
- (JSC::Structure::isUncacheableDictionary):
- (JSC::Structure::):
- * runtime/StructureChain.cpp:
- (JSC::StructureChain::isCacheable):
-
-2009-09-19 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Maciej Stachowiak.
-
- Implement ES5 Object.create function
- https://bugs.webkit.org/show_bug.cgi?id=29524
-
- Implement Object.create. Very simple patch, effectively Object.defineProperties
- only creating the target object itself.
-
- * runtime/CommonIdentifiers.h:
- * runtime/ObjectConstructor.cpp:
- (JSC::ObjectConstructor::ObjectConstructor):
- (JSC::objectConstructorCreate):
-
-2009-09-19 Dan Bernstein <mitz@apple.com>
-
- Fix clean debug builds.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
-
-2009-09-19 Joerg Bornemann <joerg.bornemann@nokia.com>
-
- Reviewed by George Staikos.
-
- QtWebKit Windows CE compile fix
-
- https://bugs.webkit.org/show_bug.cgi?id=29379
-
- There is no _aligned_alloc or _aligned_free on Windows CE.
- We just use the Windows code that was there before and use VirtualAlloc.
- But that also means that the BLOCK_SIZE must be 64K as this function
- allocates on 64K boundaries.
-
- * runtime/Collector.cpp:
- (JSC::Heap::allocateBlock):
- (JSC::Heap::freeBlock):
- * runtime/Collector.h:
-
-2009-09-19 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Sam Weinig.
-
- Implement ES5 Object.defineProperties function
- https://bugs.webkit.org/show_bug.cgi?id=29522
-
- Implement Object.defineProperties. Fairly simple patch, simply makes use of
- existing functionality used for defineProperty.
-
- * runtime/CommonIdentifiers.h:
- * runtime/ObjectConstructor.cpp:
- (JSC::ObjectConstructor::ObjectConstructor):
- (JSC::defineProperties):
- (JSC::objectConstructorDefineProperties):
-
-2009-09-19 Oliver Hunt <oliver@apple.com>
-
- Reviewed by NOBODY (Build fix).
-
- Windows build fix part2
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
-
-2009-09-19 Oliver Hunt <oliver@apple.com>
-
- Reviewed by NOBODY (Buildfix).
-
- Windows build fix part 1.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
-
-2009-09-18 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Geoff Garen.
-
- Implement ES5 Object.defineProperty function
- https://bugs.webkit.org/show_bug.cgi?id=29503
-
- Implement Object.defineProperty. This requires adding the API to
- ObjectConstructor, along with a helper function that implements the
- ES5 internal [[ToPropertyDescriptor]] function. It then adds
- JSObject::defineOwnProperty that implements the appropriate ES5 semantics.
- Currently defineOwnProperty uses a delete followed by a put to redefine
- attributes of a property, clearly this is less efficient than it could be
- but we can improve this if it needs to be possible in future.
-
- * JavaScriptCore.exp:
- * debugger/DebuggerActivation.cpp:
- (JSC::DebuggerActivation::defineGetter):
- (JSC::DebuggerActivation::defineSetter):
- * debugger/DebuggerActivation.h:
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::privateExecute):
- * jit/JITStubs.cpp:
- Update defineGetter/Setter calls
- * runtime/CommonIdentifiers.h:
- * runtime/JSArray.cpp:
- (JSC::JSArray::getOwnPropertySlot):
- * runtime/JSGlobalObject.cpp:
- (JSC::JSGlobalObject::defineGetter):
- (JSC::JSGlobalObject::defineSetter):
- * runtime/JSGlobalObject.h:
- * runtime/JSObject.cpp:
- (JSC::JSObject::defineGetter):
- (JSC::JSObject::defineSetter):
- (JSC::putDescriptor):
- (JSC::JSObject::defineOwnProperty):
- * runtime/JSObject.h:
- * runtime/ObjectConstructor.cpp:
- (JSC::ObjectConstructor::ObjectConstructor):
- (JSC::objectConstructorGetOwnPropertyDescriptor):
- (JSC::toPropertyDescriptor):
- (JSC::objectConstructorDefineProperty):
- * runtime/ObjectPrototype.cpp:
- (JSC::objectProtoFuncDefineGetter):
- (JSC::objectProtoFuncDefineSetter):
- * runtime/PropertyDescriptor.cpp:
- (JSC::PropertyDescriptor::writable):
- (JSC::PropertyDescriptor::enumerable):
- (JSC::PropertyDescriptor::configurable):
- (JSC::PropertyDescriptor::isDataDescriptor):
- (JSC::PropertyDescriptor::isGenericDescriptor):
- (JSC::PropertyDescriptor::isAccessorDescriptor):
- (JSC::PropertyDescriptor::getter):
- (JSC::PropertyDescriptor::setter):
- (JSC::PropertyDescriptor::setDescriptor):
- (JSC::PropertyDescriptor::setAccessorDescriptor):
- (JSC::PropertyDescriptor::setWritable):
- (JSC::PropertyDescriptor::setEnumerable):
- (JSC::PropertyDescriptor::setConfigurable):
- (JSC::PropertyDescriptor::setSetter):
- (JSC::PropertyDescriptor::setGetter):
- (JSC::PropertyDescriptor::equalTo):
- (JSC::PropertyDescriptor::attributesEqual):
- (JSC::PropertyDescriptor::attributesWithOverride):
- * runtime/PropertyDescriptor.h:
- (JSC::PropertyDescriptor::PropertyDescriptor):
- (JSC::PropertyDescriptor::value):
- (JSC::PropertyDescriptor::setValue):
- (JSC::PropertyDescriptor::isEmpty):
- (JSC::PropertyDescriptor::writablePresent):
- (JSC::PropertyDescriptor::enumerablePresent):
- (JSC::PropertyDescriptor::configurablePresent):
- (JSC::PropertyDescriptor::setterPresent):
- (JSC::PropertyDescriptor::getterPresent):
- (JSC::PropertyDescriptor::operator==):
- (JSC::PropertyDescriptor::):
-
-2009-09-18 Gabor Loki <loki@inf.u-szeged.hu>
-
- Reviewed by Gavin Barraclough.
-
- Build fix to enable ARM_THUMB2 on Linux
- https://bugs.webkit.org/show_bug.cgi?id=
-
- * jit/ExecutableAllocator.h:
- (JSC::ExecutableAllocator::cacheFlush):
- * jit/JITStubs.cpp:
- * wtf/Platform.h:
-
-2009-09-18 Gabor Loki <loki@inf.u-szeged.hu>
-
- Reviewed by Gavin Barraclough.
-
- Defines two pseudo-platforms for ARM and Thumb-2 instruction set.
- https://bugs.webkit.org/show_bug.cgi?id=29122
-
- Introduces WTF_PLATFORM_ARM_TRADITIONAL and WTF_PLATFORM_ARM_THUMB2
- macros on ARM platforms. The PLATFORM(ARM_THUMB2) should be used
- when Thumb-2 instruction set is the required target. The
- PLATFORM(ARM_TRADITIONAL) is for generic ARM instruction set. In
- case where the code is common the PLATFORM(ARM) have to be used.
-
- * assembler/ARMAssembler.cpp:
- * assembler/ARMAssembler.h:
- * assembler/ARMv7Assembler.h:
- * assembler/MacroAssembler.h:
- * assembler/MacroAssemblerARM.cpp:
- * assembler/MacroAssemblerARM.h:
- * assembler/MacroAssemblerCodeRef.h:
- (JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr):
- * jit/ExecutableAllocator.h:
- * jit/JIT.h:
- * jit/JITInlineMethods.h:
- (JSC::JIT::beginUninterruptedSequence):
- (JSC::JIT::preserveReturnAddressAfterCall):
- (JSC::JIT::restoreReturnAddressBeforeReturn):
- (JSC::JIT::restoreArgumentReference):
- (JSC::JIT::restoreArgumentReferenceForTrampoline):
- * jit/JITOpcodes.cpp:
- * jit/JITStubs.cpp:
- (JSC::JITThunks::JITThunks):
- * jit/JITStubs.h:
- * wtf/Platform.h:
- * yarr/RegexJIT.cpp:
- (JSC::Yarr::RegexGenerator::generateEnter):
-
-2009-09-18 Joerg Bornemann <joerg.bornemann@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- Fix the Qt/Windows CE build.
-
- * JavaScriptCore.pri: Build the ce_time.cpp functions from
- within Qt externally.
- * wtf/DateMath.cpp: Removed unnecessary Qt #ifdef, for the
- Qt build these functions are no external, too.
-
-2009-09-17 Janne Koskinen <janne.p.koskinen@digia.com>
-
- Reviewed by Simon Hausmann.
-
- Symbian/WINSCW build fox.
-
- Repeat Q_OS_WIN wchar_t hack for WINSCW, similar to
- revision 24774.
-
- WINSCW defines wchar_t, thus UChar has to be wchar_t
-
- * wtf/unicode/qt4/UnicodeQt4.h:
-
-2009-09-17 Janne Koskinen <janne.p.koskinen@digia.com>
-
- Reviewed by Simon Hausmann.
-
- Symbian/WINSCW build fix.
-
- https://bugs.webkit.org/show_bug.cgi?id=29186
-
- WINSCW Template specialisation name in declaration must the be the same as in implementation.
-
- * runtime/LiteralParser.h:
-
-2009-09-15 Norbert Leser <norbert.leser@nokia.com>
-
- Reviewed by Darin Adler.
-
- https://bugs.webkit.org/show_bug.cgi?id=27060
-
- Symbian compiler for emulator target (WINSCW) fails with
- "illegal operand" for m_attributesInPrevious in structure.ccp
- (when calling make_pair functions).
- This error is apparently due to the compiler not properly
- resolving the unsigned type of the declared bitfield.
-
- Initial patch explicitly casted m_attributesInPrevious
- to unsigned, but since bitfield optimization is not critical for
- the emulator target, this conditional change in header file
- appears to be least intrusive.
-
- * runtime/Structure.h:
-
-2009-09-16 Gabor Loki <loki@inf.u-szeged.hu>
-
- Reviewed by Darin Adler.
-
- Fix GCC warnings on ARM_THUMB2 platform
-
- * assembler/ARMv7Assembler.h:
- (JSC::ARMThumbImmediate::countLeadingZerosPartial):
- * assembler/MacroAssemblerARMv7.h:
- (JSC::MacroAssemblerARMv7::branchTruncateDoubleToInt32):
- (JSC::MacroAssemblerARMv7::moveFixedWidthEncoding):
-
-2009-09-16 Greg Bolsinga <bolsinga@apple.com>
-
- Add ENABLE(INSPECTOR)
- https://bugs.webkit.org/show_bug.cgi?id=29260
-
- Reviewed by David Kilzer.
-
- * wtf/Platform.h:
-
-2009-09-16 Greg Bolsinga <bolsinga@apple.com>
-
- Add ENABLE(CONTEXT_MENUS)
- https://bugs.webkit.org/show_bug.cgi?id=29225
-
- Reviewed by David Kilzer.
-
- * wtf/Platform.h:
-
-2009-09-16 Benjamin C Meyer <benjamin.meyer@torchmobile.com>
-
- Reviewed by Eric Seidel.
-
- The webkit stdint and stdbool headers exists because
- the compiler MSVC doesn't include them. The check
- should not check for PLATFORM(WIN_OS) but for MSVC.
-
- * os-win32/stdbool.h:
- * os-win32/stdint.h:
-
-2009-09-16 Greg Bolsinga <bolsinga@apple.com>
-
- Add ENABLE(DRAG_SUPPORT)
- https://bugs.webkit.org/show_bug.cgi?id=29233
-
- Reviewed by David Kilzer.
-
- * wtf/Platform.h:
-
-2009-09-16 Kevin Ollivier <kevino@theolliviers.com>
-
- waf build fix after flag was moved to correct place.
-
- * wscript:
-
-2009-09-16 Tor Arne Vestbø <tor.arne.vestbo@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- [Qt] Build fix for 64-bit Qt on Mac OS X
-
- * wtf/Platform.h: Use JSVALUE64 on DARWIN, not only on MAC
-
-2009-09-16 Zoltan Herczeg <zherczeg@inf.u-szeged.hu>
-
- Reviewed by Simon Hausmann.
-
- [Qt] Fix wtf/ThreadSpecific.h under Qt to free thread local objects.
- https://bugs.webkit.org/show_bug.cgi?id=29295
-
- This is an important fix when JavaScript workers are in use, since
- unfreed ThreadGlobalDatas leak a big amount of memory (50-100k each).
- QThreadStorage calls the destructor of a given object, which is the
- ThreadSpecific::Data. Unlike pthread, Qt is object oriented, and does
- not support the calling of a static utility function when the thread
- is about to close. In this patch we call the ThreadSpecific::destroy()
- utility function from the destructor of ThreadSpecific::Data. Moreover,
- since Qt resets all thread local values to 0 before the calling of the
- appropriate destructors, we set back the pointer to its original value.
- This is necessary because the get() method of the ThreadSpecific
- object may be called during the exuction of the destructor.
-
- * wtf/ThreadSpecific.h:
- (WTF::ThreadSpecific::Data::~Data):
- (WTF::::~ThreadSpecific):
- (WTF::::set):
- (WTF::::destroy):
-
-2009-09-10 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Geoff Garen.
-
- Allow anonymous storage inside JSObject
- https://bugs.webkit.org/show_bug.cgi?id=29168
-
- Add the concept of anonymous slots to Structures so that it is
- possible to store references to values that need marking in the
- standard JSObject storage buffer. This allows us to reduce the
- malloc overhead of some objects (by allowing them to store JS
- values in the inline storage of the object) and reduce the
- dependence of custom mark functions (if all an objects children
- are in the standard object property storage there's no need to
- mark them manually).
-
- * JavaScriptCore.exp:
- * runtime/JSObject.h:
- (JSC::JSObject::putAnonymousValue):
- (JSC::JSObject::getAnonymousValue):
- (JSC::JSObject::addAnonymousSlots):
- * runtime/JSWrapperObject.h:
- (JSC::JSWrapperObject::createStructure):
- (JSC::JSWrapperObject::JSWrapperObject):
- (JSC::JSWrapperObject::setInternalValue):
- * runtime/PropertyMapHashTable.h:
- * runtime/Structure.cpp:
- (JSC::Structure::~Structure):
- (JSC::Structure::materializePropertyMap):
- (JSC::Structure::addAnonymousSlotsTransition):
- (JSC::Structure::copyPropertyTable):
- (JSC::Structure::put):
- (JSC::Structure::rehashPropertyMapHashTable):
- * runtime/Structure.h:
- (JSC::Structure::propertyStorageSize):
- (JSC::StructureTransitionTable::reifySingleTransition):
- * runtime/StructureTransitionTable.h:
- (JSC::StructureTransitionTable::TransitionTable::addSlotTransition):
- (JSC::StructureTransitionTable::TransitionTable::removeSlotTransition):
- (JSC::StructureTransitionTable::TransitionTable::getSlotTransition):
- (JSC::StructureTransitionTable::getAnonymousSlotTransition):
- (JSC::StructureTransitionTable::addAnonymousSlotTransition):
- (JSC::StructureTransitionTable::removeAnonymousSlotTransition):
-
-2009-09-15 Alex Milowski <alex@milowski.com>
-
- Reviewed by Tor Arne Vestbø.
-
- Added the ENABLE_MATHML define to the features
-
- * Configurations/FeatureDefines.xcconfig:
-
-2009-09-15 Csaba Osztrogonac <oszi@inf.u-szeged.hu>
-
- Reviewed by Tor Arne Vestbø.
-
- [Qt] Build fix for windows.
-
- After http://trac.webkit.org/changeset/47795 the MinGW build broke,
- because MinGW has __mingw_aligned_malloc instead of _aligned_malloc.
-
- * runtime/Collector.cpp:
- (JSC::Heap::allocateBlock): MinGW case added.
- (JSC::Heap::freeBlock): MinGW case added.
-
-2009-09-15 Csaba Osztrogonac <oszi@inf.u-szeged.hu>
-
- Reviewed by Tor Arne Vestbø.
-
- [Qt] Build fix for Windows/MinGW
-
- https://bugs.webkit.org/show_bug.cgi?id=29268
-
- * wtf/Platform.h: JSVALUE32_64 temporarily disabled on PLATFORM(WIN_OS) with COMPILER(MINGW)
-
-2009-09-14 Gabor Loki <loki@inf.u-szeged.hu>
-
- Reviewed by Gavin Barraclough.
-
- Detect VFP at runtime in generic ARM port on Linux platform.
- https://bugs.webkit.org/show_bug.cgi?id=29076
-
- * JavaScriptCore.pri:
- * assembler/MacroAssemblerARM.cpp: Added.
- (JSC::isVFPPresent):
- * assembler/MacroAssemblerARM.h:
- (JSC::MacroAssemblerARM::supportsFloatingPoint):
-
-2009-09-14 Csaba Osztrogonac <oszi@inf.u-szeged.hu>
-
- Reviewed by Tor Arne Vestbø.
-
- [Qt] Build fix for windows build.
-
- * JavaScriptCore.pri: Correct a logic error.
- * pcre/dftables: Add missing paranthesis for tmpdir function.
-
-2009-09-12 Oliver Hunt <oliver@apple.com>
-
- Reviewed by NOBODY (Build fix).
-
- Build fix for windows exports (again).
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
-
-2009-09-12 Oliver Hunt <oliver@apple.com>
-
- Reviewed by NOBODY (Build fix).
-
- Build fix for windows exports.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
-
-2009-09-12 Oliver Hunt <oliver@apple.com>
-
- Reviewed by NOBODY (Build fix).
-
- Correct fix for non-allinonefile builds
-
- * runtime/ObjectConstructor.cpp:
-
-2009-09-12 Oliver Hunt <oliver@apple.com>
-
- Reviewed by NOBODY (Build fix).
-
- Fix non-allinonefile builds
-
- * runtime/ObjectConstructor.cpp:
-
-2009-09-12 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Maciej Stachowiak.
-
- [ES5] Implement Object.keys
- https://bugs.webkit.org/show_bug.cgi?id=29170
-
- This patch basically requires two separate steps, the first is to split getPropertyNames
- into two functions -- getOwnPropertyNames and getPropertyNames, basically making them behave
- in the same way as getOwnPropertySlot and getPropertySlot. In essence getOwnPropertyNames
- produces the list of properties on an object excluding its prototype chain and getPropertyNames
- just iterates the the object and its prototype chain calling getOwnPropertyNames at each level.
-
- * API/JSCallbackObject.h:
- * API/JSCallbackObjectFunctions.h:
- (JSC::::getOwnPropertyNames):
- * JavaScriptCore.exp:
- * debugger/DebuggerActivation.cpp:
- (JSC::DebuggerActivation::getOwnPropertyNames):
- * debugger/DebuggerActivation.h:
- * runtime/CommonIdentifiers.h:
- * runtime/JSArray.cpp:
- (JSC::JSArray::getOwnPropertyNames):
- * runtime/JSArray.h:
- * runtime/JSByteArray.cpp:
- (JSC::JSByteArray::getOwnPropertyNames):
- * runtime/JSByteArray.h:
- * runtime/JSNotAnObject.cpp:
- (JSC::JSNotAnObject::getOwnPropertyNames):
- * runtime/JSNotAnObject.h:
- * runtime/JSObject.cpp:
- (JSC::JSObject::getOwnPropertyNames):
- * runtime/JSObject.h:
- * runtime/JSVariableObject.cpp:
- (JSC::JSVariableObject::getOwnPropertyNames):
- * runtime/JSVariableObject.h:
- * runtime/ObjectConstructor.cpp:
- (JSC::ObjectConstructor::ObjectConstructor):
- (JSC::objectConstructorKeys):
- * runtime/RegExpMatchesArray.h:
- (JSC::RegExpMatchesArray::getOwnPropertyNames):
- * runtime/StringObject.cpp:
- (JSC::StringObject::getOwnPropertyNames):
- * runtime/StringObject.h:
- * runtime/Structure.cpp:
- (JSC::Structure::getOwnEnumerablePropertyNames):
- (JSC::Structure::getEnumerablePropertyNames):
- * runtime/Structure.h:
-
-2009-09-11 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Sam Weinig.
-
- getPropertyNames caching is invalid when the prototype chain contains objects with custom getPropertyNames
- https://bugs.webkit.org/show_bug.cgi?id=29214
-
- Add a flag to TypeInfo to indicate whether a type overrides getPropertyNames.
- This flag is used to make sure that caching of the property name data is safe.
-
- * API/JSCallbackConstructor.h:
- (JSC::JSCallbackConstructor::createStructure):
- * debugger/DebuggerActivation.h:
- (JSC::DebuggerActivation::createStructure):
- * runtime/BooleanObject.h:
- (JSC::BooleanObject::createStructure):
- * runtime/DatePrototype.h:
- (JSC::DatePrototype::createStructure):
- * runtime/FunctionPrototype.h:
- (JSC::FunctionPrototype::createStructure):
- * runtime/JSONObject.h:
- (JSC::JSONObject::createStructure):
- * runtime/JSObject.h:
- (JSC::JSObject::createStructure):
- * runtime/JSTypeInfo.h:
- (JSC::TypeInfo::hasDefaultGetPropertyNames):
- * runtime/JSVariableObject.h:
- (JSC::JSVariableObject::createStructure):
- * runtime/JSWrapperObject.h:
- (JSC::JSWrapperObject::createStructure):
- * runtime/MathObject.h:
- (JSC::MathObject::createStructure):
- * runtime/NumberConstructor.h:
- (JSC::NumberConstructor::createStructure):
- * runtime/NumberObject.h:
- (JSC::NumberObject::createStructure):
- * runtime/RegExpConstructor.h:
- (JSC::RegExpConstructor::createStructure):
- * runtime/RegExpObject.h:
- (JSC::RegExpObject::createStructure):
- * runtime/StructureChain.cpp:
- (JSC::StructureChain::isCacheable):
-
-2009-09-11 Alexey Proskuryakov <ap@webkit.org>
-
- Reviewed by Geoff Garen.
-
- https://bugs.webkit.org/show_bug.cgi?id=29207
- Add checks for using WebCore JS context on secondary threads
-
- * runtime/JSGlobalData.cpp: (JSC::JSGlobalData::JSGlobalData):
- * runtime/JSGlobalData.h:
- Added a new mainThreadOnly flag that WebCore would set.
-
- * runtime/Collector.cpp: (JSC::Heap::registerThread): JSC API methods always call this,
- so this is a good place to check that the API isn't used form a wrong thread.
-
-2009-09-11 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- Compiling JavaScriptCore on sparc 64 with gcc fails.
-
- ThreadSafeShared uses the atomic __gnu_cxx::__exchange_and_add with an int,
- however on sparc 64 the _Atomic_word argument is typedefed to long (8 bytes).
-
- The patch disables WTF_USE_LOCKFREE_THREADSAFESHARED in ThreadSafeShared to use
- a mutex instead when compiling for sparc 64 with gcc.
-
- https://bugs.webkit.org/show_bug.cgi?id=29175
-
- * wtf/Platform.h:
- __sparc64__ is not defined on all OS.
- Uses instead: __sparc__ && __arch64__ || __sparcv9
- * wtf/Threading.h:
-
-2009-09-11 Prasanth Ullattil <prasanth.ullattil@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- Fix compile error on Windows7(64Bit) with latest SDK.
-
- Added the missing include file.
-
- * runtime/UString.cpp:
-
-2009-09-11 Joerg Bornemann <joerg.bornemann@trolltech.com>
-
- Reviewed by Simon Hausmann.
-
- Qt/Windows CE compile fix, include the executable allocator and
- markstack implementation in the windows build.
-
- * JavaScriptCore.pri:
-
-2009-09-08 John Abd-El-Malek <jam@chromium.org>
-
- Reviewed by Dimitri Glazkov.
-
- Remove unneeded define for ActiveX.
- https://bugs.webkit.org/show_bug.cgi?id=29054
-
- * wtf/Platform.h:
-
-2009-09-10 Mark Rowe <mrowe@apple.com>
-
- Rubber-stamped by Sam Weinig.
-
- Update JavaScriptCore and WebKit's FeatureDefines.xcconfig so that they are in sync with WebCore as they need to be.
-
- * Configurations/FeatureDefines.xcconfig:
-
-2009-09-10 Fumitoshi Ukai <ukai@chromium.org>
-
- Reviewed by Alexey Proskuryakov.
-
- Export WTF::tryFastMalloc used in WebSocketChannel.
- https://bugs.webkit.org/show_bug.cgi?id=28038
-
- * JavaScriptCore.exp:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
-
-2009-09-10 Oliver Hunt <oliver@apple.com>
-
- Reviewed by NOBODY (Build fix).
-
- Make StructureTransitionTable use an enum for the PtrAndFlags member
- used for the single transition slot optimisation.
-
- * runtime/StructureTransitionTable.h:
- (JSC::StructureTransitionTable::StructureTransitionTable):
- (JSC::StructureTransitionTable::usingSingleTransitionSlot):
- (JSC::StructureTransitionTable::):
-
-2009-09-10 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Geoff Garen.
-
- Refactor StructureTransitionTable and Structure to unify handling of the single slot optimization
- https://bugs.webkit.org/show_bug.cgi?id=29141
-
- Make StructureTransitionTable encapsulate the single transition slot optimization.
-
- * runtime/Structure.cpp:
- (JSC::Structure::Structure):
- (JSC::Structure::~Structure):
- (JSC::Structure::addPropertyTransitionToExistingStructure):
- (JSC::Structure::addPropertyTransition):
- (JSC::Structure::addPropertyWithoutTransition):
- (JSC::Structure::removePropertyWithoutTransition):
- (JSC::Structure::hasTransition):
- * runtime/Structure.h:
- (JSC::StructureTransitionTable::contains):
- (JSC::StructureTransitionTable::get):
- (JSC::StructureTransitionTable::hasTransition):
- (JSC::StructureTransitionTable::reifySingleTransition):
- * runtime/StructureTransitionTable.h:
- (JSC::StructureTransitionTable::StructureTransitionTable):
- (JSC::StructureTransitionTable::~StructureTransitionTable):
- (JSC::StructureTransitionTable::remove):
- (JSC::StructureTransitionTable::add):
- (JSC::StructureTransitionTable::table):
- (JSC::StructureTransitionTable::singleTransition):
- (JSC::StructureTransitionTable::usingSingleTransitionSlot):
- (JSC::StructureTransitionTable::setSingleTransition):
- (JSC::StructureTransitionTable::setTransitionTable):
- (JSC::StructureTransitionTable::):
- * wtf/PtrAndFlags.h:
- (WTF::PtrAndFlags::PtrAndFlags):
-
-2009-09-10 Zoltan Horvath <zoltan@webkit.org>
-
- Reviewed by Darin Adler.
-
- Implement fastDeleteSkippingDestructor for FastAllocBase and fastDeleteAllValues for HashSet
- https://bugs.webkit.org/show_bug.cgi?id=25930
-
- FastAllocBase has been extended with fastDeleteSkippingDestructor function which
- releases memory without destructor call. fastDeleteAllValues has been implemented
- similar as deleteAllValues but it uses fastDelete function to release memory.
-
- * wtf/FastAllocBase.h:
- (WTF::fastDeleteSkippingDestructor):
- * wtf/HashSet.h:
- (WTF::fastDeleteAllValues):
-
-2009-09-10 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Darin Adler.
-
- ARM compiler does not understand GCC visibility attribute
- https://bugs.webkit.org/show_bug.cgi?id=29079
-
- * API/JSBase.h: Make the test more specific to hit only
- the GCC compiler
-
-2009-09-10 Adam Barth <abarth@webkit.org>
-
- Unreviewed revert of the previous change. It broke the tests.
-
- * wtf/dtoa.cpp:
- (WTF::dtoa):
-
-2009-09-10 Ben Laurie <benl@google.com>
-
- Reviewed by Adam Barth.
-
- <https://bugs.webkit.org/show_bug.cgi?id=26836>
-
- If dtoa was given a small buffer and the number was either infinite or
- NaN, then the buffer would be overflowed.
-
- * wtf/dtoa.cpp:
-
-2009-09-09 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Darin Adler.
-
- Change reinterpret_cast to static_cast in r48212.
-
- * jit/ExecutableAllocator.h:
- (JSC::ExecutableAllocator::cacheFlush):
-
-2009-09-09 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Darin Adler.
-
- Remove WTF_PLATFORM_FORCE_PACK as it is no longer used
- https://bugs.webkit.org/show_bug.cgi?id=29066
-
- * wtf/Platform.h:
-
-2009-09-09 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Ariya Hidayat.
-
- Implement flushing the instruction cache for Symbian
- https://bugs.webkit.org/show_bug.cgi?id=29075
-
- * jit/ExecutableAllocator.h:
- (JSC::ExecutableAllocator::cacheFlush): Call IMB_Range to flush
- the instruction cache on Symbian
-
-2009-09-09 Kent Hansen <khansen@trolltech.com>
-
- Reviewed by Darin Adler.
-
- https://bugs.webkit.org/show_bug.cgi?id=29024
- Make JavaScriptCore compile on platforms with case-insensitive file systems and typeinfo.h in STL
-
- These platforms include Microsoft Visual Studio 2003, and Symbian with Metrowerks compiler.
-
- * JavaScriptCore.gypi:
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * runtime/JSTypeInfo.h: Copied from JavaScriptCore/runtime/TypeInfo.h.
- * runtime/Structure.h:
- * runtime/TypeInfo.h: Removed.
-
-2009-09-08 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Maciej Stachowiak.
-
- JSON.stringify(Date) loses the milliseconds information
- https://bugs.webkit.org/show_bug.cgi?id=29063
-
- Make sure we include milliseconds in the output of toISOString.
-
- * runtime/DatePrototype.cpp:
- (JSC::dateProtoFuncToISOString):
-
-2009-09-08 Kevin Ollivier <kevino@theolliviers.com>
-
- wx build fix, generate derived sources earlier in order to make sure
- they're found by the build system when generating the list of sources to build.
-
- * wscript:
-
-2009-09-08 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- Build fix when USE(LOCKFREE_THREADSAFESHARED) is not defined
- https://bugs.webkit.org/show_bug.cgi?id=29011
-
- * wtf/Threading.h: Use LOCKFREE_THREADSAFESHARED guard for
- atomicIncrement and atomicDecrement
-
-2009-09-07 Zoltan Horvath <zoltan@webkit.org>
-
- Reviewed by Darin Adler.
-
- Allow custom memory allocation control in Yarr's RegexInterpreter
- https://bugs.webkit.org/show_bug.cgi?id=29025
-
- Inherits RegexInterpreter classes from FastAllocBase (bug #20422), which has
- been instantiated by 'new':
-
- class ByteDisjunction
- -> instantiated in JavaScriptCore/yarr/RegexInterpreter.cpp:1462
-
- struct BytecodePattern
- -> instantiated in JavaScriptCore/yarr/RegexInterpreter.cpp:1279
-
- * yarr/RegexInterpreter.h:
-
-2009-09-07 Drew Wilson <atwilson@google.com>
-
- Reverting r48121 to fix Windows build errors.
-
- * JavaScriptCore.exp:
-
-2009-09-07 Drew Wilson <atwilson@google.com>
-
- Reviewed by David Levin.
-
- Enable SHARED_WORKERS by default
- https://bugs.webkit.org/show_bug.cgi?id=28959
-
- * Configurations/FeatureDefines.xcconfig:
-
-2009-09-07 Fumitoshi Ukai <ukai@chromium.org>
-
- Reviewed by Alexey Proskuryakov.
-
- Export WTF::tryFastMalloc used in WebSocketChannel.
- https://bugs.webkit.org/show_bug.cgi?id=28038
-
- * JavaScriptCore.exp:
-
-2009-09-04 Oliver Hunt <oliver@apple.com>
-
- Reviewed by NOBODY (Build fix).
-
- Fix windows export files
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
-
-2009-09-04 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- [[ToString]] conversion should use the actual toString function for String objects.
-
- Remove incorrect specialisations of toString conversions on StringObject.
-
- * JavaScriptCore.exp:
- * runtime/StringObject.cpp:
- * runtime/StringObject.h:
-
-2009-09-04 Steve Falkenburg <sfalken@apple.com>
-
- Windows build fix.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Add new export.
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: Add new export.
-
-2009-09-04 Steve Falkenburg <sfalken@apple.com>
-
- Windows build fix.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Remove unneeded export.
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: Remove unneeded export.
-
-2009-09-04 Darin Adler <darin@apple.com>
-
- Reviewed by Geoff Garen.
-
- DateInstance object collected on ARM JIT (JSValue: WTF_USE_JSVALUE32)
- https://bugs.webkit.org/show_bug.cgi?id=28909
-
- Part two.
+ (JSC::stringProtoFuncReplace):
+ (JSC::stringProtoFuncToString):
+ (JSC::stringProtoFuncCharAt):
+ (JSC::stringProtoFuncCharCodeAt):
+ (JSC::stringProtoFuncConcat):
+ (JSC::stringProtoFuncIndexOf):
+ (JSC::stringProtoFuncLastIndexOf):
+ (JSC::stringProtoFuncMatch):
+ (JSC::stringProtoFuncSearch):
+ (JSC::stringProtoFuncSlice):
+ (JSC::stringProtoFuncSplit):
+ (JSC::stringProtoFuncSubstr):
+ (JSC::stringProtoFuncSubstring):
+ (JSC::stringProtoFuncToLowerCase):
+ (JSC::stringProtoFuncToUpperCase):
+ (JSC::stringProtoFuncLocaleCompare):
+ (JSC::stringProtoFuncBig):
+ (JSC::stringProtoFuncSmall):
+ (JSC::stringProtoFuncBlink):
+ (JSC::stringProtoFuncBold):
+ (JSC::stringProtoFuncFixed):
+ (JSC::stringProtoFuncItalics):
+ (JSC::stringProtoFuncStrike):
+ (JSC::stringProtoFuncSub):
+ (JSC::stringProtoFuncSup):
+ (JSC::stringProtoFuncFontcolor):
+ (JSC::stringProtoFuncFontsize):
+ (JSC::stringProtoFuncAnchor):
+ (JSC::stringProtoFuncLink):
+ (JSC::stringProtoFuncTrim):
+ (JSC::stringProtoFuncTrimLeft):
+ (JSC::stringProtoFuncTrimRight):
- Make some improvements to garbage collection code:
+2010-05-28 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
- 1) Create a runtime assertion that catches any classes that
- override markChildren but have the HasDefaultMark bit set.
- 2) Remove checks of the mark bit outside the MarkStack::append
- function; they are redundant.
- 3) Improve the efficiency of the asObject and asArray functions
- when called on JSCell* to avoid a round trip to JSValue.
- 4) Make more callers use the checked asCell and asObject
- casting functions rather than unchecked casts.
- 5) Removed the JSCell::marked function and other GC-related
- functions because these operations are no longer things that
- code other than the core GC code needs to do directly. Fixed
- callers that were calling them.
+ Reviewed by Geoffrey Garen.
- * runtime/Collector.cpp:
- (JSC::Heap::markConservatively): Removed unneeded call to MarkStack::drain.
- (JSC::Heap::markProtectedObjects): Removed unneeded check of the mark
- bit and call to MarkStack::drain.
- (JSC::Heap::collect): Removed unneeded checks of the mark bit and also
- changed call to SmallStrings::mark to call markChildren instead to match
- the rest of the objects.
- (JSC::typeName): Removed unneeded cast to JSObject*.
+ Fix the JSObjectSetPrototype function.
- * runtime/JSArray.h:
- (JSC::asArray): Added an overload for JSCell* and changed the JSValue
- version to call it. Removed some unneeded casts.
- (JSC::JSArray::markChildrenDirect): Marked this function inline. It's in
- a header, and if not marked inline this could lead to linking problems.
- (JSC::MarkStack::markChildren): Added. This helper function is used by
- the drain function to avoid repating code. Also added the code here to
- check fro default mark violations in debug code. If a markChildren
- function adds something to the mark stack, but the type info claimed
- hasDefaultMark was true, then we will get an assertion now. Also fixed
- the assertion about the mark bit to use the Heap function directly
- because we don't have a JSCell::marked function any more.
- (JSC::MarkStack::drain): Changed a local variable from "v" to "value",
- and from "currentCell" to "cell". Changed to call markChildren in two
- places instead of repeating a chain of if statements twice. Changed
- code that reads and writes the mark bit to use Heap::isCellMarked and
- Heap::markCell so we can eliminate the JSCell::marked and
- JSCell::markCellDirect functions.
+ A cycle in a prototype chain can cause an application hang or
+ even crash.
+ A check for a prototype chain cycles was added to
+ the JSObjectSetPrototype.
- * runtime/JSCell.h: Removed JSCell's markCellDirect and marked member
- functions. Added a comment explaining that asCell should be deprecated
- in favor of the JSValue asCell member function.
- (JSC::MarkStack::append): Added the assertion that catches callers
- that have set the HasDefaultMark bit incorrectly. Changed
- code that reads and writes the mark bit to use Heap::isCellMarked and
- Heap::markCell so we can eliminate the JSCell::marked and
- JSCell::markCellDirect functions. Moved the overload of
- MarkStack::append for JSValue here so it can call through to the cell
- version. The old version had a copy of all the code instead, but that
- repeated the conversion from JSValue to JSCell* and the check for
- whether a value is a cell multiple times.
- (JSC::Structure::markAggregate): Moved this function here to avoid
- dependencies for Structure.h, since this calls MarkStack::append.
+ JSObjectSetPrototype doesn't check for cycle in prototype chain.
+ https://bugs.webkit.org/show_bug.cgi?id=39360
+ * API/JSObjectRef.cpp:
+ (JSObjectSetPrototype):
+ * API/tests/testapi.c:
+ (assertTrue):
+ (checkForCycleInPrototypeChain):
+ (main):
* runtime/JSObject.cpp:
- (JSC::JSObject::markChildren): Added code to clear
- m_isCheckingForDefaultMarkViolation so the marking done by JSObject
- doesn't trigger the assertion.
-
- * runtime/JSValue.h: Moved some stray includes that were outside the
- header guard inside it. Not sure how that happened! Removed the
- GC-related member functions markChildren, hasChildren, marked, and
- markDirect.
-
- * runtime/JSWrapperObject.h: Made markChildren private.
- (JSC::JSWrapperObject::createStructure): Added. Fixes a bug where the
- HasDefaultMark bit was set.
-
- * runtime/MarkStack.h: Added m_isCheckingForDefaultMarkViolation and
- initialized it to false. Moved the append function body from here to
- JSCell.h. Added a declaration of a private markChildren function used
- inside the drain function.
-
- * runtime/SmallStrings.cpp:
- (JSC::SmallStrings::markChildren): Changed the name and style of this
- function to match other functions. This allows us to share the normal
- mark stack code path.
-
- * runtime/SmallStrings.h: Changed the name and interface of mark to
- the more-normal markChildren style.
-
- * runtime/Structure.h: Moved the body of markAggregate into the
- JSCell.h to avoid a circular dependency with JSCell.h.
-
-2009-09-04 Darin Adler <darin@apple.com>
-
- Reviewed by Geoff Garen.
-
- DateInstance object collected on ARM JIT (JSValue: WTF_USE_JSVALUE32)
- https://bugs.webkit.org/show_bug.cgi?id=28909
-
- Part one.
-
- Make some improvements to garbage collection code:
-
- 1) Fix the two classes that had the default mark bit set but
- should not.
- 2) Remove checks of the mark bit outside the MarkStack::append
- function; they are redundant.
- 3) Make more callers use the checked asCell and asObject
- casting functions rather than unchecked casts.
- 4) Removed some GC-related functions because these operations are
- no longer things that code other than the core GC code needs
- to do directly. Fixed callers that were calling them.
-
- * bytecode/CodeBlock.cpp:
- (JSC::CodeBlock::markAggregate): Removed unneeded check of the mark
- bit before calling MarkStack::append.
-
- * interpreter/Register.h: Removed unneeded marked and markChildren
- functions.
-
- * jit/JITStubs.cpp:
- (op_eq): Removed unneeded assertions, instead using checked casting
- functions such as asObject.
-
- * runtime/ArgList.h: Added now-needed forward declaration of MarkStack.
-
- * runtime/GetterSetter.cpp:
- (JSC::GetterSetter::markChildren): Remmoved unneeded check of the mark bit.
-
- * runtime/GlobalEvalFunction.h:
- (JSC::GlobalEvalFunction::createStructure): Added. Fixes a bug where the
- HasDefaultMark bit was set.
-
- * runtime/JSCell.cpp:
- (JSC::JSCell::getObject): Use asObject to avoid a direct static_cast.
-
+ (JSC::JSObject::put):
* runtime/JSObject.h:
- (JSC::asObject): Added an overload for JSCell* and changed the JSValue
- version to call it.
- (JSC::JSValue::get): Use asObject to avoid a direct static_cast.
-
- * runtime/JSWrapperObject.h: Made markChildren private.
- (JSC::JSWrapperObject::createStructure): Added. Fixes a bug where the
- HasDefaultMark bit was set. Later we may want to optimize this for
- wrapper types that never have cells in their internal values, but there
- is no measured performance regression in SunSpider or V8 doing this
- all the time.
-
- * runtime/MarkStack.cpp: Tweaked formatting.
-
-2009-09-04 Kevin Ollivier <kevino@theolliviers.com>
-
- wx build fix. Switch USE_ defines over to the compiler so that they can be
- checked by files not including config.h (like WebCorePrefix.h).
-
- * wtf/Platform.h:
-
-2009-09-03 Yong Li <yong.li@torchmobile.com>
-
- Reviewed by David Levin.
-
- Remove unnecessary dependency on unistd.h
- https://bugs.webkit.org/show_bug.cgi?id=28962
-
- * runtime/Completion.cpp:
+ (JSC::JSObject::setPrototypeWithCycleCheck):
-2009-09-03 Fumitoshi Ukai <ukai@chromium.org>
+2010-05-28 Chao-ying Fu <fu@mips.com>
Reviewed by Eric Seidel.
- Add strnstr for Linux and Windows in StringExtras.h
- https://bugs.webkit.org/show_bug.cgi?id=28901
-
- * wtf/StringExtras.h:
- (strnstr):
-
-2009-09-03 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
-
- Reviewed by Darin Adler.
+ Fix MIPS JIT DoubleGreaterThanOrEqual Operands
+ https://bugs.webkit.org/show_bug.cgi?id=39504
- Allow custom memory allocation control for JavaScriptCore's HashEntry class
- https://bugs.webkit.org/show_bug.cgi?id=27830
-
- Inherits HashEntry class from FastAllocBase because it has been
- instantiated by 'new' JavaScriptCore/runtime/Lookup.cpp:32.
-
- * runtime/Lookup.h:
-
-2009-09-02 Gavin Barraclough <barraclough@apple.com>
-
- Should crash if JIT code buffer allocation fails.
-
- https://bugs.webkit.org/show_bug.cgi?id=28926
- <rdar://problem/7031922>
-
- * jit/ExecutableAllocatorPosix.cpp:
- (JSC::ExecutablePool::systemAlloc):
- * jit/ExecutableAllocatorWin.cpp:
- (JSC::ExecutablePool::systemAlloc):
-
-2009-09-02 Kevin Ollivier <kevino@theolliviers.com>
-
- waf build fixes for Windows/MSVC.
-
- * wscript:
-
-2009-09-02 Kevin Ollivier <kevino@theolliviers.com>
-
- Build fix for building on Windows.
-
- * wtf/ThreadingPthreads.cpp:
-
-2009-09-02 Norbert Leser <norbert.leser@nokia.com>
-
- Reviewed by Eric Seidel.
-
- Use fastMalloc when neither MMAP nor VIRTUALALLOC are enabled
-
- RegisterFile constructor currently throws #error when both
- MMAP and VIRTUALALLOC conditions fail.
- On any platform that does not provide these features
- (for instance, Symbian),
- the fallback should be regular malloc (or fastMalloc).
- It is functionally equivalent in this case, even though it may
- have certain drawbacks such as lack of dynamic pre-allocation.
+ Swapped two operands of left and right for DoubleGreaterThanOrEqual.
+ This patch fixed two layout tests as follows.
+ fast/js/comparison-operators-greater.html
+ fast/js/comparison-operators-less.html
- * interpreter/RegisterFile.cpp:
- (JSC::RegisterFile::~RegisterFile):
- * interpreter/RegisterFile.h:
- (JSC::RegisterFile::RegisterFile):
-
-2009-08-31 Robert Agoston <Agoston.Robert@stud.u-szeged.hu>
-
- Reviewed by Gavin Barraclough.
-
- Fixed typo.
- https://bugs.webkit.org/show_bug.cgi?id=28691
-
- * parser/Parser.h:
- (JSC::Parser::parse):
-
-2009-08-27 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Maciej Stachowiak.
-
- JSON Stringifier does not follow ES5 spec for handling of Number, String and Boolean objects
- https://bugs.webkit.org/show_bug.cgi?id=28797
-
- Fixed unwrapBoxedPrimitive to do the right thing, which necessitated a couple of new exception
- checks, and corrected the logic in gap to correctly convert Number and String objects.
-
- * runtime/JSONObject.cpp:
- (JSC::unwrapBoxedPrimitive):
- (JSC::gap):
- (JSC::Stringifier::Stringifier):
- (JSC::Stringifier::appendStringifiedValue):
-
-2009-08-27 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Adam Roben.
-
- JSON.stringify replacer array does not accept values that are not string primitives.
- https://bugs.webkit.org/show_bug.cgi?id=28788
-
- Update the JSON stringifier to initialise its replacer array according to the most
- recent version of the spec.
-
- * runtime/Identifier.h:
- (JSC::Identifier::from):
- * runtime/JSONObject.cpp:
- (JSC::Stringifier::Stringifier):
-
-2009-08-27 Alexey Proskuryakov <ap@apple.com>
-
- Reviewed by Oliver Hunt.
-
- https://bugs.webkit.org/show_bug.cgi?id=28753
- <rdar://problem/7173448> Excessive number of threads (and a crash)
-
- * wtf/Threading.h: (WTF::atomicIncrement): Changed atomicIncrement to match decrement
- and return the new value. Also added using directives for these functions, to match
- te rest of WTF.
-
-2009-08-27 Brent Fulgham <bfulgham@webkit.org>
-
- Reviewed by Adam Roben.
-
- Link the testapi against CFLite when building the WinCairo port.
-
- * JavaScriptCore.vcproj/testapi/testapi.vcproj: Add new Release_CFLite
- target. Update all targets to inherit from either the
- JavaScriptCF.vsprops (Apple target) or the JavaScriptCFLite.vsprops
- file (WinCairo target).
- * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops: Remove
- input file CoreFoundation.lib. This is provided by either the
- JavaScriptCF.vsprops or JavaScriptCFLite.vsprops file.
-
-2009-08-27 Steve Falkenburg <sfalken@apple.com>
-
- Reviewed by Geoff Garen.
-
- Fix Windows-specific crash due to missing memory clearing call.
-
- * runtime/Collector.cpp:
- (JSC::Heap::allocateBlock):
-
-2009-08-27 Brent Fulgham <bfulgham@webkit.org>
-
- Build fix: JavaScriptCore_debug.def missing some exports. Apple
- Windows build does not use this file, so it was not noticed previously.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
-
-2009-08-27 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- x86-64 GTK broken due to code offsets changing, pointers sometimes packed into immediates.
- https://bugs.webkit.org/show_bug.cgi?id=28317
-
- Missed one, fix part II.
-
- * assembler/MacroAssemblerX86Common.h:
- (JSC::MacroAssemblerX86Common::move):
- * assembler/X86Assembler.h:
- (JSC::CAN_SIGN_EXTEND_8_32):
-
-2009-08-27 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Adam Roben.
-
- JSON.stringify replacer array does not accept values that are not string primitives.
- https://bugs.webkit.org/show_bug.cgi?id=28788
-
- Update the JSON stringifier to initialise its replacer array according to the most
- recent version of the spec.
-
- * runtime/Identifier.h:
- (JSC::Identifier::from):
- * runtime/JSONObject.cpp:
- (JSC::Stringifier::Stringifier):
-
-2009-08-27 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Alexey Proskuryakov.
-
- JSON parser accepts trailing comma in array literals
- https://bugs.webkit.org/show_bug.cgi?id=28779
-
- Update parser to correctly fail if there's a trailing comma.
-
- * runtime/LiteralParser.cpp:
- (JSC::LiteralParser::parse):
-
-2009-08-26 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- 'this' in JSON.parse reviver is the global object
- https://bugs.webkit.org/show_bug.cgi?id=28752
-
- This is a technically simple change, we merely update the code for calling
- the reviver function to pass the correct this object. Doing so however
- exposes the holder to arbitrary mutation by the reviver function so it is
- necessary for us to now guard all property accesses against the possibility
- of failure.
-
- * runtime/JSArray.h:
- JSON needs to delete a property from the array, so we friend its
- Walker class so that we can make a non-virtual call to the arrays
- delete and getOwnPropertySlot methods.
- * runtime/JSONObject.cpp:
- (JSC::Walker::callReviver):
- We need to pass the correct this object
- (JSC::Walker::walk):
- Update calls to callReviver, and update property logic logic
- to correctly handle the holder being mutated by the reviver
- function.
-
-2009-08-26 Alice Liu <alice.liu@apple.com>
-
- Windows build fix: added some exported symbols
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
-
-2009-08-26 Geoffrey Garen <ggaren@apple.com>
-
- Windows build fix: Removed some exported symbols that no longer exist.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
-
-2009-08-26 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Olliejver Hunt.
-
- x86-64 GTK broken due to code offsets changing, pointers sometimes packed into immediates.
- https://bugs.webkit.org/show_bug.cgi?id=28317
-
- We rely on a slightly OS X specific behaviour, that x86-64 applications have a 4Gb zero page,
- so pointers are never representable as a 32-bit integer, and always have to be represented by
- a separate immediate load instruction, rather than within the immediate field of an arithmetic
- or memory operation.
-
- We explicitly check for a couple of cases where a value might be representable in 32-bit, but
- these probably never kick in on Mac OS, and only kick in to hose GTK. Deleting these does not
- show a performance degradation on SunSpider. Remove.
-
- * assembler/MacroAssemblerX86_64.h:
- (JSC::MacroAssemblerX86_64::storePtr):
- (JSC::MacroAssemblerX86_64::branchPtr):
-
-2009-08-26 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Oliver Hunt.
-
- A bit of Collector refatoring.
-
- SunSpider says no change. v8 says 1.003x faster (1.02x faster on splay).
-
- * JavaScriptCore.exp:
-
- * runtime/JSCell.cpp:
- (JSC::JSCell::toPrimitive):
- (JSC::JSCell::getPrimitiveNumber):
- (JSC::JSCell::toBoolean):
- (JSC::JSCell::toNumber):
- (JSC::JSCell::toString):
- (JSC::JSCell::toObject): Removed pure virtual functions from
- JSCell, so the collector can construct one. This allowed
- me to remove a bunch of ASSERT_NOT_REACHED throughout the
- code, too.
-
- * runtime/JSCell.h:
- (JSC::JSCell::JSCell): ditto
- (JSC::Heap::heap): Inlined this function because it's trivial.
-
- * JavaScriptCore.exp:
-
- * runtime/Collector.cpp:
- (JSC::Heap::destroy):
- (JSC::Heap::allocateBlock):
- (JSC::Heap::freeBlock):
- (JSC::Heap::freeBlocks): Renamed freeHeap to freeBlocks, since
- it doesn't actually free the Heap object.
- (JSC::Heap::heapAllocate):
- (JSC::Heap::sweep):
- * runtime/Collector.h: Refactored block allocation and destruction
- into helper functions.
-
- * runtime/GetterSetter.cpp:
- * runtime/JSAPIValueWrapper.cpp:
- * runtime/JSPropertyNameIterator.cpp: Removed dummy implementations
- of pure virtual functions. (See above.)
-
-=== End re-roll-in of r47738:47740 with Windows crash fixed ===
-
-2009-08-26 Geoffrey Garen <ggaren@apple.com>
-
- Build fix: start out with a 32-bit value to avoid a shortening warning.
-
- * runtime/Collector.cpp:
- (JSC::Heap::sweep):
-
-2009-08-24 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Substantially reduced VM thrash in the GC heap.
-
- 1.08x faster on v8 (1.60x faster on v8-splay).
-
- 1.40x faster on bench-alloc-nonretained.
-
- 1.90x faster on bench-alloc-retained.
-
- SunSpider says no change.
-
- * runtime/Collector.cpp:
- (JSC::Heap::heapAllocate): Fixed a long-standing bug: update a few local
- variables unconditionally after calling collect(), since they may be used
- even if we don't "goto scan". (In the bug I saw, usedBlocks got out of
- sync with heap.usedBlocks).
- (JSC::Heap::sweep): Keep enough free heap space to accomodate
- the number of objects we'll allocate before the next GC, plus 25%, for
- good measure.
- * runtime/Collector.h: Bumped the block size to 256k. This seems to give
- the best cache performance, and it prevents us from initiating lots of
- VM traffic to recover very small chunks of memory.
-
-=== Begin re-roll-in of r47738:47740 with Windows crash fixed ===
-
-2009-08-25 Drew Wilson <atwilson@google.com>
-
- Reviewed by David Levin.
-
- postMessage() spec now supports sending arrays of ports
- https://bugs.webkit.org/show_bug.cgi?id=26902
-
- Added OwnPtr to VectorTraits so we can store OwnPtrs in Vectors.
-
- * wtf/VectorTraits.h:
-
-2009-08-26 Xan Lopez <xlopez@igalia.com>
-
- Rubber-stamped by Gustavo Noronha.
-
- Remove duplicated files from file list.
-
- * GNUmakefile.am:
-
-2009-08-26 Oliver Hunt <oliver@apple.com>
-
- Reviewed by NOBODY (Build fix).
-
- More export fixes.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
-
-2009-08-26 Oliver Hunt <oliver@apple.com>
-
- Reviewed by NOBODY (Build fix).
-
- Hopefully fix all the exports from JSC on windows
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
-
-2009-08-26 Oliver Hunt <oliver@apple.com>
-
- Reviewed by NOBODY (Build fixes).
-
- Forgot I added files to JavaScriptCore.
-
- * GNUmakefile.am:
- * JavaScriptCore.gypi:
- * JavaScriptCore.pri:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
- * JavaScriptCoreSources.bkl:
-
-2009-08-25 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- [ES5] Implement getOwnPropertyDescriptor
- https://bugs.webkit.org/show_bug.cgi?id=28724
-
- Implement the core runtime support for getOwnPropertyDescriptor.
- This adds a virtual getOwnPropertyDescriptor method to every class
- that implements getOwnPropertySlot that shadows the behaviour of
- getOwnPropertySlot. The alternative would be to make getOwnPropertySlot
- (or PropertySlots in general) provide property attribute information,
- but quick testing showed this to be a regression.
-
- * JavaScriptCore.exp:
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * runtime/Arguments.cpp:
- (JSC::Arguments::getOwnPropertyDescriptor):
- * runtime/Arguments.h:
- * runtime/ArrayPrototype.cpp:
- (JSC::ArrayPrototype::getOwnPropertyDescriptor):
- * runtime/ArrayPrototype.h:
- * runtime/CommonIdentifiers.h:
- * runtime/DatePrototype.cpp:
- (JSC::DatePrototype::getOwnPropertyDescriptor):
- * runtime/DatePrototype.h:
- * runtime/JSArray.cpp:
- (JSC::JSArray::getOwnPropertyDescriptor):
- * runtime/JSArray.h:
- * runtime/JSByteArray.cpp:
- (JSC::JSByteArray::getOwnPropertyDescriptor):
- * runtime/JSByteArray.h:
- * runtime/JSFunction.cpp:
- (JSC::JSFunction::getOwnPropertyDescriptor):
- * runtime/JSFunction.h:
- * runtime/JSGlobalObject.h:
- (JSC::JSGlobalObject::getOwnPropertyDescriptor):
- * runtime/JSNotAnObject.cpp:
- (JSC::JSNotAnObject::getOwnPropertyDescriptor):
- * runtime/JSNotAnObject.h:
- * runtime/JSONObject.cpp:
- (JSC::JSONObject::getOwnPropertySlot):
- (JSC::JSONObject::getOwnPropertyDescriptor):
- * runtime/JSONObject.h:
- * runtime/JSObject.cpp:
- (JSC::JSObject::getOwnPropertyDescriptor):
- (JSC::JSObject::getPropertyDescriptor):
- * runtime/JSObject.h:
- * runtime/JSString.cpp:
- (JSC::JSString::getStringPropertyDescriptor):
- (JSC::JSString::getOwnPropertyDescriptor):
- * runtime/JSString.h:
- * runtime/JSVariableObject.cpp:
- (JSC::JSVariableObject::symbolTableGet):
- * runtime/JSVariableObject.h:
- * runtime/Lookup.h:
- (JSC::getStaticPropertyDescriptor):
- (JSC::getStaticFunctionDescriptor):
- (JSC::getStaticValueDescriptor):
- Add property descriptor equivalents of the lookup
- table access functions
-
- * runtime/MathObject.cpp:
- (JSC::MathObject::getOwnPropertySlot):
- (JSC::MathObject::getOwnPropertyDescriptor):
- * runtime/MathObject.h:
- * runtime/NumberConstructor.cpp:
- (JSC::NumberConstructor::getOwnPropertyDescriptor):
- * runtime/NumberConstructor.h:
- * runtime/ObjectConstructor.cpp:
- (JSC::ObjectConstructor::ObjectConstructor):
- (JSC::objectConstructorGetOwnPropertyDescriptor):
- * runtime/PropertyDescriptor.cpp: Added.
- (JSC::PropertyDescriptor::writable):
- (JSC::PropertyDescriptor::enumerable):
- (JSC::PropertyDescriptor::configurable):
- (JSC::PropertyDescriptor::hasAccessors):
- (JSC::PropertyDescriptor::setUndefined):
- (JSC::PropertyDescriptor::getter):
- (JSC::PropertyDescriptor::setter):
- (JSC::PropertyDescriptor::setDescriptor):
- (JSC::PropertyDescriptor::setAccessorDescriptor):
- * runtime/PropertyDescriptor.h: Added.
- (JSC::PropertyDescriptor::PropertyDescriptor):
- (JSC::PropertyDescriptor::attributes):
- (JSC::PropertyDescriptor::isValid):
- (JSC::PropertyDescriptor::value):
- * runtime/RegExpConstructor.cpp:
- (JSC::RegExpConstructor::getOwnPropertyDescriptor):
- * runtime/RegExpConstructor.h:
- * runtime/RegExpMatchesArray.h:
- (JSC::RegExpMatchesArray::getOwnPropertyDescriptor):
- * runtime/RegExpObject.cpp:
- (JSC::RegExpObject::getOwnPropertyDescriptor):
- * runtime/RegExpObject.h:
- * runtime/StringObject.cpp:
- (JSC::StringObject::getOwnPropertyDescriptor):
- * runtime/StringObject.h:
- * runtime/StringPrototype.cpp:
- (JSC::StringPrototype::getOwnPropertyDescriptor):
- * runtime/StringPrototype.h:
-
-2009-08-24 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Darin Adler.
-
- How many copies of the parameters do you need?
- https://bugs.webkit.org/show_bug.cgi?id=28701
-
- The function parameters in JSC get copied a lot - and unnecessarily so.
-
- Originally this happened due to duplicating FunctionBodyNodes on recompilation,
- though the problem has been exacerbated by copying the parameters from the
- original function body onto the executable, then back onto the real body that
- will be generated (this happens on every function). And this is all made worse
- since the data structures in question are a little ugly - C style arrays of C++
- objects containing ref counts, so they need a full copy-construct (rather than
- a simple memcpy).
-
- This can all be greatly simplified by just punting the parameters off into
- their own ref-counted object, and forgoing all the copying.
-
- ~no performance change, possible slight progression.
-
- * bytecompiler/BytecodeGenerator.cpp:
- (JSC::BytecodeGenerator::BytecodeGenerator):
- * bytecompiler/BytecodeGenerator.h:
- (JSC::BytecodeGenerator::makeFunction):
- * parser/Nodes.cpp:
- (JSC::FunctionParameters::FunctionParameters):
- (JSC::FunctionBodyNode::FunctionBodyNode):
- (JSC::FunctionBodyNode::finishParsing):
- * parser/Nodes.h:
- (JSC::FunctionBodyNode::parameters):
- (JSC::FunctionBodyNode::parameterCount):
- * runtime/Executable.cpp:
- (JSC::FunctionExecutable::~FunctionExecutable):
- (JSC::FunctionExecutable::compile):
- (JSC::FunctionExecutable::reparseExceptionInfo):
- (JSC::FunctionExecutable::fromGlobalCode):
- (JSC::FunctionExecutable::paramString):
- * runtime/Executable.h:
- (JSC::FunctionExecutable::FunctionExecutable):
- (JSC::FunctionExecutable::parameterCount):
-
-2009-08-25 Brent Fulgham <bfulgham@webkit.org>
-
- Reviewed by NOBODY (Buildfix).
-
- * JavaScriptCore.vcproj/jsc/jsc.vcproj: Add Debug_CFLite target
- that inherits from the debug_wincairo property sheet and therefore
- links to the proper debug library.
- * JavaScriptCore.vcproj/testapi/testapi.vcproj: Add Debug_CFLite target
- that inherits from the debug_wincairo property sheet and therefore
- links to the proper debug library.
-
-2009-08-25 Chris Marrin <cmarrin@apple.com>
-
- Reviewed by Simon Fraser.
-
- Export tryFastMalloc for Canvas3D work
- https://bugs.webkit.org/show_bug.cgi?id=28018
-
- * JavaScriptCore.exp:
-
-2009-08-25 David Levin <levin@chromium.org>
-
- Reviewed by Adam Roben.
-
- PLATFORM(CFNETWORK) should be USE(CFNETWORK).
- https://bugs.webkit.org/show_bug.cgi?id=28713
-
- * wtf/Platform.h: Added a #define to catch this issue in the
- future. The define would generate an error on gcc without the
- space in the expansion, but Visual C++ needs the space to cause an error.
-
-2009-08-24 Brent Fulgham <bfulgham@webkit.org>
-
- Reviewed by Steve Falkenburg.
-
- Revise CFLite Debug build to emit DLL's with _debug label.
- https://bugs.webkit.org/show_bug.cgi?id=28695.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Modify
- Cairo debug build to inherit from new debug_cairo property sheet.
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCFLite.vsprops:
- Modify to look for debug CFLite when in debug build.
-
-2009-08-24 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Adler & Darin Hunt.
-
- https://bugs.webkit.org/show_bug.cgi?id=28691
- Do not retain ScopeNodes outside of parsing
-
- There is now no need for these to exist outside of parsing - their use in the runtime is replaced by Executable types.
-
- * bytecode/EvalCodeCache.h:
- (JSC::EvalCodeCache::get):
- * bytecompiler/BytecodeGenerator.cpp:
- (JSC::BytecodeGenerator::BytecodeGenerator):
- (JSC::BytecodeGenerator::emitNewFunction):
- (JSC::BytecodeGenerator::emitNewFunctionExpression):
- * bytecompiler/BytecodeGenerator.h:
- (JSC::BytecodeGenerator::makeFunction):
- * debugger/Debugger.cpp:
- (JSC::Debugger::recompileAllJSFunctions):
- (JSC::evaluateInGlobalCallFrame):
- * debugger/DebuggerCallFrame.cpp:
- (JSC::DebuggerCallFrame::evaluate):
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::execute):
- (JSC::Interpreter::prepareForRepeatCall):
- (JSC::Interpreter::privateExecute):
- * jit/JITStubs.cpp:
- (JSC::DEFINE_STUB_FUNCTION):
- * parser/Nodes.cpp:
- (JSC::ScopeNodeData::ScopeNodeData):
- (JSC::ProgramNode::create):
- (JSC::EvalNode::create):
- (JSC::FunctionBodyNode::create):
- * parser/Nodes.h:
- (JSC::ScopeNode::adoptData):
- (JSC::FunctionBodyNode::parameterCount):
- * parser/Parser.cpp:
- * parser/Parser.h:
- (JSC::Parser::arena):
- (JSC::Parser::Parser):
- (JSC::Parser::parse):
- * runtime/ArrayPrototype.cpp:
- (JSC::isNumericCompareFunction):
- (JSC::arrayProtoFuncSort):
- * runtime/Completion.cpp:
- (JSC::checkSyntax):
- (JSC::evaluate):
- * runtime/Executable.cpp:
- (JSC::FunctionExecutable::~FunctionExecutable):
- (JSC::EvalExecutable::compile):
- (JSC::ProgramExecutable::checkSyntax):
- (JSC::ProgramExecutable::compile):
- (JSC::FunctionExecutable::compile):
- (JSC::EvalExecutable::generateJITCode):
- (JSC::ProgramExecutable::generateJITCode):
- (JSC::FunctionExecutable::generateJITCode):
- (JSC::FunctionExecutable::reparseExceptionInfo):
- (JSC::EvalExecutable::reparseExceptionInfo):
- (JSC::FunctionExecutable::recompile):
- (JSC::FunctionExecutable::fromGlobalCode):
- (JSC::FunctionExecutable::copyParameters):
- (JSC::FunctionExecutable::paramString):
- * runtime/Executable.h:
- (JSC::ScriptExecutable::ScriptExecutable):
- (JSC::ScriptExecutable::sourceID):
- (JSC::ScriptExecutable::sourceURL):
- (JSC::ScriptExecutable::lineNo):
- (JSC::ScriptExecutable::lastLine):
- (JSC::ScriptExecutable::usesEval):
- (JSC::ScriptExecutable::usesArguments):
- (JSC::ScriptExecutable::needsActivation):
- (JSC::ScriptExecutable::recordParse):
- (JSC::EvalExecutable::bytecode):
- (JSC::EvalExecutable::jitCode):
- (JSC::ProgramExecutable::bytecode):
- (JSC::ProgramExecutable::reparseExceptionInfo):
- (JSC::ProgramExecutable::jitCode):
- (JSC::FunctionExecutable::FunctionExecutable):
- (JSC::FunctionExecutable::make):
- (JSC::FunctionExecutable::bytecode):
- (JSC::FunctionExecutable::isGenerated):
- (JSC::FunctionExecutable::name):
- (JSC::FunctionExecutable::parameterCount):
- (JSC::FunctionExecutable::jitCode):
- * runtime/FunctionConstructor.cpp:
- (JSC::constructFunction):
- * runtime/JSGlobalData.cpp:
- (JSC::JSGlobalData::numericCompareFunction):
- * runtime/JSGlobalObjectFunctions.cpp:
- (JSC::globalFuncEval):
-
-2009-08-24 Darin Adler <darin@apple.com>
-
- * runtime/ObjectPrototype.cpp:
- (JSC::ObjectPrototype::put): Landed revised version I had tested but forgot
- to land. Leave out the branch, since we don't need one.
+ * assembler/MacroAssemblerMIPS.h:
+ (JSC::MacroAssemblerMIPS::branchDouble):
-2009-08-24 Darin Adler <darin@apple.com>
+2010-05-28 Gavin Barraclough <barraclough@apple.com>
Reviewed by Geoff Garen.
- Array index miss case creates a string every time
- https://bugs.webkit.org/show_bug.cgi?id=28664
-
- SunSpider test results I saw:
-
- 0.5% faster overall
- 1% faster on crypto-aes
- 20% faster on crypto-md5
- 13% faster on crypto-sha1
-
- * runtime/ObjectPrototype.cpp:
- (JSC::ObjectPrototype::ObjectPrototype): Initialize m_hasNoPropertiesWithUInt32Names
- to true.
- (JSC::ObjectPrototype::put): Clearly m_hasNoPropertiesWithUInt32Names if the new
- property has a name that is the string form of a UInt32.
- (JSC::ObjectPrototype::getOwnPropertySlot): Don't call JSObject::getOwnPropertySlot
- if m_hasNoPropertiesWithUInt32Names is true, and it is highly likely to be true.
-
- * runtime/ObjectPrototype.h: Added declarations for the above.
-
-2009-08-24 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk>
-
- Unreviewed. Fix a typo in my distcheck build fix.
-
- * GNUmakefile.am:
-
-2009-08-23 Gustavo Noronha Silva <gns@gnome.org>
-
- Unreviewed build fix for make distcheck.
-
- * GNUmakefile.am: Added files required for the build.
-
-2009-08-22 Maciej Stachowiak <mjs@apple.com>
-
- Reviewed by Mark Rowe.
-
- REGRESSION(r47639-r47660): Webkit crashes on launch on PowerPC
- https://bugs.webkit.org/show_bug.cgi?id=28655
-
- * runtime/JSFunction.cpp:
- (JSC::JSFunction::JSFunction): Initialize properly with a VPtrHackExecutable.
- * wtf/Platform.h:
-
-2009-08-22 Darin Adler <darin@apple.com>
-
- Fix storage leak from syntax tree arena allocation patch.
-
- * parser/Nodes.h: CommaNode needs to inherit from ParserArenaDeletable
- because it has a vector.
-
-2009-08-21 Darin Adler <darin@apple.com>
-
- Fix Qt build.
-
- * parser/Nodes.cpp:
- (JSC::ScopeNodeData::ScopeNodeData): Made non-inline again.
- This is used outside Nodes.cpp so can't be inline unless
- it is in the header.
-
-2009-08-21 Darin Adler <darin@apple.com>
-
- Two loose ends from the last commit.
-
- * JavaScriptCore.xcodeproj/project.pbxproj: Made ParserArena.h
- and create_hash_table project-internal instead of "private".
- * runtime/Executable.h: Removed accidentally-added constructor.
-
-2009-08-21 Darin Adler <darin@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- Syntax tree nodes should use arena allocation
- https://bugs.webkit.org/show_bug.cgi?id=25674
-
- Use an actual arena now. 0.6% speedup on SunSpider.
-
- New and improved with 100% less leaking of the universe.
-
- * JavaScriptCore.exp:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
- Removed all exports involving the class FunctionBodyNode, which no
- longer needs to be used outside JavaScriptCore.
-
- * JavaScriptCore.xcodeproj/project.pbxproj: Made Nodes.h and
- Executable.h project-internal instead of "private".
-
- * bytecompiler/BytecodeGenerator.cpp:
- (JSC::BytecodeGenerator::BytecodeGenerator): Updated since VarStack
- contains const Identifier* now.
-
- * parser/Grammar.y: Made identifiers from the lexer be const
- Identifier* and updated since VarStack contains const Identifier* now.
-
- * parser/Lexer.cpp:
- (JSC::Lexer::setCode): Pass in ParserArena, used for identifiers.
- (JSC::Lexer::makeIdentifier): Changed return type to const Identifier*
- and changed to call ParserArena.
- (JSC::Lexer::clear): Removed the code to manage m_identifiers and
- added code to set m_arena to 0.
- * parser/Lexer.h: Updated for changes above.
-
- * parser/NodeConstructors.h:
- (JSC::ParserArenaFreeable::operator new): Added. Calls allocateFreeable
- on the arena.
- (JSC::ParserArenaDeletable::operator new): Changed to call the
- allocateDeletable function on the arena instead of deleteWithArena.
- (JSC::PropertyNode::PropertyNode): Added new constructor that makes
- numeric identifiers. Some day we might want to optimize this for
- integers so it doesn't create a string for each one.
- (JSC::ContinueNode::ContinueNode): Initialize m_ident to nullIdentifier
- since it's now a const Identifier& so it can't be left uninitialized.
- (JSC::BreakNode::BreakNode): Ditto.
- (JSC::CaseClauseNode::CaseClauseNode): Updated to use SourceElements*
- to keep track of the statements rather than a separate statement vector.
- (JSC::BlockNode::BlockNode): Ditto.
- (JSC::ForInNode::ForInNode): Initialize m_ident to nullIdentifier.
-
- * parser/Nodes.cpp: Moved the comment explaining emitBytecode in here.
- It seemed strangely out of place in the header.
- (JSC::ThrowableExpressionData::emitThrowError): Added an overload for
- UString as well as Identifier.
- (JSC::SourceElements::singleStatement): Added.
- (JSC::SourceElements::lastStatement): Added.
- (JSC::RegExpNode::emitBytecode): Changed the throwError code to use
- the substitution mechanism instead of doing a string append.
- (JSC::SourceElements::emitBytecode): Added. Replaces the old
- statementListEmitCode function, since we now keep the SourceElements
- objects around.
- (JSC::BlockNode::lastStatement): Added.
- (JSC::BlockNode::emitBytecode): Changed to use emitBytecode instead of
- statementListEmitCode.
- (JSC::CaseClauseNode::emitBytecode): Added.
- (JSC::CaseBlockNode::emitBytecodeForBlock): Changed to use emitBytecode
- instead of statementListEmitCode.
- (JSC::ScopeNodeData::ScopeNodeData): Changed to store the
- SourceElements* instead of using releaseContentsIntoVector.
- (JSC::ScopeNode::emitStatementsBytecode): Added.
- (JSC::ScopeNode::singleStatement): Added.
- (JSC::ProgramNode::emitBytecode): Call emitStatementsBytecode instead
- of statementListEmitCode.
- (JSC::EvalNode::emitBytecode): Ditto.
- (JSC::FunctionBodyNode::emitBytecode): Call emitStatementsBytecode
- insetad of statementListEmitCode and check for the return node using
- the new functions.
-
- * parser/Nodes.h: Changed VarStack to store const Identifier* instead
- of Identifier and rely on the arena to control lifetime. Added a new
- ParserArenaFreeable class. Made ParserArenaDeletable inherit from
- FastAllocBase instead of having its own operator new. Base the Node
- class on ParserArenaFreeable. Changed the various Node classes
- to use const Identifier& instead of Identifier to avoid the need to
- call their destructors and allow them to function as "freeable" in the
- arena. Removed extraneous JSC_FAST_CALL on definitions of inline functions.
- Changed ElementNode, PropertyNode, ArgumentsNode, ParameterNode,
- CaseClauseNode, ClauseListNode, and CaseBlockNode to use ParserArenaFreeable
- as a base class since they do not descend from Node. Eliminated the
- StatementVector type and instead have various classes use SourceElements*
- instead of StatementVector. This prevents those classes from having to
- use ParserArenaDeletable to make sure the vector destructor is called.
-
- * parser/Parser.cpp:
- (JSC::Parser::parse): Pass the arena to the lexer.
-
- * parser/Parser.h: Added an include of ParserArena.h, which is no longer
- included by Nodes.h.
- (JSC::Parser::parseFunctionFromGlobalCode): Changed to use the
- singleStatement function, since there is no longer any children function.
- Removed some unneeded use of RefPtr.
-
- * parser/ParserArena.cpp:
- (JSC::ParserArena::ParserArena): Added. Initializes the new members,
- m_freeableMemory, m_freeablePoolEnd, and m_identifiers.
- (JSC::ParserArena::freeablePool): Added. Computes the pool pointer,
- since we store only the current pointer and the end of pool pointer.
- (JSC::ParserArena::deallocateObjects): Added. Contains the common
- memory-deallocation logic used by both the destructor and the
- reset function.
- (JSC::ParserArena::~ParserArena): Changed to call deallocateObjects.
- (JSC::ParserArena::reset): Ditto. Also added code to zero out the
- new structures, and switched to use clear() instead of shrink(0) since
- we don't really reuse arenas.
- (JSC::ParserArena::makeNumericIdentifier): Added.
- (JSC::ParserArena::allocateFreeablePool): Added. Used when the pool
- is empty.
- (JSC::ParserArena::isEmpty): Added. No longer inline, which is fine
- since this is used only for assertions at the moment.
- (JSC::ParserArena::derefWithArena): Make non-inline.
-
- * parser/ParserArena.h: Added an actual arena of "freeable" objects,
- ones that don't need destructors to be called. Also added a separate
- IdentifierArena object, a segmented vector of identifiers that used
- to be in the Lexer.
-
- * runtime/Executable.h: Moved the definition of the
- FunctionExecutable::make function here. It can't go in JSFunction.h
- since that header has to be used outside JavaScriptCore and so can't
- include this, which includes Nodes.h. The function could be moved
- elswhere if we don't want to include JSFunction.h in this header, but
- for now this seems to be the best place.
-
- * runtime/JSFunction.h: Removed the include of Executable.h and
- definition of the FunctionExecutable::make function.
-
- * wtf/FastMalloc.cpp: Fixed an incorrect comment.
-
-2009-08-21 Mark Rowe <mrowe@apple.com>
-
- Fix the non-JIT build.
-
- * runtime/Executable.cpp:
- * runtime/Executable.h:
-
-2009-08-21 Gavin Barraclough <barraclough@apple.com>
-
- Speculative QuickTime build fix.
-
- * runtime/JSArray.cpp:
-
-2009-08-21 Gavin Barraclough <barraclough@apple.com>
-
- Speculative QT build fix.
-
- * runtime/StringPrototype.cpp:
-
-2009-08-21 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Restructure Executable types so that host functions do not hold a FunctionExecutable.
- https://bugs.webkit.org/show_bug.cgi?id=28621
-
- All JSFunction objects have a pointer to an Executable*. This is currently always a
- FunctionExecutable, however this has a couple of drawbacks. Host functions do not
- store a range of information that the FunctionExecutable provides (source, name,
- CodeBlock & information presently held on the FunctionBodyNode).
-
- [ * nearly all... see below! ]
-
- Instead, make JSFunctions hold a pointer to an ExecutableBase, move fields specific
- to JS sourced executable types (source, node) into a new subclass (ScriptExecutable),
- and create a new NativeExecutable type. We now provide a new method in JSFunction
- to access & downcast to FunctionExecutable, but in doing so we can make an early
- check (with an ASSERT) to ensure that the Executable read from a function will only
- be treated as a FunctionExecutable (and thus the JS sepcific fields will only be
- accessed) if the JSFunction is not a host function.
-
- There is one JSFunction that currently does not have an Executable, which is the
- object created to allow us to read out the vtable pointer. By making this change
- we can also add a new Executable type fror this object (VPtrHackExecutable).
- Since this means that really all JSFunctions have an Executable we no longer have
- to null-check m_executable before us it - particularly in isHostFunction().
-
- This patch removes CacheableEvalExecutable, since all subclasses of ExecutableBase
- can now be ref-counted - since both JSFunction holds (and ref-counts) an ExecutableBase
- that might be a FunctionExecutable or a NativeExecutable. This does now mean that all
- ProgramExecutables and EvalExecutables (unnecessarily) provide an interface to be
- ref-counted, however this seems less-bad than host functions unnecessarily providing
- interface to access non-host specific information.
-
- The class hierarcy has changed from this:
-
- - ExecutableBase
- - ProgramExecutable
- - EvalExecutable
- - CacheableEvalExecutable (also RefCounted by multiple-inheritance)
- - FunctionExecutable (also RefCounted by multiple-inheritance, 'special' FunctionExecutable also used for host functions)
-
- To this:
-
- - RefCounted
- - ExecutableBase
- - NativeExecutable
- - VPtrHackExecutable
- - ScriptExecutable
- - ProgramExecutable
- - EvalExecutable
- - FunctionExecutable
-
- This patch speeds up sunspidey by a couple of ms (presumably due to the changes to isHostFunction()).
-
- * bytecode/CodeBlock.cpp:
- (JSC::CodeBlock::CodeBlock):
- * bytecode/CodeBlock.h:
- (JSC::CodeBlock::ownerExecutable):
- (JSC::GlobalCodeBlock::GlobalCodeBlock):
- * bytecode/EvalCodeCache.h:
- (JSC::EvalCodeCache::get):
- * debugger/Debugger.cpp:
- (JSC::Debugger::recompileAllJSFunctions):
- * interpreter/CachedCall.h:
- (JSC::CachedCall::CachedCall):
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::callEval):
- (JSC::Interpreter::privateExecute):
- * jit/JITStubs.cpp:
- (JSC::DEFINE_STUB_FUNCTION):
- * profiler/Profiler.cpp:
- (JSC::createCallIdentifierFromFunctionImp):
- * runtime/Arguments.h:
- (JSC::Arguments::getArgumentsData):
- (JSC::Arguments::Arguments):
- * runtime/Executable.cpp:
- (JSC::NativeExecutable::~NativeExecutable):
- (JSC::VPtrHackExecutable::~VPtrHackExecutable):
- * runtime/Executable.h:
- (JSC::ExecutableBase::ExecutableBase):
- (JSC::ExecutableBase::~ExecutableBase):
- (JSC::ExecutableBase::isHostFunction):
- (JSC::NativeExecutable::NativeExecutable):
- (JSC::VPtrHackExecutable::VPtrHackExecutable):
- (JSC::ScriptExecutable::ScriptExecutable):
- (JSC::ScriptExecutable::source):
- (JSC::ScriptExecutable::sourceID):
- (JSC::ScriptExecutable::sourceURL):
- (JSC::ScriptExecutable::lineNo):
- (JSC::ScriptExecutable::lastLine):
- (JSC::ScriptExecutable::usesEval):
- (JSC::ScriptExecutable::usesArguments):
- (JSC::ScriptExecutable::needsActivation):
- (JSC::EvalExecutable::EvalExecutable):
- (JSC::EvalExecutable::create):
- (JSC::ProgramExecutable::ProgramExecutable):
- (JSC::FunctionExecutable::FunctionExecutable):
- * runtime/FunctionPrototype.cpp:
- (JSC::functionProtoFuncToString):
- * runtime/JSFunction.cpp:
- (JSC::JSFunction::JSFunction):
- (JSC::JSFunction::~JSFunction):
- (JSC::JSFunction::markChildren):
- (JSC::JSFunction::getCallData):
- (JSC::JSFunction::call):
- (JSC::JSFunction::lengthGetter):
- (JSC::JSFunction::getConstructData):
- (JSC::JSFunction::construct):
- * runtime/JSFunction.h:
- (JSC::JSFunction::executable):
- (JSC::JSFunction::jsExecutable):
- (JSC::JSFunction::isHostFunction):
-
-2009-08-20 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Maciej Stachowiak.
-
- Browser hangs on opening Web Inspector.
- https://bugs.webkit.org/show_bug.cgi?id=28438
-
- Code generation needs to be able to walk the entire scopechain in some
- cases, however the symbol table used by activations was a member of the
- codeblock. Following recompilation this may no longer exist, leading
- to a crash or hang on lookup.
-
- We fix this by introducing a refcounted SymbolTable subclass, SharedSymbolTable,
- for the CodeBlocks used by function code. This allows activations to
- maintain ownership of a copy of the symbol table even after recompilation so
- they can continue to work.
-
- * bytecode/CodeBlock.cpp:
- (JSC::CodeBlock::CodeBlock):
- * bytecode/CodeBlock.h:
- (JSC::CodeBlock::symbolTable):
- (JSC::CodeBlock::sharedSymbolTable):
- (JSC::GlobalCodeBlock::GlobalCodeBlock):
- (JSC::FunctionCodeBlock::FunctionCodeBlock):
- (JSC::FunctionCodeBlock::~FunctionCodeBlock):
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::retrieveArguments):
- * runtime/Executable.cpp:
- (JSC::EvalExecutable::generateBytecode):
- (JSC::FunctionExecutable::generateBytecode):
- (JSC::FunctionExecutable::reparseExceptionInfo):
- (JSC::EvalExecutable::reparseExceptionInfo):
- * runtime/JSActivation.h:
- (JSC::JSActivation::JSActivationData::JSActivationData):
- (JSC::JSActivation::JSActivationData::~JSActivationData):
- * runtime/SymbolTable.h:
+ Move jit compilation from linking thunks into cti_vm_lazyLink methods.
-2009-08-20 Xan Lopez <xlopez@igalia.com>
-
- Add new file to GTK+ build.
-
- * GNUmakefile.am:
-
-2009-08-20 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Maciej Stachowiak.
-
- Added a number => string cache.
-
- 1.07x faster on v8 (1.7x faster on v8-splay).
- 1.004x faster on SunSpider.
-
- * runtime/JSCell.h: Moved JSValue::toString to JSString.h.
- * runtime/JSGlobalData.h: Holds the cache.
- * runtime/JSNumberCell.cpp:
- (JSC::JSNumberCell::toString):
- (JSC::JSNumberCell::toThisString): Removed -0 special case.
- UString handles this now, since too many clients were
- special-casing it.
-
- * runtime/JSString.h:
- (JSC::JSValue::toString): Use the cache when converting
- an int or double to string.
-
- * runtime/Operations.h:
- (JSC::concatenateStrings): Call toString to take advantage
- of the cache.
-
- * runtime/SmallStrings.h:
- (JSC::NumericStrings::add):
- (JSC::NumericStrings::lookup): The cache.
-
- * runtime/UString.cpp:
- (JSC::UString::from): Added -0 special case mentioned above.
- Removed appendNumeric because it's mutually exclusive with the
- cache.
-
-2009-08-20 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- REGRESSION: fast/profiler/call.html is crashing occasionally
- https://bugs.webkit.org/show_bug.cgi?id=28476
-
- Using the codeblock for information about how many parameters and
- locals a function has is unsafe in certain circumstances. The
- basic scenario is all function code being cleared in response to
- the debugger or profiler being enabled, and then an activation is
- marked before its associated function is re-executed.
-
- To deal with this scenario we store the variable count of a function
- directly in the FunctionExecutable, and then use that information.
-
- * runtime/Arguments.h:
- (JSC::Arguments::getArgumentsData):
- * runtime/Executable.cpp:
- (JSC::FunctionExecutable::generateBytecode):
- * runtime/Executable.h:
- (JSC::FunctionExecutable::FunctionExecutable):
- (JSC::FunctionExecutable::variableCount):
- * runtime/JSActivation.cpp:
- (JSC::JSActivation::markChildren):
-
-2009-08-20 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Numbering of arguments to emitGetJITStubArg/emitPutJITStubArg incorrect
- <bug lost in the great bug disasteroony of 08/20/09!>
-
- The argumentNumber argument to emitGetJITStubArg/emitPutJITStubArg should match
- the argument number used within the stub functions in JITStubs.cpp, but it doesn't.
-
- Firstly, all the numbers changed when we added a void* 'reserved' as the first slot
- (rather than leaving argument 0 unused), and secondly in 32_64 builds the index to
- peek/poke needs to be multiplies by 2 (since the argument to peek/poke is a number
- of machine words, and on 32_64 build the argument slots to stub functions are two
- words wide).
-
- * jit/JIT.h:
- * jit/JITCall.cpp:
- (JSC::JIT::compileOpCallSetupArgs):
- (JSC::JIT::compileOpConstructSetupArgs):
- (JSC::JIT::compileOpCallVarargsSetupArgs):
- (JSC::JIT::compileOpCall):
- * jit/JITInlineMethods.h:
- (JSC::JIT::emitPutJITStubArg):
- (JSC::JIT::emitPutJITStubArgConstant):
- (JSC::JIT::emitGetJITStubArg):
- (JSC::JIT::emitPutJITStubArgFromVirtualRegister):
* jit/JITOpcodes.cpp:
(JSC::JIT::privateCompileCTIMachineTrampolines):
- * jit/JITPropertyAccess.cpp:
- (JSC::JIT::privateCompilePutByIdTransition):
-
-2009-08-20 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Geoff Garen.
-
- REGRESSION: significant slowdown on Celtic Kane "AJAX declaration" subtest
- https://bugs.webkit.org/show_bug.cgi?id=28332
-
- Follow up style fixes that were missed in review.
-
- * runtime/Structure.cpp:
- (JSC::Structure::hasTransition):
- * runtime/Structure.h:
- (JSC::Structure::get):
- (JSC::StructureTransitionTable::contains):
- * runtime/StructureTransitionTable.h:
- (JSC::StructureTransitionTable::add):
-
-2009-08-20 Oliver Hunt <oliver@apple.com>
-
- Add new exports to windows jsc build
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
-
-2009-08-20 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- REGRESSION: significant slowdown on Celtic Kane "AJAX declaration" subtest
- https://bugs.webkit.org/show_bug.cgi?id=28332
-
- The method check optimisation made transitions aware of the value being
- assigned when a transition was assigning a function. This had the side
- effect of making every assignment of a function expression result in a
- new transition, and thus a new Structure. The net result of this is that
- the common JS idiom of
-
- function MyObject() {
- this.myFunction = function(...){...};
- }
- new MyObject();
-
- Will produce a unique structure on every iteration, meaning that all
- caching is defeated and there is a significant amount of structure churn.
-
- The fix is to return the transition to its original form where it is
- keyed off a property name + attributes tuple, but have each transition
- support an optional transition on a specific value.
-
- * JavaScriptCore.exp:
- * runtime/JSObject.h:
- (JSC::JSObject::putDirectInternal):
- * runtime/Structure.cpp:
- (JSC::Structure::~Structure):
- (JSC::Structure::addPropertyTransitionToExistingStructure):
- (JSC::Structure::addPropertyTransition):
- (JSC::Structure::hasTransition):
- * runtime/Structure.h:
- (JSC::Structure::transitionedFor):
- (JSC::Structure::hasTransition):
- (JSC::Structure::):
- (JSC::StructureTransitionTable::contains):
- (JSC::StructureTransitionTable::get):
- * runtime/StructureTransitionTable.h:
- (JSC::StructureTransitionTableHashTraits::emptyValue):
- (JSC::StructureTransitionTable::hasTransition):
- (JSC::StructureTransitionTable::remove):
- (JSC::StructureTransitionTable::add):
-
-2009-08-20 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Remove FunctionCodeBlock.
- https://bugs.webkit.org/show_bug.cgi?id=28502
-
- These only exist to allow JIT code to dereference properties off the
- CodeBlock for any callee, regardless of whether it is a host function.
-
- Instead just use the FunctionExecutable. Copy the m_parameters field
- from the CodeBlock into the Executable, and use this to distinguish
- between host functions, functions that have been bytecompiled, and
- functions that have not.
-
- m_parameters is moved to ExecutableBase rather than FunctionExecutable
- so that (as a separate change) we can move make a separate class of
- executable for host code, which is not devived from FunctionExecutable
- (host code does not feature any of the properties that normal executable
- do and will provide, such as source, attributes, and a parsed name).
-
- 1% win on v8 tests, 0.5% on sunspider.
-
- * bytecode/CodeBlock.cpp:
- (JSC::CodeBlock::derefStructures):
- (JSC::CodeBlock::refStructures):
- (JSC::CodeBlock::reparseForExceptionInfoIfNecessary):
- (JSC::CodeBlock::handlerForBytecodeOffset):
- (JSC::CodeBlock::lineNumberForBytecodeOffset):
- (JSC::CodeBlock::expressionRangeForBytecodeOffset):
- (JSC::CodeBlock::getByIdExceptionInfoForBytecodeOffset):
- (JSC::CodeBlock::functionRegisterForBytecodeOffset):
- (JSC::CodeBlock::hasGlobalResolveInstructionAtBytecodeOffset):
- (JSC::CodeBlock::hasGlobalResolveInfoAtBytecodeOffset):
- * bytecode/CodeBlock.h:
- (JSC::):
- (JSC::CodeBlock::source):
- (JSC::CodeBlock::sourceOffset):
- (JSC::CodeBlock::evalCodeCache):
- (JSC::CodeBlock::createRareDataIfNecessary):
-
- remove NativeCodeBlocks and the NativeCode code type.
-
- * jit/JIT.cpp:
- (JSC::JIT::linkCall):
-
- Revert to previous behaviour (as currently still commented!) that Hhost functions have a null codeblock.
-
- * jit/JITCall.cpp:
- (JSC::JIT::compileOpCallInitializeCallFrame):
- (JSC::JIT::compileOpCallSetupArgs):
- (JSC::JIT::compileOpCallVarargsSetupArgs):
- (JSC::JIT::compileOpConstructSetupArgs):
- (JSC::JIT::compileOpCallVarargs):
- (JSC::JIT::compileOpCall):
- (JSC::JIT::compileOpCallSlowCase):
-
- Bring the 32_64 & non-32_64 JITs into line with each other, callee in regT0.
-
- * jit/JITOpcodes.cpp:
+ * jit/JITOpcodes32_64.cpp:
(JSC::JIT::privateCompileCTIMachineTrampolines):
-
- Rewrite call trampolines to not use the CodeBlock.
-
* jit/JITStubs.cpp:
(JSC::DEFINE_STUB_FUNCTION):
- Make call_JSFunction & call_arityCheck return the callee, don't expect to be passed the CodeBlock.
-
- * runtime/Executable.cpp:
- (JSC::FunctionExecutable::generateBytecode):
- (JSC::FunctionExecutable::recompile):
- (JSC::FunctionExecutable::FunctionExecutable):
- * runtime/Executable.h:
- (JSC::ExecutableBase::):
- (JSC::ExecutableBase::ExecutableBase):
- (JSC::FunctionExecutable::isHostFunction):
-
- Add m_numParameters.
-
- * runtime/JSFunction.cpp:
- (JSC::JSFunction::~JSFunction):
-
- Only call generatedBytecode() on JSFunctions non-host FunctionExecutables.
-
-2009-08-20 Yongjun Zhang <yongjun.zhang@nokia.com>
-
- Reviewed by Eric Seidel.
-
- https://bugs.webkit.org/show_bug.cgi?id=28054
-
- Use a helper function to work around winscw compiler forward declaration bug
- regarding templated classes.
-
- Add parenthesis around (PassRefPtr::*UnspecifiedBoolType) to make winscw compiler
- work with the default UnSpecifiedBoolType() operator, which removes the winscw
- specific bool cast hack.
-
- * wtf/PassRefPtr.h:
- (WTF::derefIfNotNull):
- (WTF::PassRefPtr::~PassRefPtr):
-
-2009-08-19 Yong Li <yong.li@torchmobile.com>
-
- Reviewed by Gavin Barraclough.
-
- Change namespace ARM to ARMRegisters
- X86 to X86Registers to avoid conflict with macros
- https://bugs.webkit.org/show_bug.cgi?id=28428
-
- * assembler/ARMAssembler.cpp:
- * assembler/ARMAssembler.h:
- * assembler/ARMv7Assembler.h:
- * assembler/MacroAssemblerARM.h:
- * assembler/MacroAssemblerARMv7.h:
- * assembler/MacroAssemblerX86Common.h:
- * assembler/MacroAssemblerX86_64.h:
- * assembler/X86Assembler.h:
- * jit/JIT.h:
- * jit/JITArithmetic.cpp:
- * jit/JITInlineMethods.h:
- * jit/JITOpcodes.cpp:
- * wrec/WRECGenerator.cpp:
- * wrec/WRECGenerator.h:
- * yarr/RegexJIT.cpp:
-
-2009-08-19 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- Devirtualise marking
- https://bugs.webkit.org/show_bug.cgi?id=28294
-
- We actually need to mark the value in a number object if we're using the
- 32bit number representation.
-
- * runtime/NumberObject.h:
- (JSC::NumberObject::createStructure):
-
-2009-08-19 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Darin Adler.
-
- We probably shouldn't be keeping the AST for eval nodes around forevar.
- https://bugs.webkit.org/show_bug.cgi?id=28469
-
- EvalNodes don't destroyData() (delete their parser data) since they need to hold onto
- their varStack. Copy a list of variable onto EvalCodeBlock, and this can go away.
-
- * bytecode/CodeBlock.h:
- (JSC::EvalCodeBlock::variable):
- (JSC::EvalCodeBlock::numVariables):
- (JSC::EvalCodeBlock::adoptVariables):
- * bytecompiler/BytecodeGenerator.cpp:
- (JSC::BytecodeGenerator::BytecodeGenerator):
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::execute):
- * parser/Nodes.h:
- * runtime/Executable.cpp:
- (JSC::EvalExecutable::generateBytecode):
- * runtime/Executable.h:
-
-2009-08-19 Jungshik Shin <jshin@chromium.org>
-
- Reviewed by Darin Adler.
-
- http://bugs.webkit.org/show_bug.cgi?id=28441
-
- Fix a build issue with ICU 4.2 or later on Windows with Visual C++.
- Instead of defining all isXXX and toupper/tolower as
- WTF_Please_use_ASCIICType_instead_of_ctype_see_comment_in_ASCIICType_h,
- #define them to be different by prepending 'WTF_...ASCIIType_h' with
- the originial names like 'toupper_WTF_...ASCIIType_h'.
-
- * wtf/DisallowCType.h:
-
-2009-08-18 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- Assigning a function to an object should always use the existing transition, even if the transition is not specialized
- https://bugs.webkit.org/show_bug.cgi?id=28442
-
- Check for an unspecialized transition as an alternative to always failing if specialisation does not match.
-
- * runtime/Structure.cpp:
- (JSC::Structure::addPropertyTransitionToExistingStructure):
-
-2009-08-18 Dirk Schulze <krit@webkit.org>
-
- Reviewed by Oliver Hunt.
-
- Added additional getter to ByteArray with an unsigned char as return.
- ByteArray can take unsigned char directly now.
-
- * wtf/ByteArray.h:
- (WTF::ByteArray::set):
- (WTF::ByteArray::get):
-
-2009-08-18 Peter Kasting <pkasting@google.com>
-
- Reviewed by Eric Seidel.
-
- https://bugs.webkit.org/show_bug.cgi?id=28415
- Set svn:eol-style CRLF on all .sln and .vcproj files that don't already
- have it.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj:
- * JavaScriptCore.vcproj/testapi/testapi.vcproj:
-
-2009-08-18 Xan Lopez <xlopez@igalia.com>
-
- Try to fix the GTK+ build.
-
- * GNUmakefile.am:
-
-2009-08-17 Gavin Barraclough <barraclough@apple.com>
+2010-05-28 Gavin Barraclough <barraclough@apple.com>
Reviewed by Sam Weinig.
- No, silly runtime, AST nodes are not for you.
-
- We still use AST nodes (ScopeNodes, particularly FunctionBodyNodes) within
- the runtime, which means that these nodes must be persisted outside of the
- arena, contain both parser & runtime data, etc. This is all a bit of a mess.
-
- Move functionality into a new FunctionExecutable class.
-
- * API/JSCallbackFunction.cpp:
- * API/JSObjectRef.cpp:
- * JavaScriptCore.exp:
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * bytecode/CodeBlock.cpp:
- (JSC::CodeBlock::CodeBlock):
- (JSC::CodeBlock::markAggregate):
- (JSC::CodeBlock::reparseForExceptionInfoIfNecessary):
- (JSC::CodeBlock::lineNumberForBytecodeOffset):
- (JSC::CodeBlock::shrinkToFit):
- * bytecode/CodeBlock.h:
- (JSC::CodeBlock::getBytecodeIndex):
- (JSC::CodeBlock::discardBytecode):
- (JSC::CodeBlock::instructionCount):
- (JSC::CodeBlock::getJITCode):
- (JSC::CodeBlock::executablePool):
- (JSC::CodeBlock::ownerExecutable):
- (JSC::CodeBlock::extractExceptionInfo):
- (JSC::CodeBlock::addFunctionDecl):
- (JSC::CodeBlock::functionDecl):
- (JSC::CodeBlock::numberOfFunctionDecls):
- (JSC::CodeBlock::addFunctionExpr):
- (JSC::CodeBlock::functionExpr):
- (JSC::GlobalCodeBlock::GlobalCodeBlock):
- (JSC::ProgramCodeBlock::ProgramCodeBlock):
- (JSC::EvalCodeBlock::EvalCodeBlock):
- (JSC::FunctionCodeBlock::FunctionCodeBlock):
- (JSC::NativeCodeBlock::NativeCodeBlock):
- * bytecode/EvalCodeCache.h:
- * bytecode/SamplingTool.cpp:
- (JSC::SamplingTool::doRun):
- * bytecompiler/BytecodeGenerator.cpp:
- (JSC::BytecodeGenerator::BytecodeGenerator):
- (JSC::BytecodeGenerator::emitNewFunction):
- (JSC::BytecodeGenerator::emitNewFunctionExpression):
- * bytecompiler/BytecodeGenerator.h:
- * debugger/Debugger.cpp:
- (JSC::Debugger::recompileAllJSFunctions):
- * interpreter/CachedCall.h:
- (JSC::CachedCall::CachedCall):
- * interpreter/CallFrameClosure.h:
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::unwindCallFrame):
- (JSC::Interpreter::throwException):
- (JSC::Interpreter::execute):
- (JSC::Interpreter::prepareForRepeatCall):
- (JSC::Interpreter::debug):
- (JSC::Interpreter::privateExecute):
- (JSC::Interpreter::retrieveLastCaller):
- * interpreter/Interpreter.h:
+ Bug 39898 - Move arity check into callee.
+
+ We can reduce the size of the virtual call trampolines by moving the arity check
+ into the callee functions. As a following step we will be able to remove the
+ check for native function / codeblocks by performing translation in a lazy stub.
+
+ * interpreter/CallFrame.h:
+ (JSC::ExecState::init):
+ (JSC::ExecState::setReturnPC):
* jit/JIT.cpp:
(JSC::JIT::privateCompile):
+ (JSC::JIT::linkCall):
+ (JSC::JIT::linkConstruct):
* jit/JIT.h:
(JSC::JIT::compile):
* jit/JITOpcodes.cpp:
(JSC::JIT::privateCompileCTIMachineTrampolines):
- (JSC::JIT::emit_op_new_func):
- (JSC::JIT::emit_op_new_func_exp):
+ * jit/JITOpcodes32_64.cpp:
+ (JSC::JIT::privateCompileCTIMachineTrampolines):
* jit/JITStubs.cpp:
(JSC::DEFINE_STUB_FUNCTION):
- * jit/JITStubs.h:
- (JSC::):
- * parser/Nodes.cpp:
- (JSC::FunctionBodyNode::reparseDataIfNecessary):
- * parser/Nodes.h:
- (JSC::EvalNode::partialDestroyData):
- * parser/Parser.h:
- * profiler/ProfileGenerator.cpp:
- * profiler/Profiler.cpp:
- (JSC::Profiler::createCallIdentifier):
- (JSC::createCallIdentifierFromFunctionImp):
- * runtime/Arguments.h:
- (JSC::Arguments::getArgumentsData):
- (JSC::Arguments::Arguments):
- (JSC::JSActivation::copyRegisters):
- * runtime/ArrayPrototype.cpp:
- (JSC::isNumericCompareFunction):
- * runtime/CallData.h:
- (JSC::):
- * runtime/Collector.cpp:
- (JSC::Heap::collect):
- * runtime/ConstructData.h:
- (JSC::):
- * runtime/ExceptionHelpers.cpp:
- (JSC::createUndefinedVariableError):
- (JSC::createInvalidParamError):
- (JSC::createNotAConstructorError):
- (JSC::createNotAFunctionError):
- (JSC::createNotAnObjectError):
- * runtime/Executable.cpp: Added.
- (JSC::EvalExecutable::generateBytecode):
- (JSC::ProgramExecutable::generateBytecode):
- (JSC::FunctionExecutable::generateBytecode):
- (JSC::EvalExecutable::generateJITCode):
- (JSC::ProgramExecutable::generateJITCode):
- (JSC::FunctionExecutable::generateJITCode):
- (JSC::FunctionExecutable::isHostFunction):
- (JSC::FunctionExecutable::markAggregate):
+ * runtime/Executable.cpp:
+ (JSC::FunctionExecutable::generateJITCodeForCall):
+ (JSC::FunctionExecutable::generateJITCodeForConstruct):
(JSC::FunctionExecutable::reparseExceptionInfo):
- (JSC::EvalExecutable::reparseExceptionInfo):
- (JSC::FunctionExecutable::recompile):
- (JSC::FunctionExecutable::FunctionExecutable):
* runtime/Executable.h:
- (JSC::ExecutableBase::~ExecutableBase):
- (JSC::ExecutableBase::ExecutableBase):
- (JSC::ExecutableBase::source):
- (JSC::ExecutableBase::sourceID):
- (JSC::ExecutableBase::lastLine):
- (JSC::ExecutableBase::usesEval):
- (JSC::ExecutableBase::usesArguments):
- (JSC::ExecutableBase::needsActivation):
- (JSC::ExecutableBase::astNode):
- (JSC::ExecutableBase::generatedJITCode):
- (JSC::ExecutableBase::getExecutablePool):
- (JSC::EvalExecutable::EvalExecutable):
- (JSC::EvalExecutable::bytecode):
- (JSC::EvalExecutable::varStack):
- (JSC::EvalExecutable::evalNode):
- (JSC::EvalExecutable::jitCode):
- (JSC::ProgramExecutable::ProgramExecutable):
- (JSC::ProgramExecutable::reparseExceptionInfo):
- (JSC::ProgramExecutable::bytecode):
- (JSC::ProgramExecutable::programNode):
- (JSC::ProgramExecutable::jitCode):
- (JSC::FunctionExecutable::FunctionExecutable):
- (JSC::FunctionExecutable::name):
- (JSC::FunctionExecutable::bytecode):
- (JSC::FunctionExecutable::generatedBytecode):
- (JSC::FunctionExecutable::usesEval):
- (JSC::FunctionExecutable::usesArguments):
- (JSC::FunctionExecutable::parameterCount):
- (JSC::FunctionExecutable::paramString):
- (JSC::FunctionExecutable::isGenerated):
- (JSC::FunctionExecutable::body):
- (JSC::FunctionExecutable::jitCode):
- (JSC::FunctionExecutable::createNativeThunk):
- * runtime/FunctionConstructor.cpp:
- (JSC::constructFunction):
- * runtime/FunctionPrototype.cpp:
- (JSC::functionProtoFuncToString):
- * runtime/JSActivation.cpp:
- (JSC::JSActivation::JSActivation):
- (JSC::JSActivation::markChildren):
- (JSC::JSActivation::isDynamicScope):
- (JSC::JSActivation::argumentsGetter):
- * runtime/JSActivation.h:
- (JSC::JSActivation::JSActivationData::JSActivationData):
- * runtime/JSFunction.cpp:
- (JSC::JSFunction::isHostFunction):
- (JSC::JSFunction::JSFunction):
- (JSC::JSFunction::~JSFunction):
- (JSC::JSFunction::markChildren):
- (JSC::JSFunction::getCallData):
- (JSC::JSFunction::call):
- (JSC::JSFunction::lengthGetter):
- (JSC::JSFunction::getConstructData):
- (JSC::JSFunction::construct):
- * runtime/JSFunction.h:
- (JSC::JSFunction::executable):
- (JSC::FunctionExecutable::make):
- * runtime/JSGlobalData.cpp:
- (JSC::JSGlobalData::JSGlobalData):
- (JSC::JSGlobalData::numericCompareFunction):
- * runtime/JSGlobalData.h:
+ (JSC::NativeExecutable::NativeExecutable):
+ (JSC::FunctionExecutable::generatedJITCodeForCallWithArityCheck):
+ (JSC::FunctionExecutable::generatedJITCodeForConstructWithArityCheck):
-2009-08-17 Mark Rowe <mrowe@apple.com>
+2010-05-27 Luiz Agostini <luiz.agostini@openbossa.org>
Reviewed by Darin Adler.
- Fix 300,000+ leaks seen during the regression tests.
-
- EvalCodeCache::get was heap-allocating an EvalExecutable instance without adopting the initial reference.
- While fixing this we noticed that EvalExecutable was a RefCounted type that was sometimes stack allocated.
- To make this cleaner and to prevent clients from attempting to ref a stack-allocated instance, we move the
- refcounting down to a new CacheableEvalExecutable class that derives from EvalExecutable. EvalCodeCache::get
- now uses CacheableEvalExecutable::create and avoids the leak.
-
- * bytecode/EvalCodeCache.h:
- (JSC::EvalCodeCache::get):
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::callEval):
- * runtime/Executable.h:
- (JSC::CacheableEvalExecutable::create):
- (JSC::CacheableEvalExecutable::CacheableEvalExecutable):
-
-2009-08-17 Oliver Hunt <oliver@apple.com>
-
- RS=Mark Rowe.
-
- REGRESSION (r47292): Prototype.js is broken by ES5 Arguments changes
- https://bugs.webkit.org/show_bug.cgi?id=28341
- <rdar://problem/7145615>
-
- Reverting r47292. Alas Prototype.js breaks with Arguments inheriting
- from Array as ES5 attempted. Prototype.js defines $A in terms of a
- function it places on (among other global objects) the Array prototype,
- thus breaking $A for arrays.
-
- * runtime/Arguments.h:
- (JSC::Arguments::Arguments):
- * runtime/JSGlobalObject.cpp:
- (JSC::JSGlobalObject::reset):
- (JSC::JSGlobalObject::markChildren):
- * runtime/JSGlobalObject.h:
- (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
- * runtime/ObjectPrototype.cpp:
- (JSC::ObjectPrototype::ObjectPrototype):
- * runtime/ObjectPrototype.h:
- * tests/mozilla/ecma_3/Function/arguments-001.js:
-
-2009-08-17 Peter Kasting <pkasting@google.com>
-
- Reviewed by Steve Falkenburg.
-
- https://bugs.webkit.org/show_bug.cgi?id=27323
- Only add Cygwin to the path when it isn't already there. This avoids
- causing problems for people who purposefully have non-Cygwin versions of
- executables like svn in front of the Cygwin ones in their paths.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj:
- * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops:
- * JavaScriptCore.vcproj/jsc/jscCommon.vsprops:
- * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops:
-
-2009-08-17 Xan Lopez <xlopez@igalia.com>
-
- Reviewed by Mark Rowe.
-
- Fix build with FAST_MALLOC_MATCH_VALIDATION enabled.
-
- * wtf/FastMalloc.cpp:
- (WTF::fastMalloc):
- (WTF::fastCalloc):
- (WTF::fastRealloc):
-
-2009-08-16 Holger Hans Peter Freyther <zecke@selfish.org>
-
- Reviewed by Mark Rowe.
-
- Fix crash on ./ecma_2/RegExp/exec-002.js.
- https://bugs.webkit.org/show_bug.cgi?id=28353
-
- Change the order of freeParenthesesDisjunctionContext and
- popParenthesesDisjunctionContext on all call sites as the pop
- method is accessing backTrack->lastContext which is the context
- that is about to be freed.
-
- * yarr/RegexInterpreter.cpp:
- (JSC::Yarr::Interpreter::parenthesesDoBacktrack):
- (JSC::Yarr::Interpreter::backtrackParentheses):
-
-2009-08-16 Holger Hans Peter Freyther <zecke@selfish.org>
-
- Reviewed by Mark Rowe.
-
- https://bugs.webkit.org/show_bug.cgi?id=28352
-
- Fix coding style violations. Use m_ for C++ class members. Remove
- trailing whitespace on empty lines.
-
- * yarr/RegexInterpreter.cpp:
- (JSC::Yarr::Interpreter::ParenthesesDisjunctionContext::ParenthesesDisjunctionContext):
- (JSC::Yarr::Interpreter::tryConsumeCharacter):
- (JSC::Yarr::Interpreter::tryConsumeBackReference):
- (JSC::Yarr::Interpreter::parenthesesDoBacktrack):
- (JSC::Yarr::Interpreter::backtrackParentheses):
- (JSC::Yarr::ByteCompiler::ByteCompiler):
- (JSC::Yarr::ByteCompiler::compile):
- (JSC::Yarr::ByteCompiler::checkInput):
- (JSC::Yarr::ByteCompiler::assertionBOL):
- (JSC::Yarr::ByteCompiler::assertionEOL):
- (JSC::Yarr::ByteCompiler::assertionWordBoundary):
- (JSC::Yarr::ByteCompiler::atomPatternCharacter):
- (JSC::Yarr::ByteCompiler::atomCharacterClass):
- (JSC::Yarr::ByteCompiler::atomBackReference):
- (JSC::Yarr::ByteCompiler::atomParenthesesSubpatternBegin):
- (JSC::Yarr::ByteCompiler::atomParentheticalAssertionBegin):
- (JSC::Yarr::ByteCompiler::popParenthesesStack):
- (JSC::Yarr::ByteCompiler::closeAlternative):
- (JSC::Yarr::ByteCompiler::closeBodyAlternative):
- (JSC::Yarr::ByteCompiler::atomParenthesesEnd):
- (JSC::Yarr::ByteCompiler::regexBegin):
- (JSC::Yarr::ByteCompiler::alterantiveBodyDisjunction):
- (JSC::Yarr::ByteCompiler::alterantiveDisjunction):
- (JSC::Yarr::ByteCompiler::emitDisjunction):
-
-2009-08-15 Mark Rowe <mrowe@apple.com>
-
- Fix the build with JIT disabled.
-
- * runtime/Arguments.h: Only compile the jitCode method when the JIT is enabled.
- * runtime/Executable.h: Include PrototypeFunction.h so the compiler knows what
- NativeFunctionWrapper is when the JIT is disabled.
-
-2009-08-15 Adam Bergkvist <adam.bergkvist@ericsson.com>
-
- Reviewed by Sam Weinig.
-
- Added ENABLE_EVENTSOURCE flag.
- https://bugs.webkit.org/show_bug.cgi?id=14997
-
- * Configurations/FeatureDefines.xcconfig:
-
-2009-08-14 Gavin Barraclough <barraclough@apple.com>
-
- * parser/Parser.h:
- (JSC::EvalExecutable::parse):
- (JSC::ProgramExecutable::parse):
- * runtime/Executable.h:
-
-2009-08-14 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Remove AST nodes from use within the Runtime (outside of parsing), stage 1
- https://bugs.webkit.org/show_bug.cgi?id=28330
-
- Remove the EvalNode and ProgramNode from use in the runtime. They still exist
- after this patch, but are hidden behind EvalExecutable and FunctionExecutable,
- and are also still reachable behind CodeBlock::m_ownerNode.
-
- The next step will be to beat back FunctionBodyNode in the same fashion.
- Then remove the usage via CodeBlock, then only construct these nodes only on
- demand during bytecode generation.
-
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * bytecode/CodeBlock.h:
- (JSC::GlobalCodeBlock::GlobalCodeBlock):
- (JSC::GlobalCodeBlock::~GlobalCodeBlock):
- (JSC::ProgramCodeBlock::ProgramCodeBlock):
- (JSC::EvalCodeBlock::EvalCodeBlock):
- (JSC::FunctionCodeBlock::FunctionCodeBlock):
- (JSC::NativeCodeBlock::NativeCodeBlock):
- * bytecode/EvalCodeCache.h:
- (JSC::EvalCodeCache::get):
- * debugger/Debugger.cpp:
- (JSC::evaluateInGlobalCallFrame):
- * debugger/DebuggerCallFrame.cpp:
- (JSC::DebuggerCallFrame::evaluate):
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::callEval):
- (JSC::Interpreter::execute):
- * interpreter/Interpreter.h:
- * parser/Nodes.cpp:
- (JSC::FunctionBodyNode::createNativeThunk):
- (JSC::FunctionBodyNode::generateBytecode):
- (JSC::FunctionBodyNode::bytecodeForExceptionInfoReparse):
- * parser/Parser.h:
- (JSC::Parser::parse):
- (JSC::Parser::reparse):
- (JSC::Parser::parseFunctionFromGlobalCode):
- (JSC::::parse):
- * runtime/Completion.cpp:
- (JSC::checkSyntax):
- (JSC::evaluate):
- * runtime/Error.cpp:
- (JSC::throwError):
- * runtime/Error.h:
- * runtime/Executable.h: Added.
- (JSC::TemplateExecutable::TemplateExecutable):
- (JSC::TemplateExecutable::markAggregate):
- (JSC::TemplateExecutable::sourceURL):
- (JSC::TemplateExecutable::lineNo):
- (JSC::TemplateExecutable::bytecode):
- (JSC::TemplateExecutable::jitCode):
- (JSC::EvalExecutable::EvalExecutable):
- (JSC::ProgramExecutable::ProgramExecutable):
- * runtime/FunctionConstructor.cpp:
- (JSC::constructFunction):
- * runtime/FunctionConstructor.h:
- * runtime/JSGlobalData.cpp:
- (JSC::JSGlobalData::numericCompareFunction):
- * runtime/JSGlobalObject.cpp:
- (JSC::JSGlobalObject::~JSGlobalObject):
- (JSC::JSGlobalObject::markChildren):
- * runtime/JSGlobalObject.h:
- (JSC::JSGlobalObject::codeBlocks):
- * runtime/JSGlobalObjectFunctions.cpp:
- (JSC::globalFuncEval):
-
-2009-08-14 Darin Adler <darin@apple.com>
-
- Reviewed by Sam Weinig.
-
- Rename the confusing isObject(<class>) to inherits(<class>).
- It still works on non-objects, returning false.
-
- * runtime/ArrayConstructor.cpp:
- (JSC::arrayConstructorIsArray): Removed unneeded isObject call
- and updated remaining isObject call to new name, inherits.
-
- * runtime/JSCell.h: Renamed isObject(<class>) to inherits(<class>)
- but more importantly, made it non-virtual (it was already inline)
- so it is now as fast as JSObject::inherits was.
-
- * runtime/JSObject.h: Removed inherits function since the one
- in the base class is fine as-is. Also made various JSCell functions
- that should not be called on JSObject uncallable by making them
- both private and not implemented.
- (JSC::JSCell::inherits): Updated name.
- (JSC::JSValue::inherits): Ditto.
-
- * debugger/Debugger.cpp:
- (JSC::Debugger::recompileAllJSFunctions):
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::unwindCallFrame):
- * runtime/ArrayPrototype.cpp:
- (JSC::arrayProtoFuncToString):
- (JSC::arrayProtoFuncToLocaleString):
- (JSC::arrayProtoFuncConcat):
- * runtime/BooleanPrototype.cpp:
- (JSC::booleanProtoFuncToString):
- (JSC::booleanProtoFuncValueOf):
- * runtime/DateConstructor.cpp:
- (JSC::constructDate):
- * runtime/DatePrototype.cpp:
- (JSC::dateProtoFuncToString):
- (JSC::dateProtoFuncToUTCString):
- (JSC::dateProtoFuncToISOString):
- (JSC::dateProtoFuncToDateString):
- (JSC::dateProtoFuncToTimeString):
- (JSC::dateProtoFuncToLocaleString):
- (JSC::dateProtoFuncToLocaleDateString):
- (JSC::dateProtoFuncToLocaleTimeString):
- (JSC::dateProtoFuncGetTime):
- (JSC::dateProtoFuncGetFullYear):
- (JSC::dateProtoFuncGetUTCFullYear):
- (JSC::dateProtoFuncToGMTString):
- (JSC::dateProtoFuncGetMonth):
- (JSC::dateProtoFuncGetUTCMonth):
- (JSC::dateProtoFuncGetDate):
- (JSC::dateProtoFuncGetUTCDate):
- (JSC::dateProtoFuncGetDay):
- (JSC::dateProtoFuncGetUTCDay):
- (JSC::dateProtoFuncGetHours):
- (JSC::dateProtoFuncGetUTCHours):
- (JSC::dateProtoFuncGetMinutes):
- (JSC::dateProtoFuncGetUTCMinutes):
- (JSC::dateProtoFuncGetSeconds):
- (JSC::dateProtoFuncGetUTCSeconds):
- (JSC::dateProtoFuncGetMilliSeconds):
- (JSC::dateProtoFuncGetUTCMilliseconds):
- (JSC::dateProtoFuncGetTimezoneOffset):
- (JSC::dateProtoFuncSetTime):
- (JSC::setNewValueFromTimeArgs):
- (JSC::setNewValueFromDateArgs):
- (JSC::dateProtoFuncSetYear):
- (JSC::dateProtoFuncGetYear):
- * runtime/FunctionPrototype.cpp:
- (JSC::functionProtoFuncToString):
- * runtime/JSActivation.cpp:
- (JSC::JSActivation::argumentsGetter):
- * runtime/JSValue.h:
- * runtime/RegExpConstructor.cpp:
- (JSC::constructRegExp):
- * runtime/RegExpPrototype.cpp:
- (JSC::regExpProtoFuncTest):
- (JSC::regExpProtoFuncExec):
- (JSC::regExpProtoFuncCompile):
- (JSC::regExpProtoFuncToString):
- * runtime/ScopeChain.cpp:
- (JSC::ScopeChain::localDepth):
- * runtime/StringPrototype.cpp:
- (JSC::stringProtoFuncReplace):
- (JSC::stringProtoFuncToString):
- (JSC::stringProtoFuncMatch):
- (JSC::stringProtoFuncSearch):
- (JSC::stringProtoFuncSplit):
- Updated to new name, inherits, from old name, isObject.
-
-2009-07-31 Harald Fernengel <harald.fernengel@nokia.com>
+ UTF-16 code points compare() for String objects
+ https://bugs.webkit.org/show_bug.cgi?id=39701
- Reviewed by Simon Hausmann.
+ Moving compare() implementation from UString to StringImpl for it to be shared
+ with String. Adding overloaded free functions codePointCompare() in StringImpl
+ and WTFString. Renaming function compare in UString to codePointCompare to be
+ consistent.
- Adding QNX as a platform. Currently only tested with Qt.
-
- https://bugs.webkit.org/show_bug.cgi?id=27885
-
- * JavaScriptCore/runtime/Collector.cpp: Added retrieving of stack base
- since QNX doesn't have the pthread _nt functions
- * JavaScriptCore/wtf/Platform.h: Added WTF_PLATFORM_QNX and corresponding
- defines
- * WebCore/bridge/npapi.h: Build fix for missing typedefs on QNX
-
-2009-08-14 Gabor Loki <loki@inf.u-szeged.hu>
-
- Reviewed by Simon Hausmann.
-
- Currently generic ARM and ARMv7 platforms work only with JSVALUE32
- https://bugs.webkit.org/show_bug.cgi?id=28300
-
- * wtf/Platform.h:
-
-2009-08-14 Gabor Loki <loki@inf.u-szeged.hu>
-
- Reviewed by Simon Hausmann.
-
- Enable JIT on ARM for QT by default
- https://bugs.webkit.org/show_bug.cgi?id=28259
-
- * wtf/Platform.h:
-
-2009-08-14 Gabor Loki <loki@inf.u-szeged.hu>
-
- Reviewed by Simon Hausmann.
-
- Enable YARR_JIT on ARM for QT by default
- https://bugs.webkit.org/show_bug.cgi?id=28259
-
- * wtf/Platform.h:
-
-2009-08-14 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- [ES5] Arguments object should inherit from Array
- https://bugs.webkit.org/show_bug.cgi?id=28298
-
- Make the Arguments object conform to the behaviour specified in ES5.
- The simple portion of this is to make Arguments use Array.prototype
- as its prototype rather than Object.prototype.
-
- The spec then requires us to set instance.constructor to the pristine
- Object constructor, and instance.toString and instance.toLocaleString
- to the pristine versions from Object.prototype. To do this we now
- make the ObjectPrototype constructor return its toString and
- toLocaleString functions (similar to the call and apply functions
- from FunctionPrototype).
-
- Oddly enough this reports itself as a slight win, but given the code
- isn't hit in the tests that claim to have improved I put this down to
- code motion.
-
- * runtime/Arguments.h:
- (JSC::Arguments::Arguments):
- (JSC::Arguments::initializeStandardProperties):
- * runtime/JSGlobalObject.cpp:
- (JSC::JSGlobalObject::reset):
- (JSC::JSGlobalObject::markChildren):
- * runtime/JSGlobalObject.h:
- (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
- (JSC::JSGlobalObject::objectConstructor):
- (JSC::JSGlobalObject::objectToStringFunction):
- (JSC::JSGlobalObject::objectToLocaleStringFunction):
- * runtime/ObjectPrototype.cpp:
- (JSC::ObjectPrototype::ObjectPrototype):
- * runtime/ObjectPrototype.h:
- * tests/mozilla/ecma_3/Function/arguments-001.js:
- Update test to new es5 behaviour
-
-2009-08-14 Oliver Hunt <oliver@apple.com>
-
- Remove MarkStack::drain from the JSC exports file
-
- MarkStack::drain is now marked inline, the including it in the exports file
- produces an ld warning
-
- * JavaScriptCore.exp:
-
-2009-08-13 Sam Weinig <sam@webkit.org>
-
- Reviewed by Oliver Hunt.
-
- Remove accidentally left in debugging statement.
-
- * runtime/JSArray.h:
- (JSC::MarkStack::drain):
-
-2009-08-13 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Maciej Stachowiak.
-
- [ES5] Implement Array.isArray
- https://bugs.webkit.org/show_bug.cgi?id=28296
-
- Add support for Array.isArray to the Array constructor
-
- * runtime/ArrayConstructor.cpp:
- (JSC::ArrayConstructor::ArrayConstructor):
- (JSC::arrayConstructorIsArray):
- * runtime/ArrayConstructor.h:
- * runtime/CommonIdentifiers.h:
- * runtime/JSArray.h:
- (JSC::MarkStack::drain):
- * runtime/JSGlobalObject.cpp:
- (JSC::JSGlobalObject::reset):
-
-2009-08-13 Oliver Hunt <oliver@apple.com>
-
- Reviewed by NOBODY (Buildfix).
-
- Attempt to fix windows build
-
- * runtime/Collector.cpp:
-
-2009-08-13 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Maciej Stachowiak.
-
- Devirtualise marking
- https://bugs.webkit.org/show_bug.cgi?id=28294
-
- Add a bit to TypeInfo to indicate that an object uses the standard
- JSObject::markChildren method. This allows us to devirtualise marking
- of most objects (though a branch is still needed). We also add a branch
- to identify arrays thus devirtualising marking in that case as well.
-
- In order to make the best use of this devirtualisation I've also reworked
- the MarkStack::drain() logic to make the iteration more efficient.
-
- * API/JSCallbackConstructor.h:
- (JSC::JSCallbackConstructor::createStructure):
- * API/JSCallbackFunction.h:
- (JSC::JSCallbackFunction::createStructure):
- * JavaScriptCore.exp:
- * runtime/BooleanObject.h:
- (JSC::BooleanObject::createStructure):
- * runtime/FunctionPrototype.h:
- (JSC::FunctionPrototype::createStructure):
- * runtime/InternalFunction.h:
- (JSC::InternalFunction::createStructure):
- * runtime/JSAPIValueWrapper.h:
- (JSC::JSAPIValueWrapper::JSAPIValueWrapper):
* runtime/JSArray.cpp:
- (JSC::JSArray::markChildren):
- * runtime/JSArray.h:
- (JSC::JSArray::markChildrenDirect):
- (JSC::MarkStack::drain):
- * runtime/JSByteArray.cpp:
- (JSC::JSByteArray::createStructure):
- * runtime/JSCell.h:
- (JSC::MarkStack::append):
- * runtime/JSGlobalData.cpp:
- (JSC::JSGlobalData::JSGlobalData):
- * runtime/JSNumberCell.h:
- (JSC::JSNumberCell::createStructure):
- * runtime/JSONObject.h:
- (JSC::JSONObject::createStructure):
- * runtime/JSObject.cpp:
- (JSC::JSObject::markChildren):
- * runtime/JSObject.h:
- (JSC::JSObject::markChildrenDirect):
- (JSC::JSObject::createStructure):
- * runtime/JSString.h:
- (JSC::JSString::createStructure):
- * runtime/JSType.h:
- (JSC::):
- * runtime/MarkStack.h:
- (JSC::MarkStack::MarkStack):
- (JSC::MarkStack::MarkSet::MarkSet):
- (JSC::MarkStack::MarkStackArray::last):
- * runtime/MathObject.h:
- (JSC::MathObject::createStructure):
- * runtime/NumberConstructor.h:
- (JSC::NumberConstructor::createStructure):
- * runtime/NumberObject.h:
- (JSC::NumberObject::createStructure):
- * runtime/RegExpConstructor.h:
- (JSC::RegExpConstructor::createStructure):
- * runtime/RegExpObject.h:
- (JSC::RegExpObject::createStructure):
- * runtime/StringObjectThatMasqueradesAsUndefined.h:
- (JSC::StringObjectThatMasqueradesAsUndefined::createStructure):
- * runtime/TypeInfo.h:
- (JSC::TypeInfo::hasDefaultMark):
-
-2009-08-13 Darin Adler <darin@apple.com>
-
- Reviewed by Mark Rowe.
-
- Some small bits of housekeeping.
-
- * JavaScriptCore.xcodeproj/project.pbxproj: Make Parser.h
- project instead of private. Remove JSONObject.lut.h.
-
- * assembler/ARMAssembler.h: Remove unneeded WTF prefix.
- * assembler/AssemblerBufferWithConstantPool.h: Ditto.
- * bytecompiler/BytecodeGenerator.h: Ditto.
-
- * wtf/SegmentedVector.h: Add a "using" statement as we do
- with the other WTF headers.
-
-2009-08-13 Darin Adler <darin@apple.com>
-
- Fix Tiger build.
-
- * parser/Grammar.y: Use a template function so we can compile
- setStatementLocation even if it comes before YYLTYPE is defined.
-
-2009-08-13 Darin Adler <darin@apple.com>
-
- Reviewed by George Staikos.
-
- Too much use of void* in Grammar.y
- https://bugs.webkit.org/show_bug.cgi?id=28287
-
- * parser/Grammar.y: Changed all the helper functions to
- take a JSGlobalData* instead of a void*. A couple formatting
- tweaks that I missed when breaking this into pieces.
-
-2009-08-13 Darin Adler <darin@apple.com>
-
- Reviewed by George Staikos.
-
- Another part of https://bugs.webkit.org/show_bug.cgi?id=28287
-
- * parser/Grammar.y: Reduced and sorted includes. Tweaked comment
- format. Marked a few more functions inline.
-
-2009-08-13 Darin Adler <darin@apple.com>
-
- Reviewed by George Staikos.
-
- Another part of https://bugs.webkit.org/show_bug.cgi?id=28287
-
- * parser/Grammar.y: Pass the number to the PropertyNode instead of
- first turning it into an Identifier.
-
- * parser/NodeConstructors.h:
- (JSC::PropertyNode::PropertyNode): Add an overload that takes a double
- so the code to convert to a string can be here instead of Grammar.y.
- * parser/Nodes.h: Ditto.
-
-2009-08-13 Darin Adler <darin@apple.com>
-
- Reviewed by George Staikos.
-
- Another part of https://bugs.webkit.org/show_bug.cgi?id=28287
-
- * parser/Grammar.y: Eliminate the DBG macro.
-
-2009-08-13 Darin Adler <darin@apple.com>
-
- Reviewed by George Staikos.
-
- Another part of https://bugs.webkit.org/show_bug.cgi?id=28287
-
- * parser/Grammar.y: Eliminate the SET_EXCEPTION_LOCATION macro.
-
-2009-08-13 Darin Adler <darin@apple.com>
-
- Reviewed by George Staikos.
-
- George asked me to break the patch from
- https://bugs.webkit.org/show_bug.cgi?id=28287
- into smaller pieces and land it in stages.
-
- * parser/Grammar.y: Eliminate the LEXER macro.
-
-2009-08-13 Mark Rowe <mrowe@apple.com>
-
- Try some more to fix the Windows build.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Export a new symbol.
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: Ditto.
-
-2009-08-13 Mark Rowe <mrowe@apple.com>
-
- Try and fix the Windows build.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Export a new symbol.
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: Ditto.
-
-2009-08-13 Darin Adler <darin@apple.com>
-
- Reviewed by David Levin.
-
- JavaScriptCore tweaks to get ready for the parser arena
- https://bugs.webkit.org/show_bug.cgi?id=28243
-
- Eliminate dependencies on Nodes.h outside JavaScriptCore,
- and cut down on them inside JavaScriptCore.
-
- Change regular expression parsing to use identifiers as
- with other strings we parse.
-
- Fix a couple things that are needed to use const Identifier
- more, which will be part of the parser arena work.
-
- * JavaScriptCore.exp: Resorted and updated.
-
- * JavaScriptCore.xcodeproj/project.pbxproj: Changed
- CollectorHeapIterator.h to be project-internal.
-
- * bytecompiler/BytecodeGenerator.cpp:
- (JSC::BytecodeGenerator::emitPushNewScope): Added const.
- * bytecompiler/BytecodeGenerator.h: Ditto.
-
- * debugger/Debugger.cpp:
- (JSC::Debugger::recompileAllJSFunctions): Moved this function
- here from WebCore. Here is better since it uses so many internals.
- Removed unimportant optimization for the no listener case.
- * debugger/Debugger.h: Ditto. Also removed unneeded include
- and tweaked formatting and comments.
-
- * debugger/DebuggerCallFrame.cpp:
- (JSC::DebuggerCallFrame::functionName): Call asFunction instead
- of doing the unchecked static_cast.
- (JSC::DebuggerCallFrame::calculatedFunctionName): Ditto.
-
- * jit/JITStubs.cpp:
- (JSC::op_call_JSFunction): Call isHostFunction on the body rather
- than on the JSFunction.
- (JSC::vm_lazyLinkCall): Ditto.
- (JSC::op_construct_JSConstruct): Ditto.
-
- * parser/Grammar.y: Changed callers to use new scanRegExp with
- out arguments instead of relying on state in the Lexer. And
- callers that just want to skip a regular expression to use
- skipRegExp.
-
- * parser/Lexer.cpp:
- (JSC::Lexer::scanRegExp): Changed to use out arguments, and to
- add a prefix argument so we can add in the "=" character as needed.
- Also rewrote to streamline the logic a bit inspired by suggestions
- by David Levin.
- (JSC::Lexer::skipRegExp): Added. Version of the function above that
- does not actually put the regular expression into a string.
- (JSC::Lexer::clear): Removed code to clear m_pattern and m_flags.
- * parser/Lexer.h: Changed scanRegExp to have out arguments. Added
- skipRegExp. Eliminated pattern, flags, m_pattern, and m_flags.
-
- * parser/NodeConstructors.h:
- (JSC::RegExpNode::RegExpNode): Changed to take const Identifier&.
- * parser/Nodes.cpp:
- (JSC::RegExpNode::emitBytecode): Changed since m_pattern and
- m_flags are now Identifier instead of UString.
- (JSC::FunctionBodyNode::make): Moved this function here instead
- of putting it in the JSFunction.h header.
- * parser/Nodes.h: Changed RegExpNode to use Identifier.
-
- * profiler/Profiler.cpp:
- (JSC::Profiler::createCallIdentifier): Changed to use isHostFunction
- on the body instead of on the JSFunction object.
- * runtime/FunctionPrototype.cpp:
- (JSC::functionProtoFuncToString): Ditto.
-
- * runtime/JSFunction.cpp:
- (JSC::JSFunction::isHostFunction): Moved here from header.
- (JSC::JSFunction::isHostFunctionNonInline): Added.
- (JSC::JSFunction::JSFunction): Removed unneeded initialization of
- m_body to 0.
- (JSC::JSFunction::setBody): Moved here from header.
-
- * runtime/JSFunction.h: Removed unneeded includes. Moved private
- constructor down to the private section. Made virtual functions
- private. Removed unneeded overload of setBody and moved the body
- of the function into the .cpp file. Changed assertions to use
- the non-inline version of isHostFunction.
-
- * runtime/PropertySlot.cpp:
- (JSC::PropertySlot::functionGetter): Use asFunction instead
- of doing the unchecked static_cast.
-
- * wtf/SegmentedVector.h:
- (WTF::SegmentedVector::isEmpty): Added.
-
-2009-08-13 Mark Rowe <mrowe@apple.com>
-
- Rubber-stamped by Darin Adler.
-
- Use the version of operator new that takes a JSGlobalData when allocating FuncDeclNode and FuncExprNode
- from within the grammar to prevent these nodes from being leaked.
-
- * parser/Grammar.y:
-
-2009-08-13 Simon Hausmann <simon.hausmann@nokia.com>
-
- Reviewed by Ariya Hidayat.
-
- Remove the special-case for Qt wrt JSVALUE_32 introduced in
- r46709. It must've been a dependency issue on the bot, as
- after a manual build all the tests pass on amd64 and ia32.
-
- * wtf/Platform.h:
-
-2009-08-12 Gabor Loki <loki@inf.u-szeged.hu>
-
- Reviewed by Gavin Barraclough.
-
- Add optimize call and property access support for ARM JIT.
- https://bugs.webkit.org/show_bug.cgi?id=24986
-
- For tightly coupled sequences the BEGIN_UNINTERRUPTED_SEQUENCE and
- END_UNINTERRUPTED_SEQUENCE macros have been introduced which ensure
- space for instructions and constants of the named sequence. This
- method is vital for those architecture which are using constant pool.
-
- The 'latePatch' method - which was linked to JmpSrc - is replaced with
- a port specific solution (each calls are marked to place their address
- on the constant pool).
-
- * assembler/ARMAssembler.cpp:
- (JSC::ARMAssembler::linkBranch):
- (JSC::ARMAssembler::executableCopy): Add extra align for constant pool.
- * assembler/ARMAssembler.h:
- (JSC::ARMAssembler::JmpSrc::JmpSrc):
- (JSC::ARMAssembler::sizeOfConstantPool):
- (JSC::ARMAssembler::jmp):
- (JSC::ARMAssembler::linkCall):
- * assembler/ARMv7Assembler.h:
- * assembler/AbstractMacroAssembler.h:
- * assembler/AssemblerBufferWithConstantPool.h:
- (JSC::AssemblerBufferWithConstantPool::flushIfNoSpaceFor): Fix the
- computation of the remaining space.
- * assembler/MacroAssemblerARM.h:
- (JSC::MacroAssemblerARM::branch32):
- (JSC::MacroAssemblerARM::nearCall):
- (JSC::MacroAssemblerARM::call):
- (JSC::MacroAssemblerARM::branchPtrWithPatch):
- (JSC::MacroAssemblerARM::ensureSpace):
- (JSC::MacroAssemblerARM::sizeOfConstantPool):
- (JSC::MacroAssemblerARM::prepareCall):
- * assembler/X86Assembler.h:
- * jit/JIT.h:
- * jit/JITCall.cpp:
- (JSC::JIT::compileOpCall):
- * jit/JITInlineMethods.h:
- (JSC::JIT::beginUninterruptedSequence):
- (JSC::JIT::endUninterruptedSequence):
- * jit/JITPropertyAccess.cpp:
- (JSC::JIT::emit_op_method_check):
- (JSC::JIT::compileGetByIdHotPath):
- (JSC::JIT::compileGetByIdSlowCase):
- (JSC::JIT::emit_op_put_by_id):
-
-2009-08-12 Gavin Barraclough <barraclough@apple.com>
-
- Rubber Stamped by Dave Kilzer.
-
- Disable WTF_USE_JSVALUE32_64 on iPhone for now (support not yet added for ARMv7).
-
- * wtf/Platform.h:
-
-2009-08-12 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Maciej Stachoviak.
-
- Ooops - moved code that had been accidentally added to op_new_func instead of
- op_new_func_exp, to where it shoulds be.
-
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::privateExecute):
- * wtf/Platform.h:
-
-2009-08-12 Ada Chan <adachan@apple.com>
-
- Added workaround for the limitation that VirtualFree with MEM_RELEASE
- can only accept the base address returned by VirtualAlloc when the region
- was reserved and it can only free the entire region, and not a part of it.
-
- Reviewed by Oliver Hunt.
-
- * runtime/MarkStack.h:
- (JSC::MarkStack::MarkStackArray::shrinkAllocation):
- * runtime/MarkStackWin.cpp:
- (JSC::MarkStack::releaseStack):
-
-2009-08-12 Balazs Kelemen <kelemen.balazs.3@stud.u-szeged.hu>
-
- Reviewed by Ariya Hidayat.
-
- Build fix: use std::numeric_limits<long long>::min() instead of LLONG_MIN
- since LLONG_MIN is not defined in standard c++.
-
- * runtime/UString.cpp:
- (JSC::UString::from):
-
-2009-08-12 Benjamin Otte <otte@gnome.org>
-
- Reviewed by Jan Alonzo.
-
- Buildfix for Gtk platforms debug builds.
-
- * GNUmakefile.am: Choose MarkStackPosix.cpp or MarkStackWin.cpp
- depending on platform.
-
-2009-08-12 Simon Hausmann <simon.hausmann@nokia.com>
-
- Prospective build fix for Mac and 32-bit Windows.
-
- * runtime/UString.cpp: Include wtf/StringExtras.h for snprintf.
- (JSC::UString::from): Use %lld instead of %I64d for snprintf
- on non-windows platforms.
-
-2009-08-12 Prasanth Ullattil <prasanth.ullattil@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- Fix compile error on 64Bit Windows, when UString::from
- is called with an intptr_t.
-
- Added new UString::From overload with long long parameter.
-
- Thanks to Holger for the long long idea.
-
+ (JSC::compareByStringPairForQSort):
* runtime/UString.cpp:
- (JSC::UString::from):
- * runtime/UString.h:
-
-2009-08-11 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Mark Rowe.
-
- Minor style fixes.
-
* runtime/UString.h:
- (JSC::UString::Rep::createEmptyBuffer):
- * wtf/FastMalloc.h:
- (WTF::TryMallocReturnValue::getValue):
+ (JSC::codePointCompare):
+ * wtf/text/StringImpl.cpp:
+ (WebCore::codePointCompare):
+ * wtf/text/StringImpl.h:
+ * wtf/text/WTFString.cpp:
+ (WebCore::codePointCompare):
+ * wtf/text/WTFString.h:
-2009-08-11 Oliver Hunt <oliver@apple.com>
+2010-05-26 Darin Adler <darin@apple.com>
- Reviewed by Gavin Barraclough.
+ Reviewed by Kent Tamura.
- Make it harder to misuse try* allocation routines
- https://bugs.webkit.org/show_bug.cgi?id=27469
+ Null characters handled incorrectly in ToNumber conversion
+ https://bugs.webkit.org/show_bug.cgi?id=38088
- Jump through a few hoops to make it much harder to accidentally
- miss null-checking of values returned by the try-* allocation
- routines.
+ * runtime/JSGlobalObjectFunctions.cpp:
+ (JSC::parseInt): Changed code to use UTF8String().data() instead of
+ ascii() to fix the thread safety issue. Code path is covered by existing
+ tests in run-javascriptcore-tests.
+ (JSC::parseFloat): Moved comment to UString::toDouble since the issue
+ affects all clients, not just parseFloat. Specifically, this also affects
+ standard JavaScript numeric conversion, ToNumber.
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * runtime/JSArray.cpp:
- (JSC::JSArray::putSlowCase):
- (JSC::JSArray::increaseVectorLength):
- * runtime/StringPrototype.cpp:
- (JSC::stringProtoFuncFontsize):
- (JSC::stringProtoFuncLink):
* runtime/UString.cpp:
- (JSC::allocChars):
- (JSC::reallocChars):
- (JSC::expandCapacity):
- (JSC::UString::Rep::reserveCapacity):
- (JSC::UString::expandPreCapacity):
- (JSC::createRep):
- (JSC::concatenate):
- (JSC::UString::spliceSubstringsWithSeparators):
- (JSC::UString::replaceRange):
- (JSC::UString::append):
- (JSC::UString::operator=):
- * runtime/UString.h:
- (JSC::UString::Rep::createEmptyBuffer):
- * wtf/FastMalloc.cpp:
- (WTF::tryFastZeroedMalloc):
- (WTF::tryFastMalloc):
- (WTF::tryFastCalloc):
- (WTF::tryFastRealloc):
- (WTF::TCMallocStats::tryFastMalloc):
- (WTF::TCMallocStats::tryFastCalloc):
- (WTF::TCMallocStats::tryFastRealloc):
- * wtf/FastMalloc.h:
- (WTF::TryMallocReturnValue::TryMallocReturnValue):
- (WTF::TryMallocReturnValue::~TryMallocReturnValue):
- (WTF::TryMallocReturnValue::operator PossiblyNull<T>):
- (WTF::TryMallocReturnValue::getValue):
- * wtf/Platform.h:
- * wtf/PossiblyNull.h: Added.
- (WTF::PossiblyNull::PossiblyNull):
- (WTF::PossiblyNull::~PossiblyNull):
- (WTF::::getValue):
-
-2009-08-11 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (build fix part deux).
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
-
-2009-08-11 Gavin Barraclough <barraclough@apple.com>
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
-
-2009-08-11 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Restrict use of FuncDeclNode & FuncExprNode to the parser.
- https://bugs.webkit.org/show_bug.cgi?id=28209
-
- These objects were also being referenced from the CodeBlock. By changing this
- to just retain pointers to FunctionBodyNodes these classes can be restricted to
- use during parsing.
-
- No performance impact (or sub-percent progression).
-
- * JavaScriptCore.exp:
- Update symbols.
-
- * bytecode/CodeBlock.cpp:
- (JSC::CodeBlock::mark):
- (JSC::CodeBlock::reparseForExceptionInfoIfNecessary):
- (JSC::CodeBlock::shrinkToFit):
- * bytecode/CodeBlock.h:
- (JSC::CodeBlock::addFunction):
- (JSC::CodeBlock::function):
- Unify m_functions & m_functionExpressions into a single Vector<RefPtr<FuncExprNode> >.
-
- * bytecompiler/BytecodeGenerator.cpp:
- (JSC::BytecodeGenerator::BytecodeGenerator):
- (JSC::BytecodeGenerator::addConstant):
- (JSC::BytecodeGenerator::emitNewFunction):
- (JSC::BytecodeGenerator::emitNewFunctionExpression):
- * bytecompiler/BytecodeGenerator.h:
- FunctionStacks now contain FunctionBodyNodes not FuncDeclNodes.
-
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::execute):
- (JSC::Interpreter::privateExecute):
- Update to reflect chnages in CodeBlock.
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_new_func_exp):
- * jit/JITStubs.cpp:
- (JSC::DEFINE_STUB_FUNCTION):
- * jit/JITStubs.h:
- (JSC::):
- Update to reflect chnages in CodeBlock.
-
- * parser/Grammar.y:
- FunctionStacks now contain FunctionBodyNodes not FuncDeclNodes.
-
- * parser/NodeConstructors.h:
- (JSC::FuncExprNode::FuncExprNode):
- (JSC::FuncDeclNode::FuncDeclNode):
- * parser/Nodes.cpp:
- (JSC::ScopeNodeData::mark):
- (JSC::FunctionBodyNode::finishParsing):
- * parser/Nodes.h:
- (JSC::FunctionBodyNode::ident):
- Move m_ident & make methods from FuncDeclNode & FuncExprNode to FunctionBodyNode.
-
- * runtime/JSFunction.h:
- (JSC::FunctionBodyNode::make):
- Make this method inline (was FuncDeclNode::makeFunction).
-
-2009-08-11 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
+ (JSC::UString::toDouble): Added a comment about incorrect space skipping.
+ Changed trailing junk check to use the length of the CString instead of
+ checking for a null character. Also got rid of a little unneeded logic
+ in the case where we tolerate trailing junk.
- Native JSON.stringify does not omit functions
- https://bugs.webkit.org/show_bug.cgi?id=28117
+2010-05-27 Nathan Lawrence <nlawrence@apple.com>
- Objects that are callable should be treated as undefined when
- serialising to JSON.
-
- * runtime/JSONObject.cpp:
- (JSC::Stringifier::appendStringifiedValue):
-
-2009-08-11 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Geoff Garen.
-
- REGRESSION: Hang/crash in BytecodeGenerator::constRegisterFor loading simple page
- https://bugs.webkit.org/show_bug.cgi?id=28169
-
- Handle the case where someone has attempted to shadow a property
- on the global object with a constant.
-
- * bytecompiler/BytecodeGenerator.cpp:
- (JSC::BytecodeGenerator::constRegisterFor):
- * parser/Nodes.cpp:
- (JSC::ConstDeclNode::emitCodeSingle):
-
-2009-08-11 John Gregg <johnnyg@google.com>
-
- Reviewed by Maciej Stachowiak.
-
- Desktop Notifications API
- https://bugs.webkit.org/show_bug.cgi?id=25463
-
- Adds ENABLE_NOTIFICATION flag.
-
- * Configurations/FeatureDefines.xcconfig:
- * wtf/Platform.h:
-
-2009-08-11 Maxime Simon <simon.maxime@gmail.com>
-
- Reviewed by Eric Seidel.
-
- Modifications on JavaScriptCore to allow Haiku port.
- https://bugs.webkit.org/show_bug.cgi?id=28121
-
- * runtime/Collector.cpp: Haiku doesn't have sys/mman.h, using OS.h instead.
- (JSC::currentThreadStackBase): Haiku uses its own threading system.
- * wtf/Platform.h: Defining all Haiku platform values.
- * wtf/haiku/MainThreadHaiku.cpp: Adding a missing header (NotImplemented.h).
-
-2009-08-11 Jessie Berlin <jberlin@apple.com>
-
- Reviewed by Adam Roben.
-
- Fix windows build.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
-
-2009-08-11 Csaba Osztrogonac <oszi@inf.u-szeged.hu>
-
- Reviewed by Tor Arne Vestbø.
-
- Buildfix for Qt-win platforms.
-
- * JavaScriptCore.pri: Choose MarkStackPosix.cpp or MarkStackWin.cpp depend on platform.
-
-2009-08-10 Oliver Hunt <oliver@apple.com>
-
- Reviewed by NOBODY (And another build fix).
-
- Add new exports for MSVC
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
- * JavaScriptCore.xcodeproj/project.pbxproj:
-
-2009-08-10 Oliver Hunt <oliver@apple.com>
-
- Reviewed by NOBODY (yet another build fix).
-
- Remove obsolete entries from MSVC exports file
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
-
-2009-08-10 Oliver Hunt <oliver@apple.com>
-
- Add includes needed for non-allinonefile builds
-
- * runtime/GetterSetter.h:
- * runtime/ScopeChain.h:
-
-2009-08-10 Oliver Hunt <oliver@apple.com>
-
- Fix export file for last build fix
-
- * JavaScriptCore.exp:
-
-2009-08-10 Oliver Hunt <oliver@apple.com>
-
- Hoist page size initialization into platform specific code.
-
- * jit/ExecutableAllocatorPosix.cpp:
- * jit/ExecutableAllocatorWin.cpp:
- * runtime/MarkStack.h:
- (JSC::MarkStack::pageSize):
- * runtime/MarkStackPosix.cpp:
- (JSC::MarkStack::initializePagesize):
- * runtime/MarkStackWin.cpp:
- (JSC::MarkStack::initializePagesize):
-
-2009-08-07 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- Stack overflow crash in JavaScript garbage collector mark pass
- https://bugs.webkit.org/show_bug.cgi?id=12216
-
- Make the GC mark phase iterative by using an explicit mark stack.
- To do this marking any single object is performed in multiple stages
- * The object is appended to the MarkStack, this sets the marked
- bit for the object using the new markDirect() function, and then
- returns
- * When the MarkStack is drain()ed the object is popped off the stack
- and markChildren(MarkStack&) is called on the object to collect
- all of its children. drain() then repeats until the stack is empty.
+ Reviewed by Geoffrey Garen.
- Additionally I renamed a number of methods from 'mark' to 'markAggregate'
- in order to make it more clear that marking of those object was not
- going to result in an actual recursive mark.
+ Search for the new allocation one word at a time. Improves
+ performance on SunSpider by approximately 1%.
+ http://bugs.webkit.org/show_bug.cgi?id=39758
- * GNUmakefile.am
- * JavaScriptCore.exp:
- * JavaScriptCore.gypi:
- * JavaScriptCore.pri:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * bytecode/CodeBlock.cpp:
- (JSC::CodeBlock::markAggregate):
- * bytecode/CodeBlock.h:
- * bytecode/EvalCodeCache.h:
- (JSC::EvalCodeCache::markAggregate):
- * debugger/DebuggerActivation.cpp:
- (JSC::DebuggerActivation::markChildren):
- * debugger/DebuggerActivation.h:
- * interpreter/Register.h:
- * interpreter/RegisterFile.h:
- (JSC::RegisterFile::markGlobals):
- (JSC::RegisterFile::markCallFrames):
- * parser/Nodes.cpp:
- (JSC::ScopeNodeData::markAggregate):
- (JSC::EvalNode::markAggregate):
- (JSC::FunctionBodyNode::markAggregate):
- * parser/Nodes.h:
- (JSC::ScopeNode::markAggregate):
- * runtime/ArgList.cpp:
- (JSC::MarkedArgumentBuffer::markLists):
- * runtime/ArgList.h:
- * runtime/Arguments.cpp:
- (JSC::Arguments::markChildren):
- * runtime/Arguments.h:
* runtime/Collector.cpp:
- (JSC::Heap::markConservatively):
- (JSC::Heap::markCurrentThreadConservativelyInternal):
- (JSC::Heap::markCurrentThreadConservatively):
- (JSC::Heap::markOtherThreadConservatively):
- (JSC::Heap::markStackObjectsConservatively):
- (JSC::Heap::markProtectedObjects):
- (JSC::Heap::collect):
+ (JSC::Heap::allocate):
* runtime/Collector.h:
- * runtime/GetterSetter.cpp:
- (JSC::GetterSetter::markChildren):
- * runtime/GetterSetter.h:
- (JSC::GetterSetter::GetterSetter):
- (JSC::GetterSetter::createStructure):
- * runtime/GlobalEvalFunction.cpp:
- (JSC::GlobalEvalFunction::markChildren):
- * runtime/GlobalEvalFunction.h:
- * runtime/JSActivation.cpp:
- (JSC::JSActivation::markChildren):
- * runtime/JSActivation.h:
- * runtime/JSArray.cpp:
- (JSC::JSArray::markChildren):
- * runtime/JSArray.h:
- * runtime/JSCell.h:
- (JSC::JSCell::markCellDirect):
- (JSC::JSCell::markChildren):
- (JSC::JSValue::markDirect):
- (JSC::JSValue::markChildren):
- (JSC::JSValue::hasChildren):
- (JSC::MarkStack::append):
- (JSC::MarkStack::drain):
- * runtime/JSFunction.cpp:
- (JSC::JSFunction::markChildren):
- * runtime/JSFunction.h:
- * runtime/JSGlobalData.cpp:
- (JSC::JSGlobalData::JSGlobalData):
- * runtime/JSGlobalData.h:
- * runtime/JSGlobalObject.cpp:
- (JSC::markIfNeeded):
- (JSC::JSGlobalObject::markChildren):
- * runtime/JSGlobalObject.h:
- * runtime/JSNotAnObject.cpp:
- (JSC::JSNotAnObject::markChildren):
- * runtime/JSNotAnObject.h:
- * runtime/JSONObject.cpp:
- (JSC::Stringifier::markAggregate):
- (JSC::JSONObject::markStringifiers):
- * runtime/JSONObject.h:
- * runtime/JSObject.cpp:
- (JSC::JSObject::markChildren):
- (JSC::JSObject::defineGetter):
- (JSC::JSObject::defineSetter):
- * runtime/JSObject.h:
- * runtime/JSPropertyNameIterator.cpp:
- (JSC::JSPropertyNameIterator::markChildren):
- * runtime/JSPropertyNameIterator.h:
- (JSC::JSPropertyNameIterator::createStructure):
- (JSC::JSPropertyNameIterator::JSPropertyNameIterator):
- (JSC::JSPropertyNameIterator::create):
- * runtime/JSStaticScopeObject.cpp:
- (JSC::JSStaticScopeObject::markChildren):
- * runtime/JSStaticScopeObject.h:
- * runtime/JSType.h:
- (JSC::):
- * runtime/JSValue.h:
- * runtime/JSWrapperObject.cpp:
- (JSC::JSWrapperObject::markChildren):
- * runtime/JSWrapperObject.h:
- * runtime/MarkStack.cpp: Added.
- (JSC::MarkStack::compact):
- * runtime/MarkStack.h: Added.
- (JSC::):
- (JSC::MarkStack::MarkStack):
- (JSC::MarkStack::append):
- (JSC::MarkStack::appendValues):
- (JSC::MarkStack::~MarkStack):
- (JSC::MarkStack::MarkSet::MarkSet):
- (JSC::MarkStack::pageSize):
-
- MarkStackArray is a non-shrinking, mmap-based vector type
- used for storing objects to be marked.
- (JSC::MarkStack::MarkStackArray::MarkStackArray):
- (JSC::MarkStack::MarkStackArray::~MarkStackArray):
- (JSC::MarkStack::MarkStackArray::expand):
- (JSC::MarkStack::MarkStackArray::append):
- (JSC::MarkStack::MarkStackArray::removeLast):
- (JSC::MarkStack::MarkStackArray::isEmpty):
- (JSC::MarkStack::MarkStackArray::size):
- (JSC::MarkStack::MarkStackArray::shrinkAllocation):
- * runtime/MarkStackPosix.cpp: Added.
- (JSC::MarkStack::allocateStack):
- (JSC::MarkStack::releaseStack):
- * runtime/MarkStackWin.cpp: Added.
- (JSC::MarkStack::allocateStack):
- (JSC::MarkStack::releaseStack):
-
- * runtime/ScopeChain.h:
- * runtime/ScopeChainMark.h:
- (JSC::ScopeChain::markAggregate):
- * runtime/SmallStrings.cpp:
- (JSC::SmallStrings::mark):
- * runtime/Structure.h:
- (JSC::Structure::markAggregate):
-
-2009-08-10 Mark Rowe <mrowe@apple.com>
-
- Reviewed by Darin Adler.
-
- Fix hundreds of "pointer being freed was not allocated" errors seen on the build bot.
-
- * wtf/FastMalloc.h: Implement nothrow variants of the delete and delete[] operators since
- we implement the nothrow variants of new and new[]. The nothrow variant of delete is called
- explicitly in the implementation of std::sort which was resulting in FastMalloc-allocated
- memory being passed to the system allocator to free.
-
-2009-08-10 Jan Michael Alonzo <jmalonzo@webkit.org>
-
- [Gtk] Unreviewed build fix. Move JSAPIValueWrapper.cpp/.h in the debug
- section. This file is already part of AllInOneFile in Release builds.
+ (JSC::CollectorBitmap::advanceToNextPossibleFreeCell):
- * GNUmakefile.am:
-
-2009-08-10 Darin Adler <darin@apple.com>
-
- * wtf/FastMalloc.h: Fix build.
-
-2009-08-10 Darin Adler <darin@apple.com>
-
- Reviewed by Mark Rowe.
-
- FastMalloc.h has cross-platform code but marked as WinCE-only
- https://bugs.webkit.org/show_bug.cgi?id=28160
-
- 1) The support for nothrow was inside #if PLATFORM(WINCE) even though it is
- not platform-specific.
- 2) The code tried to override operator delete nothrow, which does not exist.
- 3) The code in the header checks the value of USE_SYSTEM_MALLOC, but the code
- in FastMalloc.cpp checks only if the macro is defined.
-
- * wtf/FastMalloc.h: See above.
- * wtf/FastMalloc.cpp: Ditto.
-
-2009-08-10 Sam Weinig <sam@webkit.org>
-
- Reviewed by Anders Carlsson.
+2010-05-27 Kevin Ollivier <kevino@theolliviers.com>
- Fix an annoying indentation issue.
+ [wx] Build fixes for Windows after recent changes.
- * runtime/DateConstructor.cpp:
- (JSC::constructDate):
-
-2009-08-10 Xan Lopez <xlopez@igalia.com>
+ * wscript:
- Unreviewed build fix.
+2010-05-27 Gustavo Noronha Silva <gns@gnome.org>
- Add new files to makefile.
+ More build fixage for make dist.
* GNUmakefile.am:
-2009-08-10 Simon Hausmann <simon.hausmann@nokia.com>
-
- Fix compilation with the interpreter instead of the JIT by including
- PrototypeFunction.h as forward-declared through NativeFunctionWrapper.h.
-
- * runtime/ObjectConstructor.cpp:
-
-2009-08-09 Oliver Hunt <oliver@apple.com>
-
- Reviewed by George Staikos.
-
- JSON.stringify replacer returning undefined does not omit object properties
- https://bugs.webkit.org/show_bug.cgi?id=28118
-
- Correct behaviour of stringify when using a replacer function that returns
- undefined. This is a simple change to move the undefined value check to
- after the replacer function is called. This means that the replacer function
- is now called for properties with the value undefined, however i've confirmed
- that this behaviour is correct.
-
- In addition I've made the cyclic object exception have a more useful error
- message.
-
- * runtime/JSONObject.cpp:
- (JSC::Stringifier::appendStringifiedValue):
-
-2009-08-08 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Eric Seidel and Sam Weinig.
-
- [ES5] Implement Object.getPrototypeOf
- https://bugs.webkit.org/show_bug.cgi?id=28114
-
- Implement getPrototypeOf
-
- * runtime/CommonIdentifiers.h:
- * runtime/JSGlobalObject.cpp:
- (JSC::JSGlobalObject::reset):
- * runtime/ObjectConstructor.cpp:
- (JSC::ObjectConstructor::ObjectConstructor):
- (JSC::objectConsGetPrototypeOf):
- * runtime/ObjectConstructor.h:
-
-2009-08-07 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
-
- Reviewed by Eric Seidel.
-
- Allow custom memory allocation control for Noncopyable class
- https://bugs.webkit.org/show_bug.cgi?id=27879
-
- Several classes which are inherited from Noncopyable are instantiated by
- operator new, so Noncopyable class has been inherited from FastAllocBase.
-
- * wtf/Noncopyable.h:
-
-2009-08-07 George Staikos <george.staikos@torchmobile.com>
-
- Reviewed by Eric Seidel.
-
- https://bugs.webkit.org/show_bug.cgi?id=27305
- Implement WinCE-specific unicode layer.
- Written by George Staikos <george.staikos@torchmobile.com>
- with bug fixes by Yong Li <yong.li@torchmobile.com>
- refactored by Joe Mason <joe.mason@torchmobile.com>
-
- * wtf/Platform.h:
- * wtf/unicode/Unicode.h:
- * wtf/unicode/wince/UnicodeWince.cpp: Added.
- (WTF::Unicode::toLower):
- (WTF::Unicode::toUpper):
- (WTF::Unicode::foldCase):
- (WTF::Unicode::isPrintableChar):
- (WTF::Unicode::isSpace):
- (WTF::Unicode::isLetter):
- (WTF::Unicode::isUpper):
- (WTF::Unicode::isLower):
- (WTF::Unicode::isDigit):
- (WTF::Unicode::isPunct):
- (WTF::Unicode::toTitleCase):
- (WTF::Unicode::direction):
- (WTF::Unicode::category):
- (WTF::Unicode::decompositionType):
- (WTF::Unicode::combiningClass):
- (WTF::Unicode::mirroredChar):
- (WTF::Unicode::digitValue):
- * wtf/unicode/wince/UnicodeWince.h: Added.
- (WTF::Unicode::):
- (WTF::Unicode::isSeparatorSpace):
- (WTF::Unicode::isHighSurrogate):
- (WTF::Unicode::isLowSurrogate):
- (WTF::Unicode::isArabicChar):
- (WTF::Unicode::hasLineBreakingPropertyComplexContext):
- (WTF::Unicode::umemcasecmp):
- (WTF::Unicode::surrogateToUcs4):
-
-2009-08-07 Yongjun Zhang <yongjun.zhang@nokia.com>
-
- Reviewed by Eric Seidel.
-
- https://bugs.webkit.org/show_bug.cgi?id=28069
-
- Add inline to help winscw compiler resolve specialized argument in
- templated functions.
-
- * runtime/LiteralParser.cpp:
- (JSC::LiteralParser::Lexer::lexString):
-
-2009-08-07 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
-
- Reviewed by Eric Seidel.
-
- Allow custom memory allocation control for RegExpObjectData struct
- http://bugs.webkit.org/show_bug.cgi?id=26750
-
- Inherits RegExpObjectData struct from FastAllocBase because
- it has been instantiated by 'new' in JavaScriptCore/runtime/RegExpObject.cpp:62
-
- * runtime/RegExpObject.h:
-
-2009-08-06 Norbert Leser <norbert.leser@nokia.com>
+2010-05-27 Kwang Yul Seo <skyul@company100.net>
Reviewed by Darin Adler.
- Updated patch for bug #27059:
- Symbian platform always uses little endian encoding,
- regardless of compiler.
- We need to make sure that we correctly detect EABI architecture
- for armv5 targets on Symbian,
- where __EABI__ is set but not __ARM_EABI__
-
- * wtf/Platform.h:
-
-2009-08-06 Adam Barth <abarth@webkit.org>
-
- Unreviewed revert.
+ RVCT does not have strnstr.
+ https://bugs.webkit.org/show_bug.cgi?id=39719
- http://bugs.webkit.org/show_bug.cgi?id=27879
+ Add COMPILER(RVCT) guard to strnstr in StringExtras.h as RVCT does not provide strnstr.
- Revert 46877 because it broke GTK.
-
- * wtf/Noncopyable.h:
+ * wtf/StringExtras.h:
-2009-08-06 Gavin Barraclough <barraclough@apple.com>
+2010-05-26 Gavin Barraclough <barraclough@apple.com>
Reviewed by Oliver Hunt.
- Make get_by_id/put_by_id/method_check/call defer optimization using a data flag rather than a code modification.
- ( https://bugs.webkit.org/show_bug.cgi?id=27635 )
-
- This improves performance of ENABLE(ASSEMBLER_WX_EXCLUSIVE) builds by 2-2.5%, reducing the overhead to about 2.5%.
- (No performance impact with ASSEMBLER_WX_EXCLUSIVE disabled).
-
- * bytecode/CodeBlock.cpp:
- (JSC::printStructureStubInfo):
- - Make StructureStubInfo store the type as an integer, rather than an OpcodeID.
-
- * bytecode/CodeBlock.h:
- (JSC::):
- (JSC::CallLinkInfo::seenOnce):
- (JSC::CallLinkInfo::setSeen):
- (JSC::MethodCallLinkInfo::seenOnce):
- (JSC::MethodCallLinkInfo::setSeen):
- - Change a pointer in CallLinkInfo/MethodCallLinkInfo to use a PtrAndFlags, use a flag to track when an op has been executed once.
-
- * bytecode/StructureStubInfo.cpp:
- (JSC::StructureStubInfo::deref):
- - Make StructureStubInfo store the type as an integer, rather than an OpcodeID.
-
- * bytecode/StructureStubInfo.h:
- (JSC::StructureStubInfo::StructureStubInfo):
- (JSC::StructureStubInfo::initGetByIdSelf):
- (JSC::StructureStubInfo::initGetByIdProto):
- (JSC::StructureStubInfo::initGetByIdChain):
- (JSC::StructureStubInfo::initGetByIdSelfList):
- (JSC::StructureStubInfo::initGetByIdProtoList):
- (JSC::StructureStubInfo::initPutByIdTransition):
- (JSC::StructureStubInfo::initPutByIdReplace):
- (JSC::StructureStubInfo::seenOnce):
- (JSC::StructureStubInfo::setSeen):
- - Make StructureStubInfo store the type as an integer, rather than an OpcodeID, add a flag to track when an op has been executed once.
-
- * bytecompiler/BytecodeGenerator.cpp:
- (JSC::BytecodeGenerator::emitGetById):
- (JSC::BytecodeGenerator::emitPutById):
- - Make StructureStubInfo store the type as an integer, rather than an OpcodeID.
-
- * jit/JIT.cpp:
- (JSC::JIT::privateCompileCTIMachineTrampolines):
- (JSC::JIT::unlinkCall):
- - Remove the "don't lazy link" stage of calls.
-
- * jit/JIT.h:
- (JSC::JIT::compileCTIMachineTrampolines):
- - Remove the "don't lazy link" stage of calls.
-
- * jit/JITCall.cpp:
- (JSC::JIT::compileOpCallSlowCase):
- - Remove the "don't lazy link" stage of calls.
-
- * jit/JITStubs.cpp:
- (JSC::JITThunks::JITThunks):
- (JSC::JITThunks::tryCachePutByID):
- (JSC::JITThunks::tryCacheGetByID):
- (JSC::JITStubs::DEFINE_STUB_FUNCTION):
- (JSC::JITStubs::getPolymorphicAccessStructureListSlot):
- - Remove the "don't lazy link" stage of calls, and the "_second" stage of get_by_id/put_by_id/method_check.
-
- * jit/JITStubs.h:
- (JSC::JITThunks::ctiStringLengthTrampoline):
- (JSC::JITStubs::):
- - Remove the "don't lazy link" stage of calls, and the "_second" stage of get_by_id/put_by_id/method_check.
-
- * wtf/PtrAndFlags.h:
- (WTF::PtrAndFlags::PtrAndFlags):
- (WTF::PtrAndFlags::operator!):
- (WTF::PtrAndFlags::operator->):
- - Add ! and -> operators, add constuctor with pointer argument.
-
-2009-08-06 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
-
- Reviewed by Adam Barth.
-
- Allow custom memory allocation control for Noncopyable class
- https://bugs.webkit.org/show_bug.cgi?id=27879
-
- Several classes which inherited from Noncopyable are instantiated by
- operator new, so Noncopyable class has been inherited from FastAllocBase.
-
- * wtf/Noncopyable.h:
-
-2009-08-06 Mark Rowe <mrowe@apple.com>
-
- Rubber-stamped by Sam Weinig.
-
- Add explicit dependencies for our build verification scripts to ensure that they always run after linking has completed.
-
- * JavaScriptCore.xcodeproj/project.pbxproj:
-
-2009-08-06 Mark Rowe <mrowe@apple.com>
-
- Bring a little order to our otherwise out of control lives.
-
- * JavaScriptCore.xcodeproj/project.pbxproj:
-
-2009-08-06 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
-
- Reviewed by Darin Adler.
-
- Allow custom memory allocation control for JavaScriptCore's PolymorphicAccessStructureList struct
- https://bugs.webkit.org/show_bug.cgi?id=27877
-
- Inherits PolymorphicAccessStructureList struct from FastAllocBase because it has been instantiated by
- 'new' in JavaScriptCore/jit/JITStubs.cpp:1229.
-
- * bytecode/Instruction.h:
-
-2009-08-05 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
-
- Reviewed by Darin Adler.
-
- Allow custom memory allocation control for JavaScriptCore's ScopeNodeData struct
- https://bugs.webkit.org/show_bug.cgi?id=27875
-
- Inherits ScopeNodeData struct from FastAllocBase because it has been instantiated by
- 'new' in JavaScriptCore/parser/Nodes.cpp:1848.
-
- * parser/Nodes.h:
-
-2009-08-05 Zoltan Herczeg <zherczeg@inf.u-szeged.hu>
-
- Reviewed by Gavin Barraclough.
-
- Add floating point support for generic ARM port.
- https://bugs.webkit.org/show_bug.cgi?id=24986
-
- * assembler/ARMAssembler.cpp:
- (JSC::ARMAssembler::doubleTransfer):
- * assembler/ARMAssembler.h:
- (JSC::ARM::):
- (JSC::ARMAssembler::):
- (JSC::ARMAssembler::faddd_r):
- (JSC::ARMAssembler::fsubd_r):
- (JSC::ARMAssembler::fmuld_r):
- (JSC::ARMAssembler::fcmpd_r):
- (JSC::ARMAssembler::fdtr_u):
- (JSC::ARMAssembler::fdtr_d):
- (JSC::ARMAssembler::fmsr_r):
- (JSC::ARMAssembler::fsitod_r):
- (JSC::ARMAssembler::fmstat):
- * assembler/MacroAssemblerARM.h:
- (JSC::MacroAssemblerARM::):
- (JSC::MacroAssemblerARM::supportsFloatingPoint):
- (JSC::MacroAssemblerARM::loadDouble):
- (JSC::MacroAssemblerARM::storeDouble):
- (JSC::MacroAssemblerARM::addDouble):
- (JSC::MacroAssemblerARM::subDouble):
- (JSC::MacroAssemblerARM::mulDouble):
- (JSC::MacroAssemblerARM::convertInt32ToDouble):
- (JSC::MacroAssemblerARM::branchDouble):
- * jit/JIT.h:
-
-2009-08-05 Zoltan Herczeg <zherczeg@inf.u-szeged.hu>
-
- Reviewed by Gavin Barraclough.
-
- Add JIT support for generic ARM port without optimizations.
- https://bugs.webkit.org/show_bug.cgi?id=24986
-
- All JIT optimizations are disabled.
-
- Signed off by Zoltan Herczeg <zherczeg@inf.u-szeged.hu>
- Signed off by Gabor Loki <loki@inf.u-szeged.hu>
-
- * assembler/ARMAssembler.cpp:
- (JSC::ARMAssembler::baseIndexTransfer32):
- * assembler/AbstractMacroAssembler.h:
- (JSC::AbstractMacroAssembler::Imm32::Imm32):
- * assembler/MacroAssemblerARM.h:
- (JSC::MacroAssemblerARM::store32):
- (JSC::MacroAssemblerARM::move):
- (JSC::MacroAssemblerARM::branch32):
- (JSC::MacroAssemblerARM::add32):
- (JSC::MacroAssemblerARM::sub32):
- (JSC::MacroAssemblerARM::load32):
- * bytecode/CodeBlock.h:
- (JSC::CodeBlock::getBytecodeIndex):
- * jit/JIT.h:
- * jit/JITInlineMethods.h:
- (JSC::JIT::restoreArgumentReference):
- * jit/JITOpcodes.cpp:
- * jit/JITStubs.cpp:
- * jit/JITStubs.h:
- (JSC::JITStackFrame::returnAddressSlot):
- * wtf/Platform.h:
-
-2009-08-04 Gavin Barraclough <barraclough@apple.com>
-
- Rubber Stamped by Oiver Hunt.
-
- Revert r46643 since this breaks the Yarr::Interpreter running the v8 tests.
- https://bugs.webkit.org/show_bug.cgi?id=27874
-
- * yarr/RegexInterpreter.cpp:
- (JSC::Yarr::Interpreter::allocDisjunctionContext):
- (JSC::Yarr::Interpreter::freeDisjunctionContext):
- (JSC::Yarr::Interpreter::allocParenthesesDisjunctionContext):
- (JSC::Yarr::Interpreter::freeParenthesesDisjunctionContext):
-
-2009-08-04 Oliver Hunt <oliver@apple.com>
-
- PPC64 Build fix
-
- * wtf/Platform.h:
-
-2009-08-04 Benjamin C Meyer <benjamin.meyer@torchmobile.com>
-
- Reviewed by Adam Treat
-
- Explicitly include limits.h header when using INT_MAX and INT_MIN
-
- * interpreter/Interpreter.cpp
-
-2009-08-03 Harald Fernengel <harald.fernengel@nokia.com>
-
- Reviewed by Darin Adler.
-
- Fix compile error for ambigous call to abs()
- https://bugs.webkit.org/show_bug.cgi?id=27873
-
- Fix ambiguity in abs(long int) call by calling labs() instead
-
- * wtf/DateMath.cpp: replace call to abs() with labs()
-
-2009-08-03 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Eric Seidel.
-
- [Qt] Consolidate common gcc flags to WebKit.pri
- https://bugs.webkit.org/show_bug.cgi?id=27934
-
- * JavaScriptCore.pro:
-
-2009-08-03 Ada Chan <adachan@apple.com>
-
- Fixed the Tiger build.
-
- * wtf/FastMalloc.cpp:
-
-2009-08-03 Ada Chan <adachan@apple.com>
-
- Reviewed by Darin Adler.
-
- Don't use background thread to scavenge memory on Tiger until we figure out why it causes a crash.
- https://bugs.webkit.org/show_bug.cgi?id=27900
+ Bug 39795 - Add support for YARR JIT generation of greedy quantified parens at the end of the main disjunction.
+ (relanding r60267)
- * wtf/FastMalloc.cpp:
+ If the last item in a main disjunction is a quantified set of parentheses,
+ this is easier to code generate for than the general case for quantified
+ parentheses. This is because we never need to backtrack into the parentheses
+ - the first match will be the final and accepted match.
-2009-08-03 Fumitoshi Ukai <ukai@chromium.org>
+ This patch also somewhat reverts a recent change to when fallback to PCRE
+ occurs. At the minute the compiler is tracking on patterns which will
+ require JIT fallback. This is handy from a performance perspective (it saves
+ the failed attempt at JIT compilation), but it means introducing knowledge
+ of the JITs capabilities into the other layers of the regex compilers. For
+ the specific feature of back-references, add a flag tracking their presence
+ on the pattern, and make these expressions fallback without attempting to
+ JIT. For parentheses, return to detecting which cases are have or have not
+ been handled during JIT compilation.
- Reviewed by Jan Alonzo.
+ 18% progression on tagcloud, ~1.5% overall on sunspidey.
- Fix build break on Gtk/x86_64.
- https://bugs.webkit.org/show_bug.cgi?id=27936
-
- Use JSVALUE64 for X86_64 LINUX, except Qt.
-
- * wtf/Platform.h:
-
-2009-08-02 Xan Lopez <xlopez@igalia.com>
-
- Fix the GTK+ build.
-
- * wtf/Platform.h:
-
-2009-08-02 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Disabled JSVALUE32_64 on Qt builds, since all layout tests mysteriously
- crash with it enabled.
-
- * wtf/Platform.h:
-
-2009-08-02 Geoffrey Garen <ggaren@apple.com>
-
- Qt build fix.
-
- Added JSAPIValueWrapper.cpp to the build.
-
- * JavaScriptCore.pri:
-
-2009-08-02 Geoffrey Garen <ggaren@apple.com>
-
- Windows build fix.
-
- Exported symbols for JSAPIValueWrapper.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
-
-2009-08-02 Geoffrey Garen <ggaren@apple.com>
-
- GTK build fix.
-
- * jit/JITStubs.cpp: #include <stdarg.h>, for a definition of va_start.
-
-2009-08-02 Geoffrey Garen <ggaren@apple.com>
-
- Qt build fix.
-
- * runtime/Collector.cpp: #include <limits.h>, for a definition of ULONG_MAX.
-
-2009-08-02 Geoffrey Garen <ggaren@apple.com>
-
- Windows build fix: Nixed JSImmediate::prototype, JSImmediate::toObject,
- and JSImmediate::toThisObject, and removed their exported symbols.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
- * runtime/JSImmediate.cpp:
- * runtime/JSImmediate.h:
-
-2009-08-02 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Mark Rowe.
-
- Enabled JSVALUE32_64 by default on all platforms other than x86_64 (which uses JSVALUE64).
-
- * wtf/Platform.h:
-
-2009-08-02 Kevin Ollivier <kevino@theolliviers.com>
-
- Reviewed by Jan Alonzo.
-
- Script for building the JavaScriptCore library for wx.
- https://bugs.webkit.org/show_bug.cgi?id=27619
-
- * wscript: Added.
-
-2009-08-02 Yong Li <yong.li@torchmobile.com>
-
- Reviewed by George Staikos.
-
- DateMath depends on strftime and localtime, which need to be imported manually on WinCE
- https://bugs.webkit.org/show_bug.cgi?id=26558
-
- * wtf/DateMath.cpp:
-
-2009-08-01 David Kilzer <ddkilzer@apple.com>
-
- wtf/Threading.h: added include of Platform.h
-
- Reviewed by Mark Rowe.
-
- * wtf/Threading.h: Added #include "Platform.h" since this header
- uses PLATFORM() and other macros.
-
-2009-08-01 Mark Rowe <mrowe@apple.com>
-
- Rubber-stamped by Oliver Hunt.
-
- Roll out r46668 as it was misinformed. ScopeChain is only used with placement new.
-
- * runtime/ScopeChain.h:
-
-2009-08-01 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
-
- Allow custom memory allocation control for JavaScriptCore's HashMap class
- http://bugs.webkit.org/show_bug.cgi?id=27871
-
- Inherits HashMap class from FastAllocBase because it has been
- instantiated by 'new' in JavaScriptCore/API/JSClassRef.cpp:148.
-
- * wtf/RefPtrHashMap.h:
- (WTF::):
-
-2009-08-01 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
-
- Allow custom memory allocation control for JavaScriptCore's ScopeChain class
- https://bugs.webkit.org/show_bug.cgi?id=27834
-
- Inherits ScopeChain class from FastAllocBase because it has been
- instantiated by 'new' in JavaScriptCore/runtime/JSFunction.h:109.
-
- * runtime/ScopeChain.h:
-
-2009-08-01 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
-
- Reviewed by Darin Adler.
-
- Allow custom memory allocation control for JavaScriptCore's RegExpConstructorPrivate struct
- https://bugs.webkit.org/show_bug.cgi?id=27833
-
- Inherits RegExpConstructorPrivate class from FastAllocBase because it has been
- instantiated by 'new' in JavaScriptCore/runtime/RegExpConstructor.cpp:152.
-
- * runtime/RegExpConstructor.cpp:
-
-2009-07-31 Yong Li <yong.li@torchmobile.com>
-
- Reviewed by George Staikos.
-
- Resurrect the old GetTickCount implementation of currentTime, controlled by WTF_USE_QUERY_PERFORMANCE_COUNTER
- currentSystemTime taken from older WebKit; currentTime written by Yong Li <yong.li@torchmobile.com>; cleanup by Joe Mason <joe.mason@torchmobile.com>
- https://bugs.webkit.org/show_bug.cgi?id=27848
-
- * wtf/CurrentTime.cpp:
- (WTF::currentSystemTime): get current time with GetCurrentFT
- (WTF::currentTime): track msec elapsed since first currentSystemTime call using GetTickCount
- * wtf/Platform.h:
-
-2009-07-31 Ada Chan <adachan@apple.com>
-
- Fixes the Windows release-PGO build.
-
- Reviewed by Jon Honeycutt.
-
- * JavaScriptCore.vcproj/WTF/WTF.vcproj: Suppresses the warning about unreachable code that we get by adding "return 0" to WTF::TCMalloc_PageHeap::runScavengerThread().
- * wtf/FastMalloc.cpp:
- (WTF::TCMalloc_PageHeap::runScavengerThread): Fixes the error about the method not returning a value in the release-PGO build.
-
-2009-07-31 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
-
- Change malloc to fastMalloc and free to fastFree in Yarr's RegexInterpreter.cpp
- https://bugs.webkit.org/show_bug.cgi?id=27874
-
- Use fastMalloc and fastFree instead of malloc and free in RegexInterpreter.cpp's methods.
-
- * yarr/RegexInterpreter.cpp:
- (JSC::Yarr::Interpreter::allocDisjunctionContext):
- (JSC::Yarr::Interpreter::freeDisjunctionContext):
- (JSC::Yarr::Interpreter::allocParenthesesDisjunctionContext):
- (JSC::Yarr::Interpreter::freeParenthesesDisjunctionContext):
-
-2009-07-30 Xan Lopez <xlopez@igalia.com>
-
- Reviewed by Jan Alonzo.
-
- Fix compiler warning.
-
- GCC does not like C++-style comments in preprocessor directives.
+ * yarr/RegexCompiler.cpp:
+ (JSC::Yarr::RegexPatternConstructor::atomBackReference):
+ (JSC::Yarr::RegexPatternConstructor::quantifyAtom):
+ * yarr/RegexJIT.cpp:
+ (JSC::Yarr::RegexGenerator::TermGenerationState::isLastTerm):
+ (JSC::Yarr::RegexGenerator::TermGenerationState::isMainDisjunction):
+ (JSC::Yarr::RegexGenerator::generateParenthesesGreedyNoBacktrack):
+ (JSC::Yarr::RegexGenerator::generateTerm):
+ (JSC::Yarr::RegexGenerator::RegexGenerator):
+ (JSC::Yarr::RegexGenerator::shouldFallBack):
+ (JSC::Yarr::jitCompileRegex):
+ * yarr/RegexPattern.h:
+ (JSC::Yarr::RegexPattern::RegexPattern):
+ (JSC::Yarr::RegexPattern::reset):
- * wtf/Platform.h:
+2010-05-26 Gavin Barraclough <barraclough@apple.com>
-2009-07-30 John McCall <rjmccall@apple.com>
+ Reviewed by NOBODY (revert).
- Reviewed by Gavin Barraclough.
+ Temporarily rolling out r60267, I appear to have hoesed perf at the last minute. :-/ Fixing.
- Optimize the X86_64 trampolines: avoid the need for filler arguments
- and move the stub-args area closer to the stack pointer.
+ * yarr/RegexCompiler.cpp:
+ (JSC::Yarr::RegexPatternConstructor::atomBackReference):
+ (JSC::Yarr::RegexPatternConstructor::quantifyAtom):
+ * yarr/RegexJIT.cpp:
+ (JSC::Yarr::RegexGenerator::TermGenerationState::term):
+ (JSC::Yarr::RegexGenerator::generateParenthesesSingle):
+ (JSC::Yarr::RegexGenerator::generateTerm):
+ (JSC::Yarr::RegexGenerator::RegexGenerator):
+ (JSC::Yarr::jitCompileRegex):
+ * yarr/RegexPattern.h:
+ (JSC::Yarr::RegexPattern::RegexPattern):
+ (JSC::Yarr::RegexPattern::reset):
- * jit/JIT.h: adjust patch offsets because of slight code-size change
- * jit/JITCode.h:
- (JSC::JITCode::execute): don't pass filler args
- * jit/JITStubs.cpp:
- (ctiTrampoline): (X86_64): push args onto stack, use args directly
- (ctiVMThrowTrampoline): (X86_64): adjust %rsp by correct displacement
- (ctiOpThrowNotCaught): (X86_64): adjust %rsp by correct displacement
- * jit/JITStubs.h:
- (JITStackFrame): (X86_64): move args area earlier
- (ctiTrampoline): remove filler args from prototype
+2010-05-26 Gustavo Noronha Silva <gns@gnome.org>
-2009-07-30 Gavin Barraclough <barraclough@apple.com>
+ Build fixes for make distcheck.
- Temporarily revert r46618 since this is b0rking on Linux.
+ * GNUmakefile.am:
-2009-07-23 Gavin Barraclough <barraclough@apple.com>
+2010-05-26 Gavin Barraclough <barraclough@apple.com>
Reviewed by Oliver Hunt.
- Make get_by_id/put_by_id/method_check/call defer optimization using a data flag rather than a code modification.
- ( https://bugs.webkit.org/show_bug.cgi?id=27635 )
-
- This improves performance of ENABLE(ASSEMBLER_WX_EXCLUSIVE) builds by 2-2.5%, reducing the overhead to about 2.5%.
- (No performance impact with ASSEMBLER_WX_EXCLUSIVE disabled).
-
- * bytecode/CodeBlock.cpp:
- (JSC::printStructureStubInfo):
- - Make StructureStubInfo store the type as an integer, rather than an OpcodeID.
-
- * bytecode/CodeBlock.h:
- (JSC::):
- (JSC::CallLinkInfo::seenOnce):
- (JSC::CallLinkInfo::setSeen):
- (JSC::MethodCallLinkInfo::seenOnce):
- (JSC::MethodCallLinkInfo::setSeen):
- - Change a pointer in CallLinkInfo/MethodCallLinkInfo to use a PtrAndFlags, use a flag to track when an op has been executed once.
-
- * bytecode/StructureStubInfo.cpp:
- (JSC::StructureStubInfo::deref):
- - Make StructureStubInfo store the type as an integer, rather than an OpcodeID.
-
- * bytecode/StructureStubInfo.h:
- (JSC::StructureStubInfo::StructureStubInfo):
- (JSC::StructureStubInfo::initGetByIdSelf):
- (JSC::StructureStubInfo::initGetByIdProto):
- (JSC::StructureStubInfo::initGetByIdChain):
- (JSC::StructureStubInfo::initGetByIdSelfList):
- (JSC::StructureStubInfo::initGetByIdProtoList):
- (JSC::StructureStubInfo::initPutByIdTransition):
- (JSC::StructureStubInfo::initPutByIdReplace):
- (JSC::StructureStubInfo::seenOnce):
- (JSC::StructureStubInfo::setSeen):
- - Make StructureStubInfo store the type as an integer, rather than an OpcodeID, add a flag to track when an op has been executed once.
-
- * bytecompiler/BytecodeGenerator.cpp:
- (JSC::BytecodeGenerator::emitGetById):
- (JSC::BytecodeGenerator::emitPutById):
- - Make StructureStubInfo store the type as an integer, rather than an OpcodeID.
-
- * jit/JIT.cpp:
- (JSC::JIT::privateCompileCTIMachineTrampolines):
- (JSC::JIT::unlinkCall):
- - Remove the "don't lazy link" stage of calls.
-
- * jit/JIT.h:
- (JSC::JIT::compileCTIMachineTrampolines):
- - Remove the "don't lazy link" stage of calls.
-
- * jit/JITCall.cpp:
- (JSC::JIT::compileOpCallSlowCase):
- - Remove the "don't lazy link" stage of calls.
-
- * jit/JITStubs.cpp:
- (JSC::JITThunks::JITThunks):
- (JSC::JITThunks::tryCachePutByID):
- (JSC::JITThunks::tryCacheGetByID):
- (JSC::JITStubs::DEFINE_STUB_FUNCTION):
- (JSC::JITStubs::getPolymorphicAccessStructureListSlot):
- - Remove the "don't lazy link" stage of calls, and the "_second" stage of get_by_id/put_by_id/method_check.
-
- * jit/JITStubs.h:
- (JSC::JITThunks::ctiStringLengthTrampoline):
- (JSC::JITStubs::):
- - Remove the "don't lazy link" stage of calls, and the "_second" stage of get_by_id/put_by_id/method_check.
-
- * wtf/PtrAndFlags.h:
- (WTF::PtrAndFlags::PtrAndFlags):
- (WTF::PtrAndFlags::operator!):
- (WTF::PtrAndFlags::operator->):
- - Add ! and -> operators, add constuctor with pointer argument.
-
-2009-07-30 Geoffrey Garen <ggaren@apple.com>
+ Bug 39795 - Add support for YARR JIT generation of greedy quantified parens at the end of the main disjunction.
- Reviewed by Gavin Barraclough.
-
- Fixed failing tests seen on Windows buildbot.
-
- * jit/JITStubs.cpp:
- (JSC::DEFINE_STUB_FUNCTION):
- * jit/JITStubs.h:
- (JSC::): Use "int" instead of "bool" to guarantee a 32-bit result,
- regardless of compiler. gcc on mac uses 32-bit values for bool,
- but gcc on linux and MSVC on Windows use 8-bit values.
+ If the last item in a main disjunction is a quantified set of parentheses,
+ this is easier to code generate for than the general case for quantified
+ parentheses. This is because we never need to backtrack into the parentheses
+ - the first match will be the final and accepted match.
-2009-07-30 Geoffrey Garen <ggaren@apple.com>
+ This patch also somewhat reverts a recent change to when fallback to PCRE
+ occurs. At the minute the compiler is tracking on patterns which will
+ require JIT fallback. This is handy from a performance perspective (it saves
+ the failed attempt at JIT compilation), but it means introducing knowledge
+ of the JITs capabilities into the other layers of the regex compilers. For
+ the specific feature of back-references, add a flag tracking their presence
+ on the pattern, and make these expressions fallback without attempting to
+ JIT. For parentheses, return to detecting which cases are have or have not
+ been handled during JIT compilation.
- Windows build fix: added missing symbols on Windows.
+ 18% progression on tagcloud, ~1.5% overall on sunspidey.
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
-
-2009-07-30 Geoffrey Garen <ggaren@apple.com>
-
- Windows build fix: removed stale symbols on Windows.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
-
-=== End merge of nitro-extreme branch 2009-07-30 ===
-
-2009-07-20 Geoffrey Garen <ggaren@apple.com>
-
- Fixed a post-review typo in r46066 that caused tons of test failures.
-
- SunSpider reports no change.
-
- * runtime/JSArray.cpp:
- (JSC::JSArray::JSArray): Initialize the full vector capacity, to avoid
- uninitialized members at the end.
-
-2009-07-20 Geoffrey Garen <ggaren@apple.com>
-
- Windows WebKit build fix: Added some missing exports.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
-
-2009-07-17 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Get the branch working on windows.
- https://bugs.webkit.org/show_bug.cgi?id=27391
-
- SunSpider says 0.3% faster.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: Updated
- MSVC export lists to fix linker errors.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added / removed
- new / old project files.
-
- * jit/JIT.cpp:
- (JSC::JIT::privateCompileCTIMachineTrampolines): Used #pragma pack to tell
- MSVC that these structures represent actual memory layout, and should not be
- automatically aligned. Changed the return value load to load a 64bit quantity
- into the canonical registers.
-
- * jit/JIT.h: Moved OBJECT_OFFSETOF definition to StdLibExtras.h because
- it's needed by more than just the JIT, and it supplements a standard library
- macro (offsetof).
-
- * jit/JITCall.cpp:
- (JSC::JIT::compileOpCallInitializeCallFrame): Fixed an incorrectly signed
- cast to resolve an MSVC warning.
-
- * jit/JITStubs.h: Used #pragma pack to tell MSVC that these structures
- represent actual memory layout, and should not be automatically aligned.
-
- * runtime/JSArray.cpp:
- (JSC::JSArray::JSArray): Replaced memset_pattern8 with a for loop, since
- memset_pattern8 is not portable. (I verified that this version of the loop
- gives the best performance / generated code in GCC.)
-
- * runtime/JSObject.h:
- (JSC::JSObject::JSObject): Removed accidental usage of FIELD_OFFSET --
- OBJECT_OFFSETOF is our new macro name. (FIELD_OFFSET conflicts with a
- definition in winnt.h.)
-
- * runtime/JSValue.cpp: Added some headers needed by non-all-in-one builds.
-
- * runtime/JSValue.h:
- (JSC::JSValue::): Made the tag signed, to match MSVC's signed enum values.
- (GCC doesn't seem to care one way or the other.)
-
- * wtf/MainThread.cpp: Moved the StdLibExtras.h #include -- I did this a
- while ago to resolve a conflict with winnt.h. I can't remember if it's truly
- still needed, but what the heck.
-
- * wtf/StdLibExtras.h: Moved OBJECT_OFFSETOF definition here.
-
-2009-07-06 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig (?).
-
- Fixed an assertion seen during the stress test.
-
- Don't assume that, if op1 is constant, op2 is not, and vice versa. Sadly,
- not all constants get folded.
-
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_jnless):
- (JSC::JIT::emitSlow_op_jnless):
- (JSC::JIT::emit_op_jnlesseq):
- (JSC::JIT::emitSlow_op_jnlesseq):
-
-2009-07-06 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Include op_convert_this in result caching.
-
- No change on SunSpider or v8.
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_convert_this):
-
- * jit/JITStubs.cpp:
- (JSC::DEFINE_STUB_FUNCTION):
- * jit/JITStubs.h:
- (JSC::): Made the op_convert_this JIT stub return an EncodedJSValue, so
- to maintain the result caching contract that { tag, payload } can be
- found in { regT1, regT0 }.
-
-2009-07-06 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Implemented result chaining.
-
- 1% faster on SunSpider. 4%-5% faster on v8.
-
- * assembler/MacroAssemblerX86Common.h:
- (JSC::MacroAssemblerX86Common::move):
- * assembler/X86Assembler.h:
- (JSC::X86Assembler::movl_rr): Added an optimization to eliminate
- no-op mov instructions, to simplify chaining.
-
- * jit/JIT.cpp:
- (JSC::JIT::JIT):
- * jit/JIT.h: Added data members and helper functions for recording
- chained results. We record both a mapping from virtual to machine register
- and the opcode for which the mapping is valid, to help ensure that the
- mapping isn't used after the mapped register has been stomped by other
- instructions.
-
- * jit/JITCall.cpp:
- (JSC::JIT::compileOpCallVarargs):
- (JSC::JIT::compileOpCallVarargsSlowCase):
- (JSC::JIT::emit_op_ret):
- (JSC::JIT::emit_op_construct_verify):
- (JSC::JIT::compileOpCall):
- (JSC::JIT::compileOpCallSlowCase): Chain function call results.
-
- * jit/JITInlineMethods.h:
- (JSC::JIT::emitLoadTag):
- (JSC::JIT::emitLoadPayload):
- (JSC::JIT::emitLoad):
- (JSC::JIT::emitLoad2):
- (JSC::JIT::isLabeled):
- (JSC::JIT::map):
- (JSC::JIT::unmap):
- (JSC::JIT::isMapped):
- (JSC::JIT::getMappedPayload):
- (JSC::JIT::getMappedTag): Use helper functions when loading virtual
- registers into machine registers, in case the loads can be eliminated
- by chaining.
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_mov):
- (JSC::JIT::emit_op_end):
- (JSC::JIT::emit_op_instanceof):
- (JSC::JIT::emit_op_get_global_var):
- (JSC::JIT::emit_op_put_global_var):
- (JSC::JIT::emit_op_get_scoped_var):
- (JSC::JIT::emit_op_put_scoped_var):
- (JSC::JIT::emit_op_to_primitive):
- (JSC::JIT::emit_op_resolve_global):
- (JSC::JIT::emit_op_jneq_ptr):
- (JSC::JIT::emit_op_next_pname):
- (JSC::JIT::emit_op_to_jsnumber):
- (JSC::JIT::emit_op_catch): Chain results from these opcodes.
-
- (JSC::JIT::emit_op_profile_will_call):
- (JSC::JIT::emit_op_profile_did_call): Load the profiler into regT2 to
- avoid stomping a chained result.
-
- * jit/JITPropertyAccess.cpp:
- (JSC::JIT::emit_op_method_check):
- (JSC::JIT::emit_op_get_by_val):
- (JSC::JIT::emit_op_get_by_id): Chain results from these opcodes.
-
- * jit/JITStubCall.h:
- (JSC::JITStubCall::addArgument): Always use { regT1, regT0 }, to facilitate
- chaining.
-
- (JSC::JITStubCall::call): Unmap all mapped registers, since our callee
- stub might stomp them.
-
-2009-07-01 Sam Weinig <sam@webkit.org>
-
- Reviewed by Gavin Barraclough.
-
- Don't reload values in emitBinaryDoubleOp.
-
- SunSpider reports a 0.6% progression.
-
- * jit/JIT.h:
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_jnless):
- (JSC::JIT::emit_op_jnlesseq):
- (JSC::JIT::emitBinaryDoubleOp):
-
-2009-07-01 Sam Weinig <sam@webkit.org>
-
- Reviewed by Geoffrey Garen.
-
- Convert op_div to load op1 and op2 up front.
-
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_div):
-
-2009-07-01 Sam Weinig <sam@webkit.org>
-
- Reviewed by Geoffrey Garen.
-
- Don't emit code in emitBinaryDoubleOp if code is unreachable, observable
- via an empty (unlinked) jumplist passed in. This only effects op_jnless
- and op_jnlesseq at present.
-
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emitSlow_op_jnless):
- (JSC::JIT::emitSlow_op_jnlesseq):
- (JSC::JIT::emitBinaryDoubleOp):
-
-2009-07-01 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Converted op_mod to put { tag, payload } in { regT1, regT0 }, and
- tidied up its constant case.
-
- SunSpider reports a 0.2% regression, but a micro-benchmark of op_mod
- shows a 12% speedup, and the SunSpider test that uses op_mod most should
- benefit a lot from result caching in the end, since it almost always
- performs (expression) % constant.
-
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_mod):
- (JSC::JIT::emitSlow_op_mod):
-
-2009-06-30 Sam Weinig <sam@webkit.org>
-
- Reviewed by Geoffrey Garen.
-
- Converted some more arithmetic ops to put { tag, payload } in
- { regT1, regT0 }.
-
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_mul):
- (JSC::JIT::emitSlow_op_mul):
-
-2009-06-30 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Converted some more arithmetic ops to put { tag, payload } in
- { regT1, regT0 }, and added a case for subtract constant.
-
- SunSpider says no change. v8 says 0.3% slower.
-
- * jit/JIT.h:
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_add):
- (JSC::JIT::emitAdd32Constant):
- (JSC::JIT::emitSlow_op_add):
- (JSC::JIT::emit_op_sub):
- (JSC::JIT::emitSub32Constant):
- (JSC::JIT::emitSlow_op_sub):
-
-2009-06-30 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Sam Weinig.
-
- Remove more uses of addressFor(), load double constants directly from
- the constantpool in the CodeBlock, rather than from the register file.
-
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emitAdd32Constant):
- (JSC::JIT::emitBinaryDoubleOp):
-
-2009-06-30 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Fixed a bug in postfix ops, where we would treat x = x++ and x = x--
- as a no-op, even if x were not an int, and the ++/-- could have side-effects.
-
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_post_inc):
- (JSC::JIT::emitSlow_op_post_inc):
- (JSC::JIT::emit_op_post_dec):
- (JSC::JIT::emitSlow_op_post_dec):
-
-2009-06-30 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Converted some arithmetic ops to put { tag, payload } in
- { regT1, regT0 }.
-
- SunSpider says 0.7% faster. v8 says no change.
-
- * jit/JIT.h:
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_jnless):
- (JSC::JIT::emit_op_jnlesseq):
- (JSC::JIT::emit_op_lshift):
- (JSC::JIT::emit_op_rshift):
- (JSC::JIT::emit_op_bitand):
- (JSC::JIT::emit_op_bitor):
- (JSC::JIT::emit_op_bitxor):
- * jit/JITInlineMethods.h:
- (JSC::JIT::isOperandConstantImmediateInt):
- (JSC::JIT::getOperandConstantImmediateInt):
-
-2009-06-30 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Sam Weinig.
-
- Start removing cases of addressFor().
-
- * jit/JIT.h:
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emitAdd32Constant):
- (JSC::JIT::emitBinaryDoubleOp):
- (JSC::JIT::emit_op_div):
- * jit/JITInlineMethods.h:
- (JSC::JIT::emitLoadDouble):
- (JSC::JIT::emitLoadInt32ToDouble):
- (JSC::JIT::emitStoreDouble):
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_jfalse):
- (JSC::JIT::emit_op_jtrue):
-
-2009-06-30 Geoffrey Garen <ggaren@apple.com>
-
- Rolled back in my last patch with regression fixed.
-
- * jit/JIT.cpp:
- (JSC::JIT::privateCompileSlowCases):
- * jit/JIT.h:
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_loop_if_less):
- (JSC::JIT::emit_op_loop_if_lesseq):
- (JSC::JIT::emit_op_resolve_global):
- (JSC::JIT::emitSlow_op_resolve_global):
- (JSC::JIT::emit_op_eq):
- (JSC::JIT::emitSlow_op_eq):
- (JSC::JIT::emit_op_neq):
- (JSC::JIT::emitSlow_op_neq):
-
-2009-06-30 Geoffrey Garen <ggaren@apple.com>
-
- Rolled out my last patch because it was a 2% SunSpider regression.
-
- * jit/JIT.cpp:
- (JSC::JIT::privateCompileSlowCases):
- * jit/JIT.h:
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_loop_if_less):
- (JSC::JIT::emit_op_loop_if_lesseq):
- (JSC::JIT::emit_op_resolve_global):
- (JSC::JIT::emit_op_eq):
- (JSC::JIT::emitSlow_op_eq):
- (JSC::JIT::emit_op_neq):
- (JSC::JIT::emitSlow_op_neq):
-
-2009-06-30 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Gavin "Sam Weinig" Barraclough.
-
- Standardized the rest of our opcodes to put { tag, payload } in
- { regT1, regT0 } where possible.
-
- * jit/JIT.cpp:
- (JSC::JIT::privateCompileSlowCases):
- * jit/JIT.h:
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_loop_if_less):
- (JSC::JIT::emit_op_loop_if_lesseq):
- (JSC::JIT::emit_op_resolve_global):
- (JSC::JIT::emitSlow_op_resolve_global):
- (JSC::JIT::emit_op_eq):
- (JSC::JIT::emitSlow_op_eq):
- (JSC::JIT::emit_op_neq):
- (JSC::JIT::emitSlow_op_neq):
-
-2009-06-30 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Geoffrey Garen.
-
- Replace calls to store32(tagFor()) and store32(payloadFor())
- with emitStoreInt32(), emitStoreBool(), and emitStoreCell().
-
- * jit/JIT.h:
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_negate):
- (JSC::JIT::emit_op_lshift):
- (JSC::JIT::emit_op_rshift):
- (JSC::JIT::emit_op_bitand):
- (JSC::JIT::emitBitAnd32Constant):
- (JSC::JIT::emit_op_bitor):
- (JSC::JIT::emitBitOr32Constant):
- (JSC::JIT::emit_op_bitxor):
- (JSC::JIT::emitBitXor32Constant):
- (JSC::JIT::emit_op_bitnot):
- (JSC::JIT::emit_op_post_inc):
- (JSC::JIT::emit_op_post_dec):
- (JSC::JIT::emit_op_pre_inc):
- (JSC::JIT::emit_op_pre_dec):
- (JSC::JIT::emit_op_add):
- (JSC::JIT::emitAdd32Constant):
- (JSC::JIT::emit_op_sub):
- (JSC::JIT::emitSub32ConstantLeft):
- (JSC::JIT::emitSub32ConstantRight):
- (JSC::JIT::emit_op_mul):
- (JSC::JIT::emitSlow_op_mul):
- (JSC::JIT::emit_op_div):
- (JSC::JIT::emit_op_mod):
- * jit/JITCall.cpp:
- (JSC::JIT::emit_op_load_varargs):
- * jit/JITInlineMethods.h:
- (JSC::JIT::emitStoreInt32):
- (JSC::JIT::emitStoreCell):
- (JSC::JIT::emitStoreBool):
- (JSC::JIT::emitStore):
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_instanceof):
- (JSC::JIT::emit_op_not):
- (JSC::JIT::emit_op_eq):
- (JSC::JIT::emitSlow_op_eq):
- (JSC::JIT::emit_op_neq):
- (JSC::JIT::emitSlow_op_neq):
- (JSC::JIT::compileOpStrictEq):
- (JSC::JIT::emit_op_eq_null):
- (JSC::JIT::emit_op_neq_null):
- * jit/JITStubCall.h:
- (JSC::JITStubCall::call):
-
-2009-06-30 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Standardized the rest of the property access instructions to put { tag,
- payload } in { regT1, regT0 }.
-
- Small v8 speedup, 0.2% SunSpider slowdown.
-
- * jit/JIT.h:
- * jit/JITInlineMethods.h:
- (JSC::JIT::emitLoad):
- (JSC::JIT::emitLoad2):
- * jit/JITPropertyAccess.cpp:
- (JSC::JIT::emit_op_get_by_val):
- (JSC::JIT::emitSlow_op_get_by_val):
- (JSC::JIT::emit_op_put_by_val):
- (JSC::JIT::emitSlow_op_put_by_val):
- (JSC::JIT::emit_op_put_by_id):
- (JSC::JIT::emitSlow_op_put_by_id):
- (JSC::JIT::patchPutByIdReplace):
-
-2009-06-29 Sam Weinig <sam@webkit.org>
-
- Reviewed by Gavin Barraclough.
-
- Various cleanups.
- - Use fpRegT* instead of X86::xmm*.
- - Use a switch statement in emitBinaryDoubleOp instead of a bunch of
- if/elses.
-
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emitAdd32Constant):
- (JSC::JIT::emitBinaryDoubleOp):
- (JSC::JIT::emit_op_div):
-
-2009-06-29 Sam Weinig <sam@webkit.org>
-
- Reviewed by Geoffrey Garen.
-
- Add inline code dealing with doubles for op_jfalse and op_jtrue.
-
- * assembler/MacroAssemblerX86Common.h:
- (JSC::MacroAssemblerX86Common::):
- (JSC::MacroAssemblerX86Common::zeroDouble):
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_jfalse):
- (JSC::JIT::emit_op_jtrue):
-
-2009-06-28 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Standardized op_get_by_id to put { tag, payload } in { regT1, regT0 }.
-
- SunSpider and v8 report maybe 0.2%-0.4% regressions, but the optimization
- this enables will win much more than that back.
-
- * jit/JIT.cpp:
- (JSC::JIT::privateCompileCTIMachineTrampolines):
- * jit/JIT.h:
- * jit/JITPropertyAccess.cpp:
- (JSC::JIT::emit_op_method_check):
- (JSC::JIT::emit_op_get_by_id):
- (JSC::JIT::compileGetByIdHotPath):
- (JSC::JIT::compileGetByIdSlowCase):
- (JSC::JIT::patchGetByIdSelf):
- (JSC::JIT::privateCompilePatchGetArrayLength):
- (JSC::JIT::privateCompileGetByIdProto):
- (JSC::JIT::privateCompileGetByIdSelfList):
- (JSC::JIT::privateCompileGetByIdProtoList):
- (JSC::JIT::privateCompileGetByIdChainList):
- (JSC::JIT::privateCompileGetByIdChain):
-
-2009-06-26 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Maciej Stachowiak.
-
- Standardized op_call to put { tag, payload } in { regT1, regT0 }.
-
- SunSpider and v8 report no change.
-
- * jit/JIT.cpp:
- (JSC::JIT::privateCompileCTIMachineTrampolines):
- * jit/JITCall.cpp:
- (JSC::JIT::compileOpCallInitializeCallFrame):
- (JSC::JIT::compileOpCallSetupArgs):
- (JSC::JIT::compileOpConstructSetupArgs):
- (JSC::JIT::compileOpCallVarargsSetupArgs):
- (JSC::JIT::compileOpCallVarargs):
- (JSC::JIT::compileOpCall):
- (JSC::JIT::compileOpCallSlowCase):
-
-2009-06-26 Sam Weinig <sam@webkit.org>
-
- Reviewed by Geoffrey Garen.
-
- Handle multiplying by zero a little better by
- inlining the case that both operands are non-negative
- into the slowpath.
-
- * assembler/MacroAssemblerX86Common.h:
- (JSC::MacroAssemblerX86Common::branchOr32):
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_mul):
- (JSC::JIT::emitSlow_op_mul):
-
-2009-06-25 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Optimize x++ to ++x inside for loops.
-
- Sadly, no measurable speedup, but this should help with result chaining.
-
- * parser/Nodes.cpp:
- (JSC::ForNode::emitBytecode):
-
-2009-06-25 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Standardized some more opcodes to put { tag, payload } in { regT1, regT0 }.
-
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emitSlow_op_bitnot):
- (JSC::JIT::emit_op_post_inc):
-
-2009-06-25 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Standardized some more opcodes to put { tag, payload } in { regT1, regT0 }.
-
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_bitnot):
- (JSC::JIT::emit_op_post_dec):
- (JSC::JIT::emit_op_pre_inc):
- (JSC::JIT::emitSlow_op_pre_inc):
- (JSC::JIT::emit_op_pre_dec):
- (JSC::JIT::emitSlow_op_pre_dec):
-
-2009-06-25 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Standardized some more opcodes to put { tag, payload } in { regT1, regT0 }.
-
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_negate):
- (JSC::JIT::emitSlow_op_negate):
- * jit/JITCall.cpp:
- (JSC::JIT::emit_op_construct_verify):
- (JSC::JIT::emitSlow_op_construct_verify):
-
-2009-06-25 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Standardized some more opcodes to put { tag, payload } in { regT1, regT0 }.
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_loop_if_true):
- (JSC::JIT::emit_op_jfalse):
- (JSC::JIT::emit_op_jtrue):
- (JSC::JIT::emit_op_jeq_null):
- (JSC::JIT::emit_op_jneq_null):
- (JSC::JIT::emit_op_eq_null):
- (JSC::JIT::emit_op_neq_null):
-
-2009-06-25 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig (sort of, maybe).
-
- Fixed some ASSERTs in http/tests/security.
-
- These ASSERTs were introduced by http://trac.webkit.org/changeset/45057,
- but the underlying problem was actually older. http://trac.webkit.org/changeset/45057
- just exposed the problem by enabling optimization in more cases.
-
- The ASSERTs fired because we tested PropertySlot::slotBase() for validity,
- but slotBase() ASSERTs if it's invalid, so we would ASSERT before
- the test could happen. Solution: Remove the ASSERT. Maybe it was valid
- once, but it clearly goes against a pattern we've deployed of late.
-
- The underlying problem was that WebCore would re-use a PropertySlot in
- the case of a forwarding access, and the second use would not completely
- overwrite the first use. Solution: Make sure to overwrite m_offset when
- setting a value on a PropertySlot. (Other values already get implicitly
- overwritten during reuse.)
-
- * runtime/PropertySlot.h:
- (JSC::PropertySlot::PropertySlot):
- (JSC::PropertySlot::setValueSlot):
- (JSC::PropertySlot::setValue):
- (JSC::PropertySlot::setRegisterSlot):
- (JSC::PropertySlot::setUndefined):
- (JSC::PropertySlot::slotBase):
- (JSC::PropertySlot::clearOffset):
-
-2009-06-24 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Geoff Garen.
-
- Enable JIT_OPTIMIZE_METHOD_CALLS on the branch, implementation matches current implemenatation in ToT.
-
- * jit/JIT.h:
- * jit/JITPropertyAccess.cpp:
- (JSC::JIT::emit_op_method_check):
- (JSC::JIT::emitSlow_op_method_check):
- (JSC::JIT::emit_op_get_by_id):
- (JSC::JIT::compileGetByIdHotPath):
- (JSC::JIT::emitSlow_op_get_by_id):
- (JSC::JIT::compileGetByIdSlowCase):
+ * yarr/RegexCompiler.cpp:
+ (JSC::Yarr::RegexPatternConstructor::atomBackReference):
+ (JSC::Yarr::RegexPatternConstructor::quantifyAtom):
+ * yarr/RegexJIT.cpp:
+ (JSC::Yarr::RegexGenerator::TermGenerationState::isLastTerm):
+ (JSC::Yarr::RegexGenerator::TermGenerationState::isMainDisjunction):
+ (JSC::Yarr::RegexGenerator::generateParenthesesGreedyNoBacktrack):
+ (JSC::Yarr::RegexGenerator::generateTerm):
+ (JSC::Yarr::RegexGenerator::RegexGenerator):
+ (JSC::Yarr::RegexGenerator::shouldFallBack):
+ (JSC::Yarr::jitCompileRegex):
+ * yarr/RegexPattern.h:
+ (JSC::Yarr::RegexPattern::RegexPattern):
+ (JSC::Yarr::RegexPattern::reset):
-2009-06-23 Geoffrey Garen <ggaren@apple.com>
+2010-05-26 Geoffrey Garen <ggaren@apple.com>
Reviewed by Sam Weinig.
- Bit off a tiny bit more of standardizing opcode behavior to help with result
- caching.
-
- SunSpider reports no change, v8 maybe a tiny speedup.
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_to_jsnumber):
- (JSC::JIT::emitSlow_op_to_jsnumber):
- (JSC::JIT::emit_op_convert_this):
- (JSC::JIT::emitSlow_op_convert_this):
-
-2009-06-23 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
+ Fixed a crash seen on the Leopard bot, caused by merge.
- Bit off a tiny bit more of standardizing opcode behavior to help with result
- caching -- including removing my old enemy, op_resolve_function, because
- it was non-standard, and removing it felt better than helping it limp along.
-
- SunSpider reports no change, v8 maybe a tiny speedup.
-
- * bytecode/CodeBlock.cpp:
- (JSC::CodeBlock::dump):
- * bytecode/Opcode.h:
- * bytecompiler/BytecodeGenerator.cpp:
- * bytecompiler/BytecodeGenerator.h:
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::privateExecute):
- * jit/JIT.cpp:
- (JSC::JIT::privateCompileMainPass):
- * jit/JIT.h:
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_get_scoped_var):
- (JSC::JIT::emit_op_put_scoped_var):
- (JSC::JIT::emit_op_to_primitive):
- (JSC::JIT::emitSlow_op_to_primitive):
* jit/JITStubs.cpp:
- * jit/JITStubs.h:
- * parser/Nodes.cpp:
- (JSC::FunctionCallResolveNode::emitBytecode):
-
-2009-06-23 Geoffrey Garen <ggaren@apple.com>
+ (JSC::DEFINE_STUB_FUNCTION): Get the return address from the callframe,
+ since it's no longer passed to us as an argument.
- Reviewed by Sam Weinig.
-
- Bit off a tiny bit of standardizing opcode behavior to help with result
- caching.
-
- 0.6% SunSpider speedup. 0.3% v8 speedup.
-
- * jit/JITInlineMethods.h:
- (JSC::JIT::emitLoad): Accomodate a base register that overlaps with payload
- by loading tag before payload, to avoid stomping base/payload.
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_mov): Abide by the standard "tag in regT1, payload in
- regT0" semantics.
-
- (JSC::JIT::emit_op_get_global_var):
- (JSC::JIT::emit_op_put_global_var): Ditto. Also, removed some irrelevent
- loads while I was at it. The global object's "d" pointer never changes
- after construction.
-
-2009-06-23 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Sam Weinig.
+2010-05-25 Geoffrey Garen <ggaren@apple.com>
- Remove 'arguments' field from Register union (again).
- This time do so without breaking tests (radical, I know).
+ Fixed build failure caused by merge.
- * interpreter/CallFrame.h:
- (JSC::ExecState::optionalCalleeArguments):
- (JSC::ExecState::setArgumentCount):
- (JSC::ExecState::init):
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::dumpRegisters):
- (JSC::Interpreter::unwindCallFrame):
- (JSC::Interpreter::privateExecute):
- (JSC::Interpreter::retrieveArguments):
- * interpreter/Register.h:
- (JSC::Register::withInt):
- (JSC::Register::):
- (JSC::Register::Register):
- (JSC::Register::i):
* jit/JITStubs.cpp:
- (JSC::JITStubs::cti_op_tear_off_arguments):
- * runtime/Arguments.h:
- (JSC::JSActivation::copyRegisters):
- (JSC::Register::arguments):
- * runtime/JSActivation.cpp:
- (JSC::JSActivation::argumentsGetter):
- * runtime/JSActivation.h:
-
-2009-06-23 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Removed some result register tracking cruft in preparation for a new
- result tracking mechanism.
-
- SunSpider reports no change.
-
- * assembler/AbstractMacroAssembler.h:
- * assembler/X86Assembler.h:
- (JSC::X86Assembler::JmpDst::JmpDst): No need to track jump targets in
- machine code; we already do this in bytecode.
-
- * jit/JIT.cpp:
- (JSC::JIT::JIT):
- (JSC::JIT::emitTimeoutCheck): Make sure to save and restore the result
- registers, so an opcode with a timeout check can still benefit from result
- register caching.
-
- (JSC::JIT::privateCompileMainPass):
- (JSC::JIT::privateCompileSlowCases): Removed calls to killLastResultRegister()
- in preparation for something new.
-
- * jit/JIT.h:
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_jnless):
- (JSC::JIT::emit_op_jnlesseq):
- * jit/JITInlineMethods.h:
- (JSC::JIT::emitGetFromCallFrameHeaderPtr):
- (JSC::JIT::emitGetFromCallFrameHeader32):
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_jmp):
- (JSC::JIT::emit_op_jfalse):
- (JSC::JIT::emit_op_jtrue):
- (JSC::JIT::emit_op_jeq_null):
- (JSC::JIT::emit_op_jneq_null):
- (JSC::JIT::emit_op_jneq_ptr):
- (JSC::JIT::emit_op_jsr):
- (JSC::JIT::emit_op_sret):
- (JSC::JIT::emit_op_jmp_scopes): ditto
-
- * jit/JITStubCall.h:
- (JSC::JITStubCall::JITStubCall):
- (JSC::JITStubCall::getArgument): added a mechanism for reloading an argument
- you passed to a JIT stub, for use in emitTimeoutCheck.
-
-2009-06-23 Sam Weinig <sam@webkit.org>
-
- Reviewed by Geoffrey Garen.
-
- Remove now-useless inplace variants of binary ops.
-
- * jit/JIT.h:
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_bitand):
- (JSC::JIT::emit_op_bitor):
- (JSC::JIT::emit_op_bitxor):
- (JSC::JIT::emit_op_add):
- (JSC::JIT::emit_op_sub):
- (JSC::JIT::emit_op_mul):
-
-2009-06-23 Sam Weinig <sam@webkit.org>
-
- Reviewed by Geoffrey Garen.
-
- Move off memory operands to aid in re-enabling result caching.
-
- - No regression measured.
-
- * jit/JIT.h:
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_negate):
- (JSC::JIT::emit_op_jnless):
- (JSC::JIT::emit_op_jnlesseq):
- (JSC::JIT::emit_op_lshift):
- (JSC::JIT::emit_op_rshift):
- (JSC::JIT::emit_op_bitand):
- (JSC::JIT::emitBitAnd32Constant):
- (JSC::JIT::emitBitAnd32InPlace):
- (JSC::JIT::emit_op_bitor):
- (JSC::JIT::emitBitOr32Constant):
- (JSC::JIT::emitBitOr32InPlace):
- (JSC::JIT::emit_op_bitxor):
- (JSC::JIT::emitBitXor32Constant):
- (JSC::JIT::emitBitXor32InPlace):
- (JSC::JIT::emit_op_bitnot):
- (JSC::JIT::emit_op_post_inc):
- (JSC::JIT::emit_op_post_dec):
- (JSC::JIT::emit_op_pre_inc):
- (JSC::JIT::emitSlow_op_pre_inc):
- (JSC::JIT::emit_op_pre_dec):
- (JSC::JIT::emitSlow_op_pre_dec):
- (JSC::JIT::emit_op_add):
- (JSC::JIT::emitAdd32Constant):
- (JSC::JIT::emitAdd32InPlace):
- (JSC::JIT::emitSlow_op_add):
- (JSC::JIT::emitSlowAdd32Constant):
- (JSC::JIT::emit_op_sub):
- (JSC::JIT::emitSlow_op_sub):
- (JSC::JIT::emitSub32ConstantLeft):
- (JSC::JIT::emitSub32ConstantRight):
- (JSC::JIT::emitSub32InPlaceLeft):
- (JSC::JIT::emitSub32InPlaceRight):
- (JSC::JIT::emitBinaryDoubleOp):
- (JSC::JIT::emit_op_mul):
- (JSC::JIT::emitMul32InPlace):
- (JSC::JIT::emit_op_div):
- (JSC::JIT::emit_op_mod):
- * jit/JITCall.cpp:
- (JSC::JIT::compileOpCallVarargs):
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_loop_if_less):
- (JSC::JIT::emit_op_loop_if_lesseq):
- (JSC::JIT::emit_op_instanceof):
- (JSC::JIT::emit_op_to_primitive):
- (JSC::JIT::emit_op_not):
- (JSC::JIT::emit_op_jneq_ptr):
- (JSC::JIT::emit_op_eq):
- (JSC::JIT::emit_op_neq):
- (JSC::JIT::emit_op_to_jsnumber):
- * jit/JITPropertyAccess.cpp:
- (JSC::JIT::emit_op_get_by_val):
- (JSC::JIT::emit_op_put_by_val):
+ (JSC::DEFINE_STUB_FUNCTION): On error, return a single value, since this
+ function no longer returns a pair.
-2009-06-23 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Fixed some missing and/or misplaced labels in bytecode generation, so
- we don't have to work around them in JIT code generation.
-
- * bytecompiler/BytecodeGenerator.cpp:
- (JSC::BytecodeGenerator::emitJumpSubroutine):
- * parser/Nodes.cpp:
- (JSC::TryNode::emitBytecode):
-
-2009-06-22 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- For member function calls, emit "this" directly into the "this" slot
- for the function call, instead of moving it there later. This reduces
- time spent in op_mov during certain calls, like "a.b.c()".
-
- 1%-2% speedup on v8, mostly richards and delta-blue.
-
- * parser/Nodes.cpp:
- (JSC::FunctionCallDotNode::emitBytecode):
-
-2009-06-22 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Sam Weinig.
-
- Remove 'arguments' field from Register union. Having JSCell derived types in the union is
- dangerous since it opens the possibility for the field to be written as a raw pointer but
- then read as a JSValue. This will lead to statle data being read for the tag, which may
- be dangerous. Having removed Arguments* types form Register, all arguments objects must
- always explicitly be stored in the register file as JSValues.
-
- * interpreter/CallFrame.h:
- (JSC::ExecState::optionalCalleeArguments):
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::unwindCallFrame):
- (JSC::Interpreter::privateExecute):
- (JSC::Interpreter::retrieveArguments):
- * interpreter/Register.h:
- (JSC::Register::):
- * jit/JITStubs.cpp:
- (JSC::JITStubs::cti_op_tear_off_arguments):
- * runtime/Arguments.h:
- (JSC::JSActivation::copyRegisters):
- * runtime/JSActivation.cpp:
- (JSC::JSActivation::argumentsGetter):
- * runtime/JSActivation.h:
-
-2009-06-03 Sam Weinig <sam@webkit.org>
-
- Reviewed by Geoffrey Garen.
-
- Add back known this value optimization by abstracting
- slow case if not JSCell jumps.
-
- * jit/JIT.h:
- * jit/JITCall.cpp:
- (JSC::JIT::compileOpCallVarargs):
- (JSC::JIT::compileOpCallVarargsSlowCase):
- (JSC::JIT::compileOpCall):
- (JSC::JIT::compileOpCallSlowCase):
- * jit/JITInlineMethods.h:
- (JSC::JIT::emitJumpSlowCaseIfNotJSCell):
- (JSC::JIT::linkSlowCaseIfNotJSCell):
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_instanceof):
- (JSC::JIT::emitSlow_op_instanceof):
- * jit/JITPropertyAccess.cpp:
- (JSC::JIT::emit_op_get_by_val):
- (JSC::JIT::emitSlow_op_get_by_val):
- (JSC::JIT::emit_op_put_by_val):
- (JSC::JIT::emitSlow_op_put_by_val):
- (JSC::JIT::emit_op_get_by_id):
- (JSC::JIT::emitSlow_op_get_by_id):
- (JSC::JIT::emit_op_put_by_id):
- (JSC::JIT::emitSlow_op_put_by_id):
-
-2009-06-01 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Fixed some of the regression in crypto-aes.js. (8.5% speedup in
- crypto-aes.js.)
-
- SunSpider reports no change overall.
-
- Division was producing double results, which took the slow path through
- array access code.
-
- Strangely, all my attempts at versions of this patch that modified array
- access code to accept ints encoded as doubles along the fast or slow paths
- were regressions. So I did this instead.
-
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_div): When dividing an int by an int, go ahead and try
- to turn the result into an int. Don't just do int division, though, because
- testing shows it to be slower than SSE double division, and the corner
- cases are pretty complicated / lengthy on top of that. Also, don't try
- to canonicalize division of known tiny numerators into ints, since that's a
- waste of time.
-
-2009-05-26 Geoffrey Garen <ggaren@apple.com>
+2010-05-25 Geoffrey Garen <ggaren@apple.com>
Reviewed by Oliver Hunt.
-
- Fixed a regression caused by my recent fix for NaN.
-
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emitBinaryDoubleOp): Actually do the comparison in reverse
- order, like the ChangeLog said we would, bokay?
-
-2009-05-26 Geoffrey Garen <ggaren@apple.com>
- Reviewed by Sam Weinig and Oliver Hunt.
+ <rdar://problem/8020221>
- Fixed two edge cases in %:
-
- - Don't do -2147483648 % x as a fast case, since you might do -2147483648 % -1,
- which will signal a hardware exception due to overflow.
-
- - In the case of a zero remainder, be sure to store negative zero if the
- dividend was zero.
+ Fixed a crash seen on Windows when calling a function with too many
+ arguments.
SunSpider reports no change.
-
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_mod):
- (JSC::JIT::emitSlow_op_mod):
-
-2009-05-25 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Maciej Stachowiak.
-
- Fixed a regression when comparing to NaN.
-
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emitBinaryDoubleOp): For op_jnless and op_jnless_eq, do the
- comparison in reverse order, and jump if the result is below or
- below-or-equal. This ensures that we do jump in the case of NaN.
-
-2009-05-25 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Oliver Hunt.
- SunSpider says no change.
-
- Fixed regressions in fast/js/var-declarations-shadowing.html and
- fast/js/equality.html, caused by recent == and != optimizations.
+ No test because the ASSERT I added fires in existing tests.
* jit/JITStubs.cpp:
- (JSC::JITStubs::cti_op_eq): Don't treat "compare to string" as always
- numeric or string comparison. If the second operand is an object, you
- need to ToPrimitive it, and start all over again. Also, I wrote out each
- of the possible cases explicitly, to cut down on redundant branching.
-
-2009-05-25 Sam Weinig <sam@webkit.org>
-
- Reviewed by Mark Rowe.
-
- Fix bug in fast/js/constant-folding.html where we were not negating
- -0 properly.
-
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_negate):
-
-2009-05-23 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Refactored new slow case codegen for == and !=.
-
- SunSpider reports no change, maybe a tiny speedup.
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emitSlow_op_eq):
- (JSC::JIT::emitSlow_op_neq): Made a vptr comparison a *Ptr operation,
- instead of *32, to make it portable to 64bit. Reorganized the string
- and generic cases to make their control flow a little clearer.
-
-2009-05-23 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Maciej Stachowiak.
-
- Optimized == and != for our new value representation -- especially for strings.
-
- 14% speedup on date-format-tofte.
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_eq):
- (JSC::JIT::emitSlow_op_eq):
- (JSC::JIT::emit_op_neq):
- (JSC::JIT::emitSlow_op_neq):
- * jit/JITStubCall.h:
- (JSC::JITStubCall::JITStubCall):
- * jit/JITStubs.cpp:
- (JSC::JITStubs::cti_op_eq):
- (JSC::JITStubs::cti_op_eq_strings):
- (JSC::JITStubs::cti_op_call_eval):
- * jit/JITStubs.h:
- (JSC::):
- * runtime/JSValue.h:
+ (JSC::DEFINE_STUB_FUNCTION): Make sure to grow the registerFile when too
+ many arguments have been provided, since the caller only allocated enough
+ registerFile space for the arguments it provided, not enough for the extra
+ copy of arguments we're going to need.
-2009-05-22 Sam Weinig <sam@webkit.org>
+2010-05-25 Kwang Yul Seo <skyul@company100.net>
- Reviewed by Gavin Barraclough.
-
- Fix non-SSE enabled builds.
-
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emitSlow_op_add): Don't early return here, we still need to call the JIT stub.
- (JSC::JIT::emitSlow_op_sub): Ditto.
-
-2009-05-22 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Here's a thought: let's not take a jit stub call just to multiply by 1,
- bokay?
-
- imul doesn't set the zero flag, so to test for a zero result, we need
- an explicit instruction. (Luckily, it does set the overflow flag, so
- we can still use that.)
-
- * jit/JIT.h:
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_mul):
- (JSC::JIT::emitSlow_op_mul):
- (JSC::JIT::emitMul32InPlace):
-
-2009-05-22 Sam Weinig <sam@webkit.org>
-
- Reviewed by Geoffrey "Premature Commit" Garen.
-
- Add back constant integer cases for op_add.
-
- * jit/JIT.h:
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_add):
- (JSC::JIT::emitAdd32Constant):
- (JSC::JIT::emitSlow_op_add):
- (JSC::JIT::emitSlowAdd32Constant):
- * jit/JITInlineMethods.h:
- (JSC::JIT::getConstantOperandImmediateDouble):
- (JSC::JIT::isOperandConstantImmediateDouble):
-
-2009-05-22 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Added fast double cases for op_jnless and op_jnlesseq.
-
- * assembler/AbstractMacroAssembler.h:
- (JSC::AbstractMacroAssembler::JumpList::jumps): New accesor, used by
- addSlowCase.
-
- * assembler/X86Assembler.h:
- (JSC::X86Assembler::ucomisd_rm): New method for comparing register to
- memory.
-
- * jit/JIT.h:
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_jnless):
- (JSC::JIT::emitSlow_op_jnless):
- (JSC::JIT::emit_op_jnlesseq):
- (JSC::JIT::emitSlow_op_jnlesseq):
- (JSC::JIT::emit_op_add):
- (JSC::JIT::emit_op_sub):
- (JSC::JIT::emitBinaryDoubleOp):
- (JSC::JIT::emit_op_mul):
- (JSC::JIT::emit_op_div): Modified emitBinaryDoubleOp to accept comparison/jump
- operations in addition to operations with explicit result registers.
-
- * jit/JITInlineMethods.h:
- (JSC::JIT::addSlowCase): Added an "addSlowCase" for JumpLists, so clients
- can track multiple jumps to the same slow case condition together.
-
-2009-05-21 Sam Weinig <sam@webkit.org>
-
- Reviewed by Gavin Barraclough.
-
- Implement op_negate inline fast cases.
-
- * assembler/MacroAssemblerX86Common.h:
- (JSC::MacroAssemblerX86Common::neg32):
- * assembler/X86Assembler.h:
- (JSC::X86Assembler::):
- (JSC::X86Assembler::negl_m):
- (JSC::X86Assembler::xorpd_rr):
- * jit/JIT.cpp:
- (JSC::JIT::privateCompileMainPass):
- (JSC::JIT::privateCompileSlowCases):
- * jit/JIT.h:
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_negate):
- (JSC::JIT::emitSlow_op_negate):
-
-2009-05-20 Sam Weinig <sam@webkit.org>
-
- Reviewed by Gavin Barraclough.
-
- Update the patchOffsetGetByIdSlowCaseCall constant for the
- case that OPCODE_SAMPLING is enabled.
-
- * jit/JIT.h:
-
-2009-05-20 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Added support for inline subtraction of doubles.
-
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_sub):
- (JSC::JIT::emitSlow_op_sub):
- (JSC::JIT::emitSlowSub32InPlaceLeft):
- (JSC::JIT::emitBinaryDoubleOp):
-
-2009-05-20 Sam Weinig <sam@webkit.org>
-
- Reviewed by Geoffrey Garen.
-
- Added support for inline division.
-
- * assembler/X86Assembler.h:
- (JSC::X86Assembler::):
- (JSC::X86Assembler::divsd_rr):
- (JSC::X86Assembler::divsd_mr):
- * bytecode/CodeBlock.cpp:
- (JSC::CodeBlock::dump):
- * bytecode/Opcode.h:
- * bytecompiler/BytecodeGenerator.cpp:
- (JSC::BytecodeGenerator::emitBinaryOp):
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::privateExecute):
- * jit/JIT.cpp:
- (JSC::JIT::privateCompileMainPass):
- (JSC::JIT::privateCompileSlowCases):
- * jit/JIT.h:
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emitBinaryDoubleOp):
- (JSC::JIT::emit_op_div):
- (JSC::JIT::emitSlow_op_div):
-
-2009-05-20 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Added support for inline addition of doubles.
-
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_add):
- (JSC::JIT::emitSlow_op_add):
- (JSC::JIT::emitSlowAdd32InPlace):
- (JSC::JIT::emitBinaryDoubleOp):
- (JSC::JIT::emit_op_mul):
- (JSC::JIT::emitSlow_op_mul):
-
-2009-05-20 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Factored inline double operations into a helper function, so that we
- can reuse this code for other math operations.
-
- * jit/JIT.h:
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emitBinaryDoubleOp):
- (JSC::JIT::emit_op_mul):
- * jit/JITCall.cpp:
- (JSC::JIT::compileOpCallInitializeCallFrame):
-
-2009-05-20 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Added support for inline multiplication of doubles.
-
- * assembler/X86Assembler.h:
- (JSC::X86Assembler::cvtsi2sd_mr): New function, useful for loading an
- int32 into a double register.
-
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_mul):
- (JSC::JIT::emitSlow_op_mul): Filled out these cases for double arithmetic.
-
- * jit/JIT.h:
- * jit/JITInlineMethods.h:
- (JSC::JIT::addressFor): New function, useful for addressing a JSValue's
- full 64bits as a double.
-
-2009-05-19 Sam Weinig <sam@webkit.org>
-
- Reviewed by Geoffrey Garen.
-
- Implement and enable optimized calls.
-
- * jit/JIT.cpp:
- (JSC::JIT::privateCompileCTIMachineTrampolines): Add ENABLE(JIT_OPTIMIZE_CALL) guards
- around the the optimize call only trampolines (virtualCallPreLink and virtualCallLink).
- Update the trampolines to account for the new JSValue representation.
- (JSC::JIT::unlinkCall): Use NULL instead of JSValue noValue.
-
- * jit/JITCall.cpp:
- (JSC::JIT::compileOpCall): Update to account for the new JSValue representation
- (JSC::JIT::compileOpCallSlowCase): Ditto.
-
- * jit/JITStubs.h: Remove incorrect !ENABLE(JIT_OPTIMIZE_CALL) guard.
-
- * wtf/Platform.h: Enable ENABLE_JIT_OPTIMIZE_CALL.
-
-2009-05-19 Sam Weinig <sam@webkit.org>
-
- Reviewed by Geoffrey Garen.
-
- Implement and enable optimized property access.
-
- * assembler/AbstractMacroAssembler.h: Fix comment.
- * jit/JIT.cpp:
- (JSC::JIT::privateCompileCTIMachineTrampolines): Remove array length trampoline
- and implement the string length trampoline.
- * jit/JIT.h: Add new constants for patch offsets.
- * jit/JITInlineMethods.h: Remove FIELD_OFFSET which is now in StdLibExtras.h.
- * jit/JITPropertyAccess.cpp:
- (JSC::JIT::emit_op_get_by_id):
- (JSC::JIT::emitSlow_op_get_by_id):
- (JSC::JIT::emit_op_put_by_id):
- (JSC::JIT::emitSlow_op_put_by_id):
- (JSC::JIT::compilePutDirectOffset):
- (JSC::JIT::compileGetDirectOffset):
- (JSC::JIT::privateCompilePutByIdTransition):
- (JSC::JIT::patchGetByIdSelf):
- (JSC::JIT::patchPutByIdReplace):
- (JSC::JIT::privateCompilePatchGetArrayLength):
- (JSC::JIT::privateCompileGetByIdProto):
- (JSC::JIT::privateCompileGetByIdSelfList):
- (JSC::JIT::privateCompileGetByIdProtoList):
- (JSC::JIT::privateCompileGetByIdChainList):
- (JSC::JIT::privateCompileGetByIdChain):
- * jit/JITStubCall.h:
- (JSC::JITStubCall::addArgument): Add version of addArgument that takes
- two registers for the tag and payload.
- * jit/JITStubs.cpp:
- (JSC::JITStubs::JITStubs): Remove array length trampoline pointer.
- (JSC::JITStubs::cti_op_get_by_id_self_fail):
- * jit/JITStubs.h:
- * runtime/JSObject.h:
- (JSC::JSObject::JSObject): Move m_inheritorID below the property storage
- to align it to a 16 byte boundary.
- * wtf/Platform.h: Enable ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS
- * wtf/StdLibExtras.h: Move FIELD_OFFSET here.
-
-2009-05-17 Sam Weinig <sam@webkit.org>
-
- Reviewed by Geoffrey Garen.
-
- Remove unneeded ExecState parameter from the number JSValue constructors.
-
- * runtime/JSValue.h:
- (JSC::jsNumber):
- (JSC::jsNaN):
- (JSC::JSValue::JSValue):
-
-2009-05-15 Sam Weinig <sam@webkit.org>
-
- Reviewed by Geoffrey Garen.
-
- Implemented fast path for op_put_by_val when putting to arrays.
-
- * jit/JITPropertyAccess.cpp:
- (JSC::JIT::emit_op_put_by_val):
- (JSC::JIT::emitSlow_op_put_by_val):
-
-2009-05-15 Geoffrey Garen <ggaren@apple.com> (Mostly by Sam)
-
- Reviewed by Sam Weinig.
-
- Implemented fast path for op_get_by_val when accessing array.
-
- * jit/JIT.cpp:
- * jit/JITPropertyAccess.cpp:
- (JSC::JIT::emit_op_get_by_val):
- (JSC::JIT::emitSlow_op_get_by_val):
-
-2009-05-14 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Fixed a failure in fast/js/math-transforms.html caused by failing to
- preserve -0 in multiplication.
-
- * assembler/X86Assembler.h:
- (JSC::X86Assembler::jz):
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_mul):
- (JSC::JIT::emitSlow_op_mul):
- (JSC::JIT::emitMul32Constant):
- (JSC::JIT::emitMul32InPlace): Check both for overflow and for zero when
- doing multiplication. Use a slow case to get these right.
-
-2009-05-14 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Fixed a bug in the varargs calling convention.
-
- * jit/JITCall.cpp:
- (JSC::JIT::compileOpCallVarargs): Move the argument count into regT1,
- since that's where ctiVirtualCall expects it to be.
-
-2009-05-14 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Fixed a small bug in instanceof's looping code.
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_instanceof): NULL means the object has no prototype,
- so only loop when *not* equal to NULL.
-
-2009-05-14 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Fixed a small bug in instanceof's result writing code.
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_instanceof): Make sure to fill out the payload bits
- in all cases.
-
-2009-05-14 Sam Weinig <sam@webkit.org>
+ Reviewed by Darin Adler.
- Reviewed by Geoffrey Garen.
+ Build fix for JSFunction
+ https://bugs.webkit.org/show_bug.cgi?id=39658
- Removed an invalid assertion in cti_op_urshift which
- depended on a fast path for op_urshift which has
- never existed.
+ MSVC can't compile one of JSFunction constructors when JIT is disabled.
+ "PassRefPtr<NativeExecutable>" causes the compile error as NativeExecutable is not defined.
+ Add ENABLE(JIT) guard to the constructor.
- * jit/JITStubs.cpp:
- (JSC::JITStubs::cti_op_urshift):
+ * runtime/JSFunction.cpp:
+ (JSC::JSFunction::JSFunction):
+ * runtime/JSFunction.h:
-2009-05-14 Geoffrey Garen <ggaren@apple.com>
+2010-05-24 Gavin Barraclough <barraclough@apple.com>
Reviewed by Sam Weinig.
-
- Fixed loop_if_true, which had the same reversed test that jtrue had.
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_loop_if_true):
-
-2009-05-14 Sam Weinig <sam@webkit.org>
-
- Reviewed by Geoffrey Garen.
-
- In op_neq, we apparently want to check that one value
- does *not* equal another. Go figure.
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_neq):
-
-2009-05-14 Sam Weinig <sam@webkit.org>
-
- Reviewed by Geoffrey Garen.
-
- The slow case of op_mod should call op_mod's jit stub,
- not op_mul. That would be dumb.
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emitSlow_op_mod):
+ Bug 39643 - Clean up code generation in the JIT of stub function calls for op_call.
-2009-05-14 Geoffrey Garen <ggaren@apple.com>
+ Presently, as soon as op-call strays off the hot path we set up a set of values on
+ the stack to be passed as arguments to cti functions, in case any should be called.
- Reviewed by Sam Weinig.
-
- Fixed problems when using 'arguments' due to a half-initialized register.
+ Instead, hoist the setup of the callframe to happen slightly sooner, and make the
+ cti functions to compile & check arity read these values from the callframe. This
+ allows up to remove the deprecated methods to manually set up cti arguments, rather
+ than using JITStubCall.h.
* interpreter/CallFrame.h:
- (JSC::ExecState::setCalleeArguments):
- (JSC::ExecState::init): Require a full JSValue when setting up the
- 'arguments' virtual register, since this register is accessible from JIT
- code and bytecode, and needs to be a true JSValue.
-
- * interpreter/CallFrameClosure.h:
- (JSC::CallFrameClosure::resetCallFrame): ditto
-
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::privateExecute): ditto
-
- * interpreter/Register.h: Removed the constructor that allowed assignment
- of a JSArguments* to a register. That is not safe. See above.
-
- * jit/JITStubs.cpp:
- (JSC::JITStubs::cti_op_create_arguments):
- (JSC::JITStubs::cti_op_create_arguments_no_params): ditto
-
-2009-05-14 Sam Weinig <sam@webkit.org>
-
- Reviewed by Geoffrey Garen.
-
- We really want to go to the slow case in op_jfalse and
- op_jtrue if the value is *not* boolean.
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_jfalse):
- (JSC::JIT::emit_op_jtrue):
-
-2009-05-14 Sam Weinig <sam@webkit.org>
-
- Reviewed by Geoffrey Garen.
-
- Flipped the condition when emitting a an op_loop_if_less or op_loop_if_lesseq
- if the first operand is a constant.
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_loop_if_less):
- (JSC::JIT::emit_op_loop_if_lesseq):
-
-2009-05-14 Sam Weinig <sam@webkit.org>
-
- Reviewed by Geoffrey Garen.
-
- Added missing return in op_jnless and op_jnlesseq.
-
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_jnless):
- (JSC::JIT::emit_op_jnlesseq):
-
-2009-05-14 Sam Weinig <sam@webkit.org>
-
- Reviewed by Geoffrey Garen.
-
- Load constants into the the register file as a temporary measure to
- aid bring up. This allows us to use to treat constants like any
- other virtual register.
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_enter):
- (JSC::JIT::emit_op_enter_with_activation):
-
-2009-05-14 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Implemented op_strict_eq. Original patch by Snowy, by way of Sam and Gavin.
-
- * assembler/MacroAssemblerX86Common.h:
- (JSC::MacroAssemblerX86Common::set8): Added set8, since it's slightly
- faster than set32, and the new value representation usually doesn't
- need set32.
-
- * jit/JIT.cpp:
* jit/JIT.h:
- * jit/JITInlineMethods.h:
- (JSC::JIT::emitLoadTag):
- (JSC::JIT::emitLoadPayload): Added helper functions for dealing with
- constants. Eventually, we should write special cases for all constants,
- but these are helpful in the short term.
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::compileOpStrictEq):
- (JSC::JIT::emitSlow_op_stricteq):
- (JSC::JIT::emitSlow_op_nstricteq): teh opcodez.
-
- * runtime/JSValue.h:
- (JSC::JSValue::):
- (JSC::JSValue::isDouble): Added a LowestTag for clarity.
-
-2009-05-13 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Fixed some bugs in host function calls.
-
- testapi now passes!
-
- * jit/JIT.cpp: Changed some registers around to avoid overwriting edx:eax,
- which is how JSValues are now returned. Also changed the code that
- passes thisValue to pass the full 64bits of the value. Also added
- an #error compiler directive to other platform builds, since the JSValue
- return signature probably won't return in edx:eax on those platforms,
- and we'll have to investigate a solution.
-
-2009-05-13 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Removed parameters from functions that are intended never to use their
- parameters.
-
- * jit/JITPropertyAccess.cpp:
- (JSC::JIT::emitSlow_op_get_by_val):
- (JSC::JIT::emitSlow_op_put_by_val):
-
-2009-05-13 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Ported op_instance_of from TOT. It's basically the same, but some register
- stuff changed to memory stuff.
-
- * jit/JITInlineMethods.h:
- (JSC::JIT::emitPutJITStubArgFromVirtualRegister):
- (JSC::JIT::emitStore): Changed to use helper functions.
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_instanceof):
- (JSC::JIT::emitSlow_op_instanceof): Ported from TOT.
-
-2009-05-13 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- Added a comment to explain an exception-handling subtelty that we found
- hard to remember when reviewing my last patch.
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_catch):
-
-2009-05-13 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Implemented try/catch.
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_throw): Updated to use JITStackFrame abstraction.
- (JSC::JIT::emit_op_catch): Filled out.
-
-2009-05-13 Sam Weinig <sam@webkit.org>
-
- Reviewed by Geoffrey Garen.
-
- Implemented op_loop_if_true, op_jfalse, op_jtrue, op_jeq_null and op_jneq_null
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emitSlow_op_instanceof): Moved from below to be next to its
- fast brother.
-
- (JSC::JIT::emit_op_loop_if_true): Similar to the old version
- in that it tries to do the integer case first and reduce the
- number of jumps you might need to take.
- (JSC::JIT::emitSlow_op_loop_if_true):
-
- (JSC::JIT::emit_op_jfalse): Very similar to op_loop_if_true, only
- the inverse and without a timeout check.
- (JSC::JIT::emitSlow_op_jfalse):
-
- (JSC::JIT::emit_op_jtrue): Very similar to op_loop_if_true except
- without the timeout check.
- (JSC::JIT::emitSlow_op_jtrue):
-
- (JSC::JIT::emit_op_jeq_null): Very similar to the implementation
- of op_eq, except it takes jumps instead of copying the condition
- to a dst.
- (JSC::JIT::emit_op_jneq_null): Ditto but for op_neq.
-
-2009-05-13 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Implemented op_call_varargs.
-
* jit/JITCall.cpp:
- (JSC::JIT::compileOpCallVarargsSetupArgs):
+ (JSC::JIT::compileOpCallInitializeCallFrame):
(JSC::JIT::compileOpCallVarargs):
- (JSC::JIT::emit_op_call):
- (JSC::JIT::emit_op_call_eval):
- (JSC::JIT::emit_op_load_varargs):
- (JSC::JIT::emit_op_call_varargs):
- (JSC::JIT::emit_op_construct):
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_jneq_ptr):
-
-2009-05-13 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Implemented op_call_eval.
-
- * jit/JITCall.cpp:
- (JSC::JIT::compileOpCallVarargsSetupArgs):
+ (JSC::JIT::compileOpCallVarargsSlowCase):
(JSC::JIT::compileOpCall):
- * jit/JITStubCall.h:
- (JSC::CallEvalJITStub::CallEvalJITStub):
-
-2009-05-13 Sam Weinig <sam@webkit.org>
-
- Reviewed by Gavin Barraclough.
-
- Implemented op_not. (Gavin did most of the work!)
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_not):
- (JSC::JIT::emitSlow_op_not):
-
-2009-05-13 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Implemented op_global_resolve.
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_loop_if_less):
- (JSC::JIT::emit_op_loop_if_lesseq): Added back accidentally removed
- early returns.
-
- (JSC::JIT::emit_op_resolve_global):
- * jit/JITStubs.cpp:
- (JSC::JITStubs::cti_op_resolve_global): Pretty similar to the old code,
- but we need two reads and a TimesEight step in order to account for the
- 64bit value size.
-
- * jit/JITStubs.h:
- (JSC::): Slightly tweaked this code to specialize for a JSGlobalObject*,
- to avoid having to pass an irrelevant tag pointer to the stub.
-
-2009-05-13 Sam Weinig <sam@webkit.org>
-
- Reviewed by Geoffrey Garen.
-
- Implemented op_to_jsnumber.
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_to_jsnumber):
- (JSC::JIT::emitSlow_op_to_jsnumber):
-
-2009-05-13 Sam Weinig <sam@webkit.org>
-
- Reviewed by Geoffrey Garen.
-
- Implemented op_convert_this.
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_convert_this):
- (JSC::JIT::emitSlow_op_convert_this):
-
-2009-05-13 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Got basic JS function and constructor calls working.
-
- * jit/JIT.cpp:
- (JSC::JIT::privateCompileCTIMachineTrampolines):
- * jit/JIT.h:
- * jit/JITCall.cpp:
- (JSC::JIT::compileOpCallSetupArgs):
- (JSC::JIT::compileOpCallVarargsSetupArgs):
- (JSC::JIT::compileOpConstructSetupArgs):
- (JSC::JIT::emit_op_ret):
- (JSC::JIT::emit_op_construct_verify):
- (JSC::JIT::emitSlow_op_construct_verify):
- (JSC::JIT::emitSlow_op_call):
- (JSC::JIT::emitSlow_op_call_eval):
- (JSC::JIT::emitSlow_op_call_varargs):
- (JSC::JIT::emitSlow_op_construct):
- (JSC::JIT::compileOpCall): Filled out these cases, with call_eval #if'd out.
-
- * jit/JITInlineMethods.h:
- (JSC::JIT::emitPutJITStubArgFromVirtualRegister):
- (JSC::JIT::emitLoad): Restored some legacy "*CTIArg*" functions,
- since I wanted to avoid the complexity of revamping the API here while
- trying to bring it up. Eventually, we should re-remove all of these functions.
-
- (JSC::JIT::recordJumpTarget): Removed unnecessary macro cruft. You will
- not silence me, Sam Weinig! The world will know that you are a crufty,
- crufty, crufty programmer!!!
-
- * jit/JITOpcodes.cpp:
- * jit/JITStubs.cpp:
- (JSC::):
- * jit/JITStubs.h: Changed up some offsets in the JITStackFrame class, since
- and off-by-one error was causing stack misalignment.
-
-2009-05-13 Sam Weinig <sam@webkit.org>
-
- Reviewed by Geoffrey Garen.
-
- Implement op_eq_null and op_neq_null.
-
- * assembler/MacroAssemblerX86Common.h:
- (JSC::MacroAssemblerX86Common::set8):
- (JSC::MacroAssemblerX86Common::setTest8):
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_stricteq):
- (JSC::JIT::emitSlow_op_stricteq):
- (JSC::JIT::emit_op_nstricteq):
- (JSC::JIT::emitSlow_op_nstricteq):
- (JSC::JIT::emit_op_eq_null):
- (JSC::JIT::emit_op_neq_null):
- * jsc.cpp:
-
-2009-05-12 Sam Weinig <sam@webkit.org>
-
- Reviewed by Geoffrey Garen.
-
- Implement op_new_error.
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_new_error):
- * jit/JITStubCall.h:
- (JSC::JITStubCall::addArgument): Add a version of addArgument
- that takes a constant JSValue.
-
-2009-05-12 Sam Weinig <sam@webkit.org>
-
- Reviewed by Geoffrey Garen.
-
- Remove now unused emitGetVariableObjectRegister and emitPutVariableObjectRegister.
-
- * jit/JIT.cpp:
- * jit/JIT.h:
-
-2009-05-12 Sam Weinig <sam@webkit.org>
-
- Reviewed by Geoffrey Garen.
-
- Implement op_to_primitive and op_next_pname.
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emitSlow_op_construct_verify):
- (JSC::JIT::emit_op_to_primitive):
- (JSC::JIT::emitSlow_op_to_primitive):
- (JSC::JIT::emitSlow_op_loop_if_true):
- (JSC::JIT::emit_op_jtrue):
- (JSC::JIT::emit_op_next_pname):
-
-2009-05-12 Sam Weinig <sam@webkit.org>
-
- Reviewed by Geoffrey Garen.
-
- Add op_get_global_var, op_put_global_var, emit_op_get_scoped_var, emit_op_put_scoped_var and
- op_unexpected_load.
-
- * jit/JIT.h:
- * jit/JITInlineMethods.h:
- (JSC::JIT::tagFor):
- (JSC::JIT::payloadFor):
- (JSC::JIT::emitLoad):
- (JSC::JIT::emitStore):
- (JSC::JIT::emitLoadReturnValue):
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_get_global_var):
- (JSC::JIT::emit_op_put_global_var):
- (JSC::JIT::emit_op_get_scoped_var):
- (JSC::JIT::emit_op_put_scoped_var):
- (JSC::JIT::emit_op_unexpected_load):
-
-2009-05-12 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Added overflow handling to op_sub.
-
- * jit/JIT.h:
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emitSlow_op_sub):
- (JSC::JIT::emitSlowSub32InPlaceLeft):
-
-2009-05-12 Sam Weinig <sam@webkit.org>
-
- Reviewed by Geoffrey Garen.
-
- Remove a function call by folding op_get_by_id and op_put_by_id into
- their respective compile functions.
-
- * jit/JIT.h:
- * jit/JITPropertyAccess.cpp:
- (JSC::JIT::emit_op_get_by_id):
- (JSC::JIT::emitSlow_op_get_by_id):
- (JSC::JIT::emit_op_put_by_id):
- (JSC::JIT::emitSlow_op_put_by_id):
-
-2009-05-12 Sam Weinig <sam@webkit.org>
-
- Reviewed by Geoffrey Garen.
-
- Make JITStubCall work in 64bit by making the stack index
- step dependent on the size of void*.
-
- * jit/JITStubCall.h:
- (JSC::JITStubCall::JITStubCall):
- (JSC::JITStubCall::addArgument):
-
-2009-05-12 Sam Weinig <sam@webkit.org>
-
- Reviewed by Geoffrey Garen.
-
- Implement simple version of property access opcodes
- which just call a stub functions.
-
- * jit/JITOpcodes.cpp:
- * jit/JITPropertyAccess.cpp:
- (JSC::JIT::emitSlow_op_put_by_id):
- (JSC::JIT::emitSlow_op_get_by_id):
- (JSC::JIT::emit_op_get_by_val):
- (JSC::JIT::emitSlow_op_get_by_val):
- (JSC::JIT::emit_op_put_by_val):
- (JSC::JIT::emitSlow_op_put_by_val):
- (JSC::JIT::emit_op_put_by_index):
- (JSC::JIT::emit_op_put_getter):
- (JSC::JIT::emit_op_put_setter):
- (JSC::JIT::emit_op_del_by_id):
- (JSC::JIT::compileGetByIdHotPath):
- (JSC::JIT::compilePutByIdHotPath):
- * jit/JITStubCall.h:
- (JSC::JITStubCall::addArgument):
- * jsc.cpp:
-
-2009-05-12 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Added work-around for XCode debugging echo problem.
-
- * jsc.cpp:
- (runInteractive):
-
-2009-05-12 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Added overflow handling to op_add.
-
- * jit/JIT.h:
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emitSlow_op_add):
- (JSC::JIT::emitSlowAdd32InPlace):
-
-2009-05-12 Sam Weinig <sam@webkit.org>
-
- Reviewed by Geoffrey Garen.
-
- Add slow cases for op_jnless or emit_op_jnlesseq.
-
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emitSlow_op_jnless):
- (JSC::JIT::emitSlow_op_jnlesseq):
-
-2009-05-12 Sam Weinig <sam@webkit.org>
-
- Reviewed by Geoffrey Garen.
-
- Add implementations for op_jnless, emit_op_jnlesseq, op_loop_if_less and op_loop_if_lesseq.
- No slow cases for op_jnless or emit_op_jnlesseq yet.
-
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_jnless):
- (JSC::JIT::emitSlow_op_jnless):
- (JSC::JIT::emit_op_jnlesseq):
- (JSC::JIT::emitSlow_op_jnlesseq):
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_loop_if_less):
- (JSC::JIT::emitSlow_op_loop_if_less):
- (JSC::JIT::emit_op_loop_if_lesseq):
- (JSC::JIT::emitSlow_op_loop_if_lesseq):
-
-2009-05-12 Sam Weinig <sam@webkit.org>
-
- Reviewed by Geoffrey Garen.
-
- Turn the RECORD_JUMP_TARGET macro into an inline function.
-
- * jit/JIT.h:
- * jit/JITInlineMethods.h:
- (JSC::JIT::recordJumpTarget):
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_jmp):
- (JSC::JIT::emit_op_jsr):
- (JSC::JIT::emit_op_jmp_scopes):
-
-2009-05-12 Sam Weinig <sam@webkit.org>
-
- Add MacroAssemblerX86Common::set8 to fix the build.
-
- * assembler/MacroAssemblerX86Common.h:
- (JSC::MacroAssemblerX86Common::set8):
-
-2009-05-12 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Added overflow recovery for pre_inc and pre_dec.
-
- Turned some short-circuit code into early returns, as is the WebKit style.
-
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_post_inc):
- (JSC::JIT::emitSlow_op_post_inc):
- (JSC::JIT::emit_op_post_dec):
- (JSC::JIT::emitSlow_op_post_dec):
- (JSC::JIT::emitSlow_op_pre_inc):
- (JSC::JIT::emitSlow_op_pre_dec):
-
-2009-05-12 Sam Weinig <sam@webkit.org>
-
- Reviewed by Geoffrey Garen.
-
- Implement op_jmp, op_loop, op_eq and op_neq.
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_jmp):
- (JSC::JIT::emit_op_loop):
- (JSC::JIT::emit_op_eq):
- (JSC::JIT::emitSlow_op_eq):
- (JSC::JIT::emit_op_neq):
- (JSC::JIT::emitSlow_op_neq):
- (JSC::JIT::emit_op_enter):
- (JSC::JIT::emit_op_enter_with_activation):
-
-2009-05-12 Sam Weinig <sam@webkit.org>
-
- Reviewed by Geoffrey Garen.
-
- Implement the slow cases for arithmetic opcodes.
-
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emitSlow_op_lshift):
- (JSC::JIT::emitSlow_op_rshift):
- (JSC::JIT::emitSlow_op_bitand):
- (JSC::JIT::emitSlow_op_bitor):
- (JSC::JIT::emitSlow_op_bitxor):
- (JSC::JIT::emitSlow_op_bitnot):
- (JSC::JIT::emitSlow_op_sub):
- (JSC::JIT::emitSlow_op_mul):
- (JSC::JIT::emitSlow_op_mod):
- (JSC::JIT::emit_op_mod):
-
-2009-05-12 Sam Weinig <sam@webkit.org>
-
- Reviewed by Geoffrey Garen.
-
- Implement op_bitnot.
-
- * assembler/MacroAssemblerX86Common.h:
- (JSC::MacroAssemblerX86Common::not32):
- * assembler/X86Assembler.h:
- (JSC::X86Assembler::notl_m):
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_bitnot):
-
-2009-05-12 Sam Weinig <sam@webkit.org>
-
- Reviewed by Geoffrey Garen.
-
- Add arithmetic opcode implementations from the old nitro-extreme branch.
-
- * jit/JIT.h:
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_jnless):
- (JSC::JIT::emitSlow_op_jnless):
- (JSC::JIT::emit_op_jnlesseq):
- (JSC::JIT::emitSlow_op_jnlesseq):
- (JSC::JIT::emit_op_lshift):
- (JSC::JIT::emitSlow_op_lshift):
- (JSC::JIT::emit_op_rshift):
- (JSC::JIT::emitSlow_op_rshift):
- (JSC::JIT::emit_op_bitand):
- (JSC::JIT::emitBitAnd32Constant):
- (JSC::JIT::emitBitAnd32InPlace):
- (JSC::JIT::emit_op_bitor):
- (JSC::JIT::emitSlow_op_bitor):
- (JSC::JIT::emitBitOr32Constant):
- (JSC::JIT::emitBitOr32InPlace):
- (JSC::JIT::emit_op_bitxor):
- (JSC::JIT::emitSlow_op_bitxor):
- (JSC::JIT::emitBitXor32Constant):
- (JSC::JIT::emitBitXor32InPlace):
- (JSC::JIT::emit_op_bitnot):
- (JSC::JIT::emitSlow_op_bitnot):
- (JSC::JIT::emit_op_post_inc):
- (JSC::JIT::emitSlow_op_post_inc):
- (JSC::JIT::emit_op_post_dec):
- (JSC::JIT::emitSlow_op_post_dec):
- (JSC::JIT::emit_op_pre_inc):
- (JSC::JIT::emitSlow_op_pre_inc):
- (JSC::JIT::emit_op_pre_dec):
- (JSC::JIT::emitSlow_op_pre_dec):
- (JSC::JIT::emit_op_add):
- (JSC::JIT::emitAdd32Constant):
- (JSC::JIT::emitAdd32InPlace):
- (JSC::JIT::emitSlow_op_add):
- (JSC::JIT::emit_op_sub):
- (JSC::JIT::emitSlow_op_sub):
- (JSC::JIT::emitSub32ConstantLeft):
- (JSC::JIT::emitSub32ConstantRight):
- (JSC::JIT::emitSub32InPlaceLeft):
- (JSC::JIT::emitSub32InPlaceRight):
- (JSC::JIT::emit_op_mul):
- (JSC::JIT::emitSlow_op_mul):
- (JSC::JIT::emitMul32Constant):
- (JSC::JIT::emitMul32InPlace):
- (JSC::JIT::emit_op_mod):
- (JSC::JIT::emitSlow_op_mod):
- * jit/JITOpcodes.cpp:
-
-2009-05-12 Geoffrey Garen <ggaren@apple.com>
-
- Removed JIT_OPTIMIZE_ARITHMETIC setting, since it was all about 32bit
- value representations.
-
- Added JSAPIValueWrapper to the repository.
-
- * jit/JIT.h:
- * jit/JITArithmetic.cpp:
- * runtime/JSAPIValueWrapper.cpp: Added.
- (JSC::JSAPIValueWrapper::toPrimitive):
- (JSC::JSAPIValueWrapper::getPrimitiveNumber):
- (JSC::JSAPIValueWrapper::toBoolean):
- (JSC::JSAPIValueWrapper::toNumber):
- (JSC::JSAPIValueWrapper::toString):
- (JSC::JSAPIValueWrapper::toObject):
- * runtime/JSAPIValueWrapper.h: Added.
- (JSC::JSAPIValueWrapper::value):
- (JSC::JSAPIValueWrapper::isAPIValueWrapper):
- (JSC::JSAPIValueWrapper::JSAPIValueWrapper):
- (JSC::jsAPIValueWrapper):
- * wtf/Platform.h:
-
-2009-05-12 Geoffrey Garen <ggaren@apple.com>
-
- Turned on the JIT and got it building and running the most trivial of
- programs.
-
- All configurable optimizations are turned off, and a few opcodes are ad
- hoc #if'd out.
-
- So far, I've only merged op_mov and op_end, but some stub-reliant
- opcodes work as-is from TOT.
-
- * bytecode/CodeBlock.cpp:
- (JSC::CodeBlock::~CodeBlock):
- * bytecode/CodeBlock.h:
- * jit/JIT.cpp:
- (JSC::JIT::compileOpStrictEq):
- * jit/JIT.h:
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_lshift):
- (JSC::JIT::emitSlow_op_lshift):
- (JSC::JIT::emit_op_rshift):
- (JSC::JIT::emitSlow_op_rshift):
- (JSC::JIT::emit_op_jnless):
- (JSC::JIT::emitSlow_op_jnless):
- (JSC::JIT::emit_op_jnlesseq):
- (JSC::JIT::emitSlow_op_jnlesseq):
- (JSC::JIT::emit_op_bitand):
- (JSC::JIT::emitSlow_op_bitand):
- (JSC::JIT::emit_op_post_inc):
- (JSC::JIT::emitSlow_op_post_inc):
- (JSC::JIT::emit_op_post_dec):
- (JSC::JIT::emitSlow_op_post_dec):
- (JSC::JIT::emit_op_pre_inc):
- (JSC::JIT::emitSlow_op_pre_inc):
- (JSC::JIT::emit_op_pre_dec):
- (JSC::JIT::emitSlow_op_pre_dec):
- (JSC::JIT::emit_op_mod):
- (JSC::JIT::emitSlow_op_mod):
- (JSC::JIT::emit_op_add):
- (JSC::JIT::emit_op_mul):
- (JSC::JIT::emit_op_sub):
- (JSC::JIT::compileBinaryArithOpSlowCase):
- (JSC::JIT::emitSlow_op_add):
- (JSC::JIT::emitSlow_op_mul):
- * jit/JITCall.cpp:
+ (JSC::JIT::compileOpCallSlowCase):
+ * jit/JITCall32_64.cpp:
(JSC::JIT::compileOpCallInitializeCallFrame):
- (JSC::JIT::compileOpConstructSetupArgs):
(JSC::JIT::compileOpCallVarargs):
+ (JSC::JIT::compileOpCallVarargsSlowCase):
(JSC::JIT::compileOpCall):
(JSC::JIT::compileOpCallSlowCase):
* jit/JITInlineMethods.h:
- (JSC::JIT::getConstantOperandImmediateInt):
- (JSC::JIT::isOperandConstantImmediateInt):
- (JSC::JIT::emitInitRegister):
- (JSC::JIT::addSlowCase):
- (JSC::JIT::addJump):
- (JSC::JIT::emitJumpSlowToHot):
- (JSC::JIT::tagFor):
- (JSC::JIT::payloadFor):
- (JSC::JIT::emitLoad):
- (JSC::JIT::emitLoadReturnValue):
- (JSC::JIT::emitStore):
- (JSC::JIT::emitStoreReturnValue):
* jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_mov):
- (JSC::JIT::emit_op_end):
- (JSC::JIT::emit_op_jmp):
- (JSC::JIT::emit_op_loop):
- (JSC::JIT::emit_op_loop_if_less):
- (JSC::JIT::emit_op_loop_if_lesseq):
- (JSC::JIT::emit_op_instanceof):
- (JSC::JIT::emit_op_get_global_var):
- (JSC::JIT::emit_op_put_global_var):
- (JSC::JIT::emit_op_get_scoped_var):
- (JSC::JIT::emit_op_put_scoped_var):
- (JSC::JIT::emit_op_tear_off_activation):
- (JSC::JIT::emit_op_ret):
- (JSC::JIT::emit_op_construct_verify):
- (JSC::JIT::emit_op_to_primitive):
- (JSC::JIT::emit_op_loop_if_true):
- (JSC::JIT::emit_op_resolve_global):
- (JSC::JIT::emit_op_not):
- (JSC::JIT::emit_op_jfalse):
- (JSC::JIT::emit_op_jeq_null):
- (JSC::JIT::emit_op_jneq_null):
- (JSC::JIT::emit_op_jneq_ptr):
- (JSC::JIT::emit_op_unexpected_load):
- (JSC::JIT::emit_op_eq):
- (JSC::JIT::emit_op_bitnot):
- (JSC::JIT::emit_op_jtrue):
- (JSC::JIT::emit_op_neq):
- (JSC::JIT::emit_op_bitxor):
- (JSC::JIT::emit_op_bitor):
- (JSC::JIT::emit_op_throw):
- (JSC::JIT::emit_op_next_pname):
- (JSC::JIT::emit_op_push_scope):
- (JSC::JIT::emit_op_to_jsnumber):
- (JSC::JIT::emit_op_push_new_scope):
- (JSC::JIT::emit_op_catch):
- (JSC::JIT::emit_op_switch_imm):
- (JSC::JIT::emit_op_switch_char):
- (JSC::JIT::emit_op_switch_string):
- (JSC::JIT::emit_op_new_error):
- (JSC::JIT::emit_op_eq_null):
- (JSC::JIT::emit_op_neq_null):
- (JSC::JIT::emit_op_convert_this):
- (JSC::JIT::emit_op_profile_will_call):
- (JSC::JIT::emit_op_profile_did_call):
- (JSC::JIT::emitSlow_op_construct_verify):
- (JSC::JIT::emitSlow_op_get_by_val):
- (JSC::JIT::emitSlow_op_loop_if_less):
- (JSC::JIT::emitSlow_op_loop_if_lesseq):
- (JSC::JIT::emitSlow_op_put_by_val):
- (JSC::JIT::emitSlow_op_not):
- (JSC::JIT::emitSlow_op_instanceof):
- * jit/JITPropertyAccess.cpp:
- (JSC::JIT::emit_op_get_by_val):
- (JSC::JIT::emit_op_put_by_val):
- (JSC::JIT::emit_op_put_by_index):
- (JSC::JIT::emit_op_put_getter):
- (JSC::JIT::emit_op_put_setter):
- (JSC::JIT::emit_op_del_by_id):
- (JSC::JIT::compileGetByIdHotPath):
- (JSC::JIT::compilePutByIdHotPath):
- * jit/JITStubCall.h:
- (JSC::JITStubCall::JITStubCall):
- (JSC::JITStubCall::addArgument):
- (JSC::JITStubCall::call):
- (JSC::JITStubCall::):
- (JSC::CallEvalJITStub::CallEvalJITStub):
+ (JSC::JIT::privateCompileCTIMachineTrampolines):
+ * jit/JITOpcodes32_64.cpp:
+ (JSC::JIT::privateCompileCTIMachineTrampolines):
* jit/JITStubs.cpp:
- (JSC::):
- (JSC::JITStubs::cti_op_add):
- (JSC::JITStubs::cti_op_pre_inc):
- (JSC::JITStubs::cti_op_mul):
- (JSC::JITStubs::cti_op_get_by_val):
- (JSC::JITStubs::cti_op_get_by_val_string):
- (JSC::JITStubs::cti_op_get_by_val_byte_array):
- (JSC::JITStubs::cti_op_sub):
- (JSC::JITStubs::cti_op_put_by_val):
- (JSC::JITStubs::cti_op_put_by_val_array):
- (JSC::JITStubs::cti_op_put_by_val_byte_array):
- (JSC::JITStubs::cti_op_negate):
- (JSC::JITStubs::cti_op_div):
- (JSC::JITStubs::cti_op_pre_dec):
- (JSC::JITStubs::cti_op_post_inc):
- (JSC::JITStubs::cti_op_eq):
- (JSC::JITStubs::cti_op_lshift):
- (JSC::JITStubs::cti_op_bitand):
- (JSC::JITStubs::cti_op_rshift):
- (JSC::JITStubs::cti_op_bitnot):
- (JSC::JITStubs::cti_op_mod):
- (JSC::JITStubs::cti_op_neq):
- (JSC::JITStubs::cti_op_post_dec):
- (JSC::JITStubs::cti_op_urshift):
- (JSC::JITStubs::cti_op_bitxor):
- (JSC::JITStubs::cti_op_bitor):
- (JSC::JITStubs::cti_op_switch_imm):
+ (JSC::DEFINE_STUB_FUNCTION):
* jit/JITStubs.h:
- * runtime/JSArray.cpp:
- (JSC::JSArray::JSArray):
- * runtime/JSFunction.cpp:
- (JSC::JSFunction::~JSFunction):
- * runtime/JSValue.h:
- (JSC::JSValue::payload):
- * wtf/Platform.h:
-
-2009-05-07 Sam Weinig <sam@webkit.org>
-
- Reviewed by Geoffrey Garen.
-
- Add some new MacroAssembler and assembler functions that will be needed shortly.
-
- * assembler/MacroAssemblerX86Common.h:
- (JSC::MacroAssemblerX86Common::add32):
- (JSC::MacroAssemblerX86Common::and32):
- (JSC::MacroAssemblerX86Common::mul32):
- (JSC::MacroAssemblerX86Common::neg32):
- (JSC::MacroAssemblerX86Common::or32):
- (JSC::MacroAssemblerX86Common::sub32):
- (JSC::MacroAssemblerX86Common::xor32):
- (JSC::MacroAssemblerX86Common::branchAdd32):
- (JSC::MacroAssemblerX86Common::branchMul32):
- (JSC::MacroAssemblerX86Common::branchSub32):
- * assembler/X86Assembler.h:
- (JSC::X86Assembler::):
- (JSC::X86Assembler::addl_rm):
- (JSC::X86Assembler::andl_mr):
- (JSC::X86Assembler::andl_rm):
- (JSC::X86Assembler::andl_im):
- (JSC::X86Assembler::negl_r):
- (JSC::X86Assembler::notl_r):
- (JSC::X86Assembler::orl_rm):
- (JSC::X86Assembler::orl_im):
- (JSC::X86Assembler::subl_rm):
- (JSC::X86Assembler::xorl_mr):
- (JSC::X86Assembler::xorl_rm):
- (JSC::X86Assembler::xorl_im):
- (JSC::X86Assembler::imull_mr):
-
-2009-05-11 Sam Weinig <sam@webkit.org>
-
- Reviewed by Cameron Zwarich.
-
- Remove the NumberHeap.
-
- * JavaScriptCore.exp:
- * runtime/Collector.cpp:
- (JSC::Heap::Heap):
- (JSC::Heap::destroy):
- (JSC::Heap::recordExtraCost):
- (JSC::Heap::heapAllocate):
- (JSC::Heap::markConservatively):
- (JSC::Heap::sweep):
- (JSC::Heap::collect):
- (JSC::Heap::objectCount):
- (JSC::Heap::statistics):
- (JSC::typeName):
- (JSC::Heap::isBusy):
- * runtime/Collector.h:
- (JSC::Heap::globalData):
- * runtime/JSCell.h:
-
-2009-05-11 Geoffrey Garen <ggaren@apple.com>
-
- Reviewed by Sam Weinig.
-
- Land initial commit of new number representation for 32 bit platforms,
- with JIT disabled.
-
- * API/APICast.h:
- (toJS):
- (toRef):
- * API/JSCallbackObjectFunctions.h:
- (JSC::::hasInstance):
- (JSC::::toNumber):
- (JSC::::toString):
- * API/tests/testapi.c:
- (EvilExceptionObject_convertToType):
- * AllInOneFile.cpp:
- * JavaScriptCore.exp:
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * bytecode/CodeBlock.cpp:
- (JSC::valueToSourceString):
- * bytecompiler/BytecodeGenerator.cpp:
- (JSC::BytecodeGenerator::emitLoad):
- (JSC::BytecodeGenerator::emitUnexpectedLoad):
- (JSC::keyForImmediateSwitch):
- * bytecompiler/BytecodeGenerator.h:
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::dumpRegisters):
- (JSC::Interpreter::privateExecute):
- * parser/Nodes.cpp:
- (JSC::ArrayNode::emitBytecode):
- (JSC::processClauseList):
- * runtime/ArgList.h:
- * runtime/Collector.h:
- (JSC::sizeof):
- * runtime/DateMath.cpp:
- * runtime/ExceptionHelpers.h:
- * runtime/InitializeThreading.cpp:
- * runtime/JSArray.cpp:
- (JSC::JSArray::JSArray):
- * runtime/JSCell.cpp:
- * runtime/JSCell.h:
- (JSC::JSCell::isAPIValueWrapper):
- (JSC::JSValue::isString):
- (JSC::JSValue::isGetterSetter):
- (JSC::JSValue::isObject):
- (JSC::JSValue::getString):
- (JSC::JSValue::getObject):
- (JSC::JSValue::getCallData):
- (JSC::JSValue::getConstructData):
- (JSC::JSValue::getUInt32):
- (JSC::JSValue::marked):
- (JSC::JSValue::toPrimitive):
- (JSC::JSValue::getPrimitiveNumber):
- (JSC::JSValue::toBoolean):
- (JSC::JSValue::toNumber):
- (JSC::JSValue::toString):
- (JSC::JSValue::needsThisConversion):
- (JSC::JSValue::toThisString):
- (JSC::JSValue::getJSNumber):
- (JSC::JSValue::toObject):
- (JSC::JSValue::toThisObject):
- * runtime/JSGlobalData.cpp:
- (JSC::JSGlobalData::JSGlobalData):
- * runtime/JSGlobalData.h:
- * runtime/JSGlobalObject.h:
- (JSC::Structure::prototypeForLookup):
- * runtime/JSGlobalObjectFunctions.cpp:
- (JSC::globalFuncParseInt):
- * runtime/JSImmediate.h:
- * runtime/JSNumberCell.cpp: Removed.
- * runtime/JSNumberCell.h: Removed.
- * runtime/JSObject.h:
- (JSC::JSValue::get):
- (JSC::JSValue::put):
- * runtime/JSString.h:
- (JSC::JSValue::toThisJSString):
- * runtime/JSValue.cpp:
- (JSC::JSValue::toInteger):
- (JSC::JSValue::toIntegerPreserveNaN):
- (JSC::JSValue::toObjectSlowCase):
- (JSC::JSValue::toThisObjectSlowCase):
- (JSC::JSValue::synthesizeObject):
- (JSC::JSValue::synthesizePrototype):
- (JSC::JSValue::description):
- (JSC::nonInlineNaN):
- * runtime/JSValue.h:
- (JSC::JSValue::):
- (JSC::EncodedJSValueHashTraits::emptyValue):
- (JSC::jsNaN):
- (JSC::operator==):
- (JSC::operator!=):
- (JSC::toInt32):
- (JSC::toUInt32):
- (JSC::JSValue::encode):
- (JSC::JSValue::decode):
- (JSC::JSValue::JSValue):
- (JSC::JSValue::operator bool):
- (JSC::JSValue::operator==):
- (JSC::JSValue::operator!=):
- (JSC::JSValue::isUndefined):
- (JSC::JSValue::isNull):
- (JSC::JSValue::isUndefinedOrNull):
- (JSC::JSValue::isCell):
- (JSC::JSValue::isInt32):
- (JSC::JSValue::isUInt32):
- (JSC::JSValue::isDouble):
- (JSC::JSValue::isTrue):
- (JSC::JSValue::isFalse):
- (JSC::JSValue::tag):
- (JSC::JSValue::asInt32):
- (JSC::JSValue::asUInt32):
- (JSC::JSValue::asDouble):
- (JSC::JSValue::asCell):
- (JSC::JSValue::isNumber):
- (JSC::JSValue::isBoolean):
- (JSC::JSValue::getBoolean):
- (JSC::JSValue::uncheckedGetNumber):
- (JSC::JSValue::toJSNumber):
- (JSC::JSValue::getNumber):
- (JSC::JSValue::toInt32):
- (JSC::JSValue::toUInt32):
- * runtime/Operations.h:
- (JSC::JSValue::equal):
- (JSC::JSValue::equalSlowCaseInline):
- (JSC::JSValue::strictEqual):
- (JSC::JSValue::strictEqualSlowCaseInline):
- (JSC::jsLess):
- (JSC::jsLessEq):
- (JSC::jsAdd):
- * runtime/PropertySlot.h:
- * runtime/StringPrototype.cpp:
- (JSC::stringProtoFuncCharAt):
- (JSC::stringProtoFuncCharCodeAt):
- (JSC::stringProtoFuncIndexOf):
- * wtf/Platform.h:
-
-=== Start merge of nitro-extreme branch 2009-07-30 ===
-
-2009-07-29 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by George Staikos.
-
- Resolve class/struct mixup in forward declarations
- https://bugs.webkit.org/show_bug.cgi?id=27708
-
- * API/JSClassRef.h:
- * bytecode/SamplingTool.h:
- * interpreter/Interpreter.h:
- * jit/JIT.h:
- * profiler/ProfileGenerator.h:
- * profiler/Profiler.h:
- * runtime/ClassInfo.h:
- * runtime/ExceptionHelpers.h:
- * runtime/JSByteArray.h:
- * runtime/JSCell.h:
- * runtime/JSFunction.h:
- * runtime/JSGlobalData.h:
- * runtime/JSObject.h:
- * runtime/JSString.h:
-
-2009-07-28 Ada Chan <adachan@apple.com>
-
- Reviewed by Darin Adler.
-
- https://bugs.webkit.org/show_bug.cgi?id=27236
- - Implement TCMalloc_SystemRelease and TCMalloc_SystemCommit for Windows.
- - Use a background thread to periodically scavenge memory to release back to the system.
-
- * wtf/FastMalloc.cpp:
- (WTF::TCMalloc_PageHeap::init):
- (WTF::TCMalloc_PageHeap::runScavengerThread):
- (WTF::TCMalloc_PageHeap::scavenge):
- (WTF::TCMalloc_PageHeap::shouldContinueScavenging):
- (WTF::TCMalloc_PageHeap::New):
- (WTF::TCMalloc_PageHeap::AllocLarge):
- (WTF::TCMalloc_PageHeap::Delete):
- (WTF::TCMalloc_PageHeap::GrowHeap):
- (WTF::sleep):
- (WTF::TCMalloc_PageHeap::scavengerThread):
- * wtf/TCSystemAlloc.cpp:
- (TCMalloc_SystemRelease):
- (TCMalloc_SystemCommit):
- * wtf/TCSystemAlloc.h:
-
-2009-07-28 Xan Lopez <xlopez@igalia.com>
-
- Add new files, fixes distcheck.
-
- * GNUmakefile.am:
-
-2009-07-28 Csaba Osztrogonac <oszi@inf.u-szeged.hu>
-
- Reviewed by Simon Hausmann.
-
- [Qt] Determining whether to use JIT or interpreter
- moved from JavaScriptCore.pri to Platform.h
-
- * JavaScriptCore.pri:
- * wtf/Platform.h:
-
-2009-07-27 Brian Weinstein <bweinstein@apple.com>
-
- Fix of misuse of sort command.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
-
-2009-07-27 Brian Weinstein <bweinstein@apple.com>
-
- Build fix for Windows.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
-
-2009-07-27 Gavin Barraclough <barraclough@apple.com>
-
- Rubber stamped by Oliver Hunt.
-
- Fix tyop in JIT, renamed preverveReturnAddressAfterCall -> preserveReturnAddressAfterCall.
-
- * jit/JIT.cpp:
- (JSC::JIT::privateCompile):
- (JSC::JIT::privateCompileCTIMachineTrampolines):
- * jit/JIT.h:
- * jit/JITInlineMethods.h:
- (JSC::JIT::preserveReturnAddressAfterCall):
- * jit/JITPropertyAccess.cpp:
- (JSC::JIT::privateCompilePutByIdTransition):
-
-2009-07-27 Alexey Proskuryakov <ap@webkit.org>
-
- Gtk build fix.
-
- * runtime/JSLock.cpp: (JSC::JSLock::JSLock): Fix "no threading" case.
-
-2009-07-27 Alexey Proskuryakov <ap@webkit.org>
-
- Release build fix.
-
- * runtime/JSLock.h: (JSC::JSLock::~JSLock):
-
-2009-07-27 Alexey Proskuryakov <ap@webkit.org>
-
- Reviewed by Darin Adler.
-
- https://bugs.webkit.org/show_bug.cgi?id=27735
- Give a helpful name to JSLock constructor argument
-
- * API/JSBase.cpp:
- (JSGarbageCollect):
- * API/JSContextRef.cpp:
- * API/JSObjectRef.cpp:
- (JSPropertyNameArrayRelease):
- (JSPropertyNameAccumulatorAddName):
- * JavaScriptCore.exp:
- * jsc.cpp:
- (functionGC):
- (cleanupGlobalData):
- (jscmain):
- * runtime/Collector.cpp:
- (JSC::Heap::destroy):
- * runtime/JSLock.cpp:
- (JSC::JSLock::JSLock):
- (JSC::JSLock::lock):
- (JSC::JSLock::unlock):
- (JSC::JSLock::DropAllLocks::DropAllLocks):
- (JSC::JSLock::DropAllLocks::~DropAllLocks):
- * runtime/JSLock.h:
(JSC::):
- (JSC::JSLock::JSLock):
- (JSC::JSLock::~JSLock):
-
-2009-07-25 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
-
- Reviewed by Eric Seidel.
-
- Allow custom memory allocation control for OpaqueJSPropertyNameArray struct
- https://bugs.webkit.org/show_bug.cgi?id=27342
-
- Inherits OpaqueJSPropertyNameArray struct from FastAllocBase because it has been
- instantiated by 'new' JavaScriptCore/API/JSObjectRef.cpp:473.
-
- * API/JSObjectRef.cpp:
-
-2009-07-24 Ada Chan <adachan@apple.com>
- In preparation for https://bugs.webkit.org/show_bug.cgi?id=27236:
- Remove TCMALLOC_TRACK_DECOMMITED_SPANS. We'll always track decommitted spans.
- We have tested this and show it has little impact on performance.
-
- Reviewed by Mark Rowe.
-
- * wtf/FastMalloc.cpp:
- (WTF::TCMalloc_PageHeap::New):
- (WTF::TCMalloc_PageHeap::AllocLarge):
- (WTF::propagateDecommittedState):
- (WTF::mergeDecommittedStates):
- (WTF::TCMalloc_PageHeap::Delete):
- (WTF::TCMalloc_PageHeap::IncrementalScavenge):
-
-2009-07-24 Csaba Osztrogonac <oszi@inf.u-szeged.hu>
-
- Reviewed by Darin Adler and Adam Barth.
-
- Build fix for x86 platforms.
- https://bugs.webkit.org/show_bug.cgi?id=27602
-
- * jit/JIT.cpp:
-
-2009-07-23 Kevin Ollivier <kevino@theolliviers.com>
-
- wx build fix, adding missing header.
-
- * jit/JIT.cpp:
-
-2009-07-22 Yong Li <yong.li@torchmobile.com>
-
- Reviewed by George Staikos.
-
- Add wince specific memory files into wtf/wince
- https://bugs.webkit.org/show_bug.cgi?id=27550
-
- * wtf/wince/FastMallocWince.h: Added.
- * wtf/wince/MemoryManager.cpp: Added.
- * wtf/wince/MemoryManager.h: Added.
-
-2009-07-23 Norbert Leser <norbert.leser@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- Fix for missing mmap features in Symbian
- https://bugs.webkit.org/show_bug.cgi?id=24540
-
- Fix, conditionally for PLATFORM(SYMBIAN), as an alternative
- to missing support for the MAP_ANON property flag in mmap.
- It utilizes Symbian specific memory allocation features.
-
- * runtime/Collector.cpp
-
-2009-07-22 Gavin Barraclough <barraclough@apple.com>
+2010-05-24 Gavin Barraclough <barraclough@apple.com>
Reviewed by Sam Weinig.
-
- With ENABLE(ASSEMBLER_WX_EXCLUSIVE), only change permissions once per repatch event.
- ( https://bugs.webkit.org/show_bug.cgi?id=27564 )
-
- Currently we change permissions forwards and backwards for each instruction modified,
- instead we should only change permissions once per complete repatching event.
-
- 2.5% progression running with ENABLE(ASSEMBLER_WX_EXCLUSIVE) enabled,
- which recoups 1/3 of the penalty of running with this mode enabled.
-
- * assembler/ARMAssembler.cpp:
- (JSC::ARMAssembler::linkBranch):
- - Replace usage of MakeWritable with cacheFlush.
-
- * assembler/ARMAssembler.h:
- (JSC::ARMAssembler::patchPointerInternal):
- (JSC::ARMAssembler::repatchLoadPtrToLEA):
- - Replace usage of MakeWritable with cacheFlush.
-
- * assembler/ARMv7Assembler.h:
- (JSC::ARMv7Assembler::relinkJump):
- (JSC::ARMv7Assembler::relinkCall):
- (JSC::ARMv7Assembler::repatchInt32):
- (JSC::ARMv7Assembler::repatchPointer):
- (JSC::ARMv7Assembler::repatchLoadPtrToLEA):
- (JSC::ARMv7Assembler::setInt32):
- - Replace usage of MakeWritable with cacheFlush.
-
- * assembler/LinkBuffer.h:
- (JSC::LinkBuffer::performFinalization):
- - Make explicit call to cacheFlush.
-
- * assembler/MacroAssemblerCodeRef.h:
- (JSC::MacroAssemblerCodeRef::MacroAssemblerCodeRef):
- - Make size always available.
-
- * assembler/RepatchBuffer.h:
- (JSC::RepatchBuffer::RepatchBuffer):
- (JSC::RepatchBuffer::~RepatchBuffer):
- - Add calls to MakeWritable & makeExecutable.
-
- * assembler/X86Assembler.h:
- (JSC::X86Assembler::relinkJump):
- (JSC::X86Assembler::relinkCall):
- (JSC::X86Assembler::repatchInt32):
- (JSC::X86Assembler::repatchPointer):
- (JSC::X86Assembler::repatchLoadPtrToLEA):
- - Remove usage of MakeWritable.
-
- * bytecode/CodeBlock.h:
- (JSC::CodeBlock::getJITCode):
- - Provide access to CodeBlock's JITCode.
-
- * jit/ExecutableAllocator.h:
- (JSC::ExecutableAllocator::makeExecutable):
- (JSC::ExecutableAllocator::cacheFlush):
- - Remove MakeWritable, make cacheFlush public.
-
- * jit/JIT.cpp:
- (JSC::ctiPatchNearCallByReturnAddress):
- (JSC::ctiPatchCallByReturnAddress):
- (JSC::JIT::privateCompile):
- (JSC::JIT::unlinkCall):
- (JSC::JIT::linkCall):
- - Add CodeBlock argument to RepatchBuffer.
-
- * jit/JIT.h:
- - Pass CodeBlock argument for use by RepatchBuffer.
-
- * jit/JITCode.h:
- (JSC::JITCode::start):
- (JSC::JITCode::size):
- - Provide access to code start & size.
-
- * jit/JITPropertyAccess.cpp:
- (JSC::JIT::privateCompilePutByIdTransition):
- (JSC::JIT::patchGetByIdSelf):
- (JSC::JIT::patchMethodCallProto):
- (JSC::JIT::patchPutByIdReplace):
- (JSC::JIT::privateCompilePatchGetArrayLength):
- (JSC::JIT::privateCompileGetByIdProto):
- (JSC::JIT::privateCompileGetByIdSelfList):
- (JSC::JIT::privateCompileGetByIdProtoList):
- (JSC::JIT::privateCompileGetByIdChainList):
- (JSC::JIT::privateCompileGetByIdChain):
- - Add CodeBlock argument to RepatchBuffer.
-
- * jit/JITStubs.cpp:
- (JSC::JITThunks::tryCachePutByID):
- (JSC::JITThunks::tryCacheGetByID):
- (JSC::JITStubs::DEFINE_STUB_FUNCTION):
- - Pass CodeBlock argument for use by RepatchBuffer.
-
-2009-07-21 Zoltan Herczeg <zherczeg@inf.u-szeged.hu>
-
- Reviewed by Gavin Barraclough.
-
- Cache not only the structure of the method, but the
- structure of its prototype as well.
- https://bugs.webkit.org/show_bug.cgi?id=27077
-
- * bytecode/CodeBlock.cpp:
- (JSC::CodeBlock::~CodeBlock):
- * bytecode/CodeBlock.h:
- (JSC::MethodCallLinkInfo::MethodCallLinkInfo):
- * jit/JITPropertyAccess.cpp:
- (JSC::JIT::patchMethodCallProto):
-
-2009-07-21 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Sam Weinig.
-
- Move call linking / repatching down from AbstractMacroAssembler into MacroAssemblerARCH classes.
- ( https://bugs.webkit.org/show_bug.cgi?id=27527 )
-
- This allows the implementation to be defined per architecture. Specifically this addresses the
- fact that x86-64 MacroAssembler implements far calls as a load to register, followed by a call
- to register. Patching the call actually requires the pointer load to be patched, rather than
- the call to be patched. This is implementation detail specific to MacroAssemblerX86_64, and as
- such is best handled there.
-
- * assembler/AbstractMacroAssembler.h:
- * assembler/MacroAssemblerARM.h:
- (JSC::MacroAssemblerARM::linkCall):
- (JSC::MacroAssemblerARM::repatchCall):
- * assembler/MacroAssemblerARMv7.h:
- (JSC::MacroAssemblerARMv7::linkCall):
- (JSC::MacroAssemblerARMv7::repatchCall):
- * assembler/MacroAssemblerX86.h:
- (JSC::MacroAssemblerX86::linkCall):
- (JSC::MacroAssemblerX86::repatchCall):
- * assembler/MacroAssemblerX86_64.h:
- (JSC::MacroAssemblerX86_64::linkCall):
- (JSC::MacroAssemblerX86_64::repatchCall):
-
-2009-07-21 Adam Treat <adam.treat@torchmobile.com>
-
- Reviewed by George Staikos.
-
- Every wtf file includes other wtf files with <> style includes
- except this one. Fix the exception.
-
- * wtf/ByteArray.h:
-
-2009-07-21 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Move LinkBuffer/RepatchBuffer out of AbstractMacroAssembler.
- ( https://bugs.webkit.org/show_bug.cgi?id=27485 )
-
- This change is the first step in a process to move code that should be in
- the architecture-specific MacroAssembler classes up out of Assmbler and
- AbstractMacroAssembler.
-
- * JavaScriptCore.xcodeproj/project.pbxproj:
- - added new files
-
- * assembler/ARMAssembler.h:
- (JSC::ARMAssembler::linkPointer):
- - rename patchPointer to bring it in line with the current link/repatch naming scheme
-
- * assembler/ARMv7Assembler.h:
- (JSC::ARMv7Assembler::linkCall):
- (JSC::ARMv7Assembler::linkPointer):
- (JSC::ARMv7Assembler::relinkCall):
- (JSC::ARMv7Assembler::repatchInt32):
- (JSC::ARMv7Assembler::repatchPointer):
- (JSC::ARMv7Assembler::setInt32):
- (JSC::ARMv7Assembler::setPointer):
- - rename patchPointer to bring it in line with the current link/repatch naming scheme
-
- * assembler/AbstractMacroAssembler.h:
- (JSC::AbstractMacroAssembler::linkJump):
- (JSC::AbstractMacroAssembler::linkCall):
- (JSC::AbstractMacroAssembler::linkPointer):
- (JSC::AbstractMacroAssembler::getLinkerAddress):
- (JSC::AbstractMacroAssembler::getLinkerCallReturnOffset):
- (JSC::AbstractMacroAssembler::repatchJump):
- (JSC::AbstractMacroAssembler::repatchCall):
- (JSC::AbstractMacroAssembler::repatchNearCall):
- (JSC::AbstractMacroAssembler::repatchInt32):
- (JSC::AbstractMacroAssembler::repatchPointer):
- (JSC::AbstractMacroAssembler::repatchLoadPtrToLEA):
- - remove the LinkBuffer/RepatchBuffer classes, but leave a set of (private, friended) methods to interface to the Assembler
-
- * assembler/LinkBuffer.h: Added.
- (JSC::LinkBuffer::LinkBuffer):
- (JSC::LinkBuffer::~LinkBuffer):
- (JSC::LinkBuffer::link):
- (JSC::LinkBuffer::patch):
- (JSC::LinkBuffer::locationOf):
- (JSC::LinkBuffer::locationOfNearCall):
- (JSC::LinkBuffer::returnAddressOffset):
- (JSC::LinkBuffer::finalizeCode):
- (JSC::LinkBuffer::finalizeCodeAddendum):
- (JSC::LinkBuffer::code):
- (JSC::LinkBuffer::performFinalization):
- - new file containing the LinkBuffer class, previously a member of AbstractMacroAssembler
-
- * assembler/RepatchBuffer.h: Added.
- (JSC::RepatchBuffer::RepatchBuffer):
- (JSC::RepatchBuffer::relink):
- (JSC::RepatchBuffer::repatch):
- (JSC::RepatchBuffer::repatchLoadPtrToLEA):
- (JSC::RepatchBuffer::relinkCallerToTrampoline):
- (JSC::RepatchBuffer::relinkCallerToFunction):
- (JSC::RepatchBuffer::relinkNearCallerToTrampoline):
- - new file containing the RepatchBuffer class, previously a member of AbstractMacroAssembler
-
- * assembler/X86Assembler.h:
- (JSC::X86Assembler::linkJump):
- (JSC::X86Assembler::linkCall):
- (JSC::X86Assembler::linkPointerForCall):
- (JSC::X86Assembler::linkPointer):
- (JSC::X86Assembler::relinkJump):
- (JSC::X86Assembler::relinkCall):
- (JSC::X86Assembler::repatchInt32):
- (JSC::X86Assembler::repatchPointer):
- (JSC::X86Assembler::setPointer):
- (JSC::X86Assembler::setInt32):
- (JSC::X86Assembler::setRel32):
- - rename patchPointer to bring it in line with the current link/repatch naming scheme
-
- * jit/JIT.cpp:
- (JSC::ctiPatchNearCallByReturnAddress):
- (JSC::ctiPatchCallByReturnAddress):
- - include new headers
- - remove MacroAssembler:: specification from RepatchBuffer usage
-
- * jit/JITPropertyAccess.cpp:
- * yarr/RegexJIT.cpp:
- - include new headers
-
-2009-07-21 Robert Agoston <Agoston.Robert@stud.u-szeged.hu>
-
- Reviewed by David Levin.
-
- Fixed #undef typo.
- https://bugs.webkit.org/show_bug.cgi?id=27506
-
- * bytecode/Opcode.h:
-
-2009-07-21 Adam Roben <aroben@apple.com>
-
- Roll out r46153, r46154, and r46155
-
- These changes were causing build failures and assertion failures on
- Windows.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * runtime/JSArray.cpp:
- * runtime/StringPrototype.cpp:
- * runtime/UString.cpp:
- * runtime/UString.h:
- * wtf/FastMalloc.cpp:
- * wtf/FastMalloc.h:
- * wtf/Platform.h:
- * wtf/PossiblyNull.h: Removed.
-
-2009-07-21 Roland Steiner <rolandsteiner@google.com>
-
- Reviewed by David Levin.
-
- Add ENABLE_RUBY to list of build options
- https://bugs.webkit.org/show_bug.cgi?id=27324
-
- * Configurations/FeatureDefines.xcconfig: Added flag ENABLE_RUBY.
-
-2009-07-20 Oliver Hunt <oliver@apple.com>
-
- Build fix attempt #2
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
-
-2009-07-20 Oliver Hunt <oliver@apple.com>
-
- Build fix attempt #1
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
-
-2009-07-20 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- Make it harder to misuse try* allocation routines
- https://bugs.webkit.org/show_bug.cgi?id=27469
-
- Jump through a few hoops to make it much harder to accidentally
- miss null-checking of values returned by the try-* allocation
- routines.
-
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * runtime/JSArray.cpp:
- (JSC::JSArray::putSlowCase):
- (JSC::JSArray::increaseVectorLength):
- * runtime/StringPrototype.cpp:
- (JSC::stringProtoFuncFontsize):
- (JSC::stringProtoFuncLink):
- * runtime/UString.cpp:
- (JSC::allocChars):
- (JSC::reallocChars):
- (JSC::expandCapacity):
- (JSC::UString::Rep::reserveCapacity):
- (JSC::UString::expandPreCapacity):
- (JSC::createRep):
- (JSC::concatenate):
- (JSC::UString::spliceSubstringsWithSeparators):
- (JSC::UString::replaceRange):
- (JSC::UString::append):
- (JSC::UString::operator=):
- * runtime/UString.h:
- (JSC::UString::Rep::createEmptyBuffer):
- * wtf/FastMalloc.cpp:
- (WTF::tryFastZeroedMalloc):
- (WTF::tryFastMalloc):
- (WTF::tryFastCalloc):
- (WTF::tryFastRealloc):
- (WTF::TCMallocStats::tryFastMalloc):
- (WTF::TCMallocStats::tryFastCalloc):
- (WTF::TCMallocStats::tryFastRealloc):
- * wtf/FastMalloc.h:
- (WTF::TryMallocReturnValue::TryMallocReturnValue):
- (WTF::TryMallocReturnValue::~TryMallocReturnValue):
- (WTF::TryMallocReturnValue::operator Maybe<T>):
- (WTF::TryMallocReturnValue::getValue):
- * wtf/PossiblyNull.h:
- (WTF::PossiblyNull::PossiblyNull):
- (WTF::PossiblyNull::~PossiblyNull):
- (WTF::PossiblyNull::getValue):
- * wtf/Platform.h:
-
-2009-07-20 Gavin Barraclough <barraclough@apple.com>
-
- RS Oliver Hunt.
-
- Add ARM assembler files to xcodeproj, for convenience editing.
-
- * JavaScriptCore.xcodeproj/project.pbxproj:
-
-2009-07-20 Jessie Berlin <jberlin@apple.com>
-
- Reviewed by David Levin.
-
- Fix an incorrect assertion in Vector::remove.
-
- https://bugs.webkit.org/show_bug.cgi?id=27477
-
- * wtf/Vector.h:
- (WTF::::remove):
- Assert that the position at which to start removing elements + the
- length (the number of elements to remove) is less than or equal to the
- size of the entire Vector.
-
-2009-07-20 Peter Kasting <pkasting@google.com>
-
- Reviewed by Mark Rowe.
-
- https://bugs.webkit.org/show_bug.cgi?id=27468
- Back out r46060, which caused problems for some Apple developers.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj:
- * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops:
- * JavaScriptCore.vcproj/jsc/jscCommon.vsprops:
- * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops:
-
-2009-07-20 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
-
- Reviewed by Oliver Hunt.
-
- Allow custom memory allocation control in NewThreadContext
- https://bugs.webkit.org/show_bug.cgi?id=27338
-
- Inherits NewThreadContext struct from FastAllocBase because it
- has been instantiated by 'new' JavaScriptCore/wtf/Threading.cpp:76.
-
- * wtf/Threading.cpp:
-
-2009-07-20 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
-
- Reviewed by Oliver Hunt.
-
- Allow custom memory allocation control in JavaScriptCore's JSClassRef.h
- https://bugs.webkit.org/show_bug.cgi?id=27340
-
- Inherit StaticValueEntry and StaticFunctionEntry struct from FastAllocBase because these
- have been instantiated by 'new' in JavaScriptCore/API/JSClassRef.cpp:153
- and in JavaScriptCore/API/JSClassRef.cpp:166.
-
- * API/JSClassRef.h:
-
-2009-07-20 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
-
- Reviewed by Darin Adler.
-
- Allow custom memory allocation control in JavaScriptCore's RegexPattern.h
- https://bugs.webkit.org/show_bug.cgi?id=27343
-
- Inherits RegexPattern.h's structs (which have been instantiated by operator new) from FastAllocBase:
-
- CharacterClass (new call: JavaScriptCore/yarr/RegexCompiler.cpp:144)
- PatternAlternative (new call: JavaScriptCore/yarr/RegexPattern.h:221)
- PatternDisjunction (new call: JavaScriptCore/yarr/RegexCompiler.cpp:446)
-
- * yarr/RegexPattern.h:
-
-2009-07-20 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
-
- Reviewed by Darin Adler.
-
- Allow custom memory allocation control for JavaScriptCore's MatchFrame struct
- https://bugs.webkit.org/show_bug.cgi?id=27344
-
- Inherits MatchFrame struct from FastAllocBase because it has
- been instantiated by 'new' JavaScriptCore/pcre/pcre_exec.cpp:359.
-
- * pcre/pcre_exec.cpp:
-
-2009-07-20 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Holger Freyther.
-
- Remove some outdated S60 platform specific code
- https://bugs.webkit.org/show_bug.cgi?id=27423
-
- * wtf/Platform.h:
-
-2009-07-20 Csaba Osztrogonac <oszi@inf.u-szeged.hu>
-
- Reviewed by Simon Hausmann.
-
- Qt build fix with MSVC and MinGW.
-
- * jsc.pro: Make sure jsc is a console application, and turn off
- exceptions and stl support to fix the build.
-
-2009-07-20 Xan Lopez <xlopez@igalia.com>
-
- Reviewed by Gustavo Noronha.
-
- Do not use C++-style comments in preprocessor directives.
-
- GCC does not like this in some configurations, using C-style
- comments is safer.
-
- * wtf/Platform.h:
-
-2009-07-17 Peter Kasting <pkasting@google.com>
-
- Reviewed by Steve Falkenburg.
-
- https://bugs.webkit.org/show_bug.cgi?id=27323
- Only add Cygwin to the path when it isn't already there. This avoids
- causing problems for people who purposefully have non-Cygwin versions of
- executables like svn in front of the Cygwin ones in their paths.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj:
- * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops:
- * JavaScriptCore.vcproj/jsc/jscCommon.vsprops:
- * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops:
-
-2009-07-17 Gabor Loki <loki@inf.u-szeged.hu>
-
- Reviewed by Gavin Barraclough.
-
- Add YARR support for generic ARM platforms (disabled by default).
- https://bugs.webkit.org/show_bug.cgi?id=24986
-
- Add generic ARM port for MacroAssembler. It supports the whole
- MacroAssembler functionality except floating point.
-
- The class JmpSrc is extended with a flag which enables to patch
- the jump destination offset during execution. This feature is
- required for generic ARM port.
-
- Signed off by Zoltan Herczeg <zherczeg@inf.u-szeged.hu>
- Signed off by Gabor Loki <loki@inf.u-szeged.hu>
-
- * JavaScriptCore.pri:
- * assembler/ARMAssembler.cpp: Added.
- (JSC::ARMAssembler::getLdrImmAddress):
- (JSC::ARMAssembler::linkBranch):
- (JSC::ARMAssembler::patchConstantPoolLoad):
- (JSC::ARMAssembler::getOp2):
- (JSC::ARMAssembler::genInt):
- (JSC::ARMAssembler::getImm):
- (JSC::ARMAssembler::moveImm):
- (JSC::ARMAssembler::dataTransfer32):
- (JSC::ARMAssembler::baseIndexTransfer32):
- (JSC::ARMAssembler::executableCopy):
- * assembler/ARMAssembler.h: Added.
- (JSC::ARM::):
- (JSC::ARMAssembler::ARMAssembler):
- (JSC::ARMAssembler::):
- (JSC::ARMAssembler::JmpSrc::JmpSrc):
- (JSC::ARMAssembler::JmpSrc::enableLatePatch):
- (JSC::ARMAssembler::JmpDst::JmpDst):
- (JSC::ARMAssembler::JmpDst::isUsed):
- (JSC::ARMAssembler::JmpDst::used):
- (JSC::ARMAssembler::emitInst):
- (JSC::ARMAssembler::and_r):
- (JSC::ARMAssembler::ands_r):
- (JSC::ARMAssembler::eor_r):
- (JSC::ARMAssembler::eors_r):
- (JSC::ARMAssembler::sub_r):
- (JSC::ARMAssembler::subs_r):
- (JSC::ARMAssembler::rsb_r):
- (JSC::ARMAssembler::rsbs_r):
- (JSC::ARMAssembler::add_r):
- (JSC::ARMAssembler::adds_r):
- (JSC::ARMAssembler::adc_r):
- (JSC::ARMAssembler::adcs_r):
- (JSC::ARMAssembler::sbc_r):
- (JSC::ARMAssembler::sbcs_r):
- (JSC::ARMAssembler::rsc_r):
- (JSC::ARMAssembler::rscs_r):
- (JSC::ARMAssembler::tst_r):
- (JSC::ARMAssembler::teq_r):
- (JSC::ARMAssembler::cmp_r):
- (JSC::ARMAssembler::orr_r):
- (JSC::ARMAssembler::orrs_r):
- (JSC::ARMAssembler::mov_r):
- (JSC::ARMAssembler::movs_r):
- (JSC::ARMAssembler::bic_r):
- (JSC::ARMAssembler::bics_r):
- (JSC::ARMAssembler::mvn_r):
- (JSC::ARMAssembler::mvns_r):
- (JSC::ARMAssembler::mul_r):
- (JSC::ARMAssembler::muls_r):
- (JSC::ARMAssembler::mull_r):
- (JSC::ARMAssembler::ldr_imm):
- (JSC::ARMAssembler::ldr_un_imm):
- (JSC::ARMAssembler::dtr_u):
- (JSC::ARMAssembler::dtr_ur):
- (JSC::ARMAssembler::dtr_d):
- (JSC::ARMAssembler::dtr_dr):
- (JSC::ARMAssembler::ldrh_r):
- (JSC::ARMAssembler::ldrh_d):
- (JSC::ARMAssembler::ldrh_u):
- (JSC::ARMAssembler::strh_r):
- (JSC::ARMAssembler::push_r):
- (JSC::ARMAssembler::pop_r):
- (JSC::ARMAssembler::poke_r):
- (JSC::ARMAssembler::peek_r):
- (JSC::ARMAssembler::clz_r):
- (JSC::ARMAssembler::bkpt):
- (JSC::ARMAssembler::lsl):
- (JSC::ARMAssembler::lsr):
- (JSC::ARMAssembler::asr):
- (JSC::ARMAssembler::lsl_r):
- (JSC::ARMAssembler::lsr_r):
- (JSC::ARMAssembler::asr_r):
- (JSC::ARMAssembler::size):
- (JSC::ARMAssembler::ensureSpace):
- (JSC::ARMAssembler::label):
- (JSC::ARMAssembler::align):
- (JSC::ARMAssembler::jmp):
- (JSC::ARMAssembler::patchPointerInternal):
- (JSC::ARMAssembler::patchConstantPoolLoad):
- (JSC::ARMAssembler::patchPointer):
- (JSC::ARMAssembler::repatchInt32):
- (JSC::ARMAssembler::repatchPointer):
- (JSC::ARMAssembler::repatchLoadPtrToLEA):
- (JSC::ARMAssembler::linkJump):
- (JSC::ARMAssembler::relinkJump):
- (JSC::ARMAssembler::linkCall):
- (JSC::ARMAssembler::relinkCall):
- (JSC::ARMAssembler::getRelocatedAddress):
- (JSC::ARMAssembler::getDifferenceBetweenLabels):
- (JSC::ARMAssembler::getCallReturnOffset):
- (JSC::ARMAssembler::getOp2Byte):
- (JSC::ARMAssembler::placeConstantPoolBarrier):
- (JSC::ARMAssembler::RM):
- (JSC::ARMAssembler::RS):
- (JSC::ARMAssembler::RD):
- (JSC::ARMAssembler::RN):
- (JSC::ARMAssembler::getConditionalField):
- * assembler/ARMv7Assembler.h:
- (JSC::ARMv7Assembler::JmpSrc::enableLatePatch):
- * assembler/AbstractMacroAssembler.h:
- (JSC::AbstractMacroAssembler::Call::enableLatePatch):
- (JSC::AbstractMacroAssembler::Jump::enableLatePatch):
- * assembler/MacroAssembler.h:
- * assembler/MacroAssemblerARM.h: Added.
- (JSC::MacroAssemblerARM::):
- (JSC::MacroAssemblerARM::add32):
- (JSC::MacroAssemblerARM::and32):
- (JSC::MacroAssemblerARM::lshift32):
- (JSC::MacroAssemblerARM::mul32):
- (JSC::MacroAssemblerARM::not32):
- (JSC::MacroAssemblerARM::or32):
- (JSC::MacroAssemblerARM::rshift32):
- (JSC::MacroAssemblerARM::sub32):
- (JSC::MacroAssemblerARM::xor32):
- (JSC::MacroAssemblerARM::load32):
- (JSC::MacroAssemblerARM::load32WithAddressOffsetPatch):
- (JSC::MacroAssemblerARM::loadPtrWithPatchToLEA):
- (JSC::MacroAssemblerARM::load16):
- (JSC::MacroAssemblerARM::store32WithAddressOffsetPatch):
- (JSC::MacroAssemblerARM::store32):
- (JSC::MacroAssemblerARM::pop):
- (JSC::MacroAssemblerARM::push):
- (JSC::MacroAssemblerARM::move):
- (JSC::MacroAssemblerARM::swap):
- (JSC::MacroAssemblerARM::signExtend32ToPtr):
- (JSC::MacroAssemblerARM::zeroExtend32ToPtr):
- (JSC::MacroAssemblerARM::branch32):
- (JSC::MacroAssemblerARM::branch16):
- (JSC::MacroAssemblerARM::branchTest32):
- (JSC::MacroAssemblerARM::jump):
- (JSC::MacroAssemblerARM::branchAdd32):
- (JSC::MacroAssemblerARM::mull32):
- (JSC::MacroAssemblerARM::branchMul32):
- (JSC::MacroAssemblerARM::branchSub32):
- (JSC::MacroAssemblerARM::breakpoint):
- (JSC::MacroAssemblerARM::nearCall):
- (JSC::MacroAssemblerARM::call):
- (JSC::MacroAssemblerARM::ret):
- (JSC::MacroAssemblerARM::set32):
- (JSC::MacroAssemblerARM::setTest32):
- (JSC::MacroAssemblerARM::tailRecursiveCall):
- (JSC::MacroAssemblerARM::makeTailRecursiveCall):
- (JSC::MacroAssemblerARM::moveWithPatch):
- (JSC::MacroAssemblerARM::branchPtrWithPatch):
- (JSC::MacroAssemblerARM::storePtrWithPatch):
- (JSC::MacroAssemblerARM::supportsFloatingPoint):
- (JSC::MacroAssemblerARM::supportsFloatingPointTruncate):
- (JSC::MacroAssemblerARM::loadDouble):
- (JSC::MacroAssemblerARM::storeDouble):
- (JSC::MacroAssemblerARM::addDouble):
- (JSC::MacroAssemblerARM::subDouble):
- (JSC::MacroAssemblerARM::mulDouble):
- (JSC::MacroAssemblerARM::convertInt32ToDouble):
- (JSC::MacroAssemblerARM::branchDouble):
- (JSC::MacroAssemblerARM::branchTruncateDoubleToInt32):
- (JSC::MacroAssemblerARM::ARMCondition):
- (JSC::MacroAssemblerARM::prepareCall):
- (JSC::MacroAssemblerARM::call32):
- * assembler/X86Assembler.h:
- (JSC::X86Assembler::JmpSrc::enableLatePatch):
- * jit/ExecutableAllocator.h:
- (JSC::ExecutableAllocator::cacheFlush):
- * wtf/Platform.h:
- * yarr/RegexJIT.cpp:
- (JSC::Yarr::RegexGenerator::generateEnter):
- (JSC::Yarr::RegexGenerator::generateReturn):
-
-2009-07-17 Gabor Loki <loki@inf.u-szeged.hu>
-
- Reviewed by Gavin Barraclough.
-
- Extend AssemblerBuffer with constant pool handling mechanism.
- https://bugs.webkit.org/show_bug.cgi?id=24986
-
- Add a platform independed constant pool framework.
- This pool can store 32 or 64 bits values which is enough to hold
- any integer, pointer or double constant.
-
- * assembler/AssemblerBuffer.h:
- (JSC::AssemblerBuffer::putIntUnchecked):
- (JSC::AssemblerBuffer::putInt64Unchecked):
- (JSC::AssemblerBuffer::append):
- (JSC::AssemblerBuffer::grow):
- * assembler/AssemblerBufferWithConstantPool.h: Added.
- (JSC::):
-
-2009-07-17 Eric Roman <eroman@chromium.org>
-
- Reviewed by Darin Adler.
-
- Build fix for non-Darwin.
- Add a guard for inclusion of RetainPtr.h which includes CoreFoundation.h
-
- https://bugs.webkit.org/show_bug.cgi?id=27382
-
- * wtf/unicode/icu/CollatorICU.cpp:
-
-2009-07-17 Alexey Proskuryakov <ap@webkit.org>
-
- Reviewed by John Sullivan.
-
- Get user default collation order via a CFLocale API when available.
-
- * wtf/unicode/icu/CollatorICU.cpp: (WTF::Collator::userDefault):
-
-2009-07-17 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- [Qt] Fix the include path for the Symbian port
- https://bugs.webkit.org/show_bug.cgi?id=27358
-
- * JavaScriptCore.pri:
-
-2009-07-17 Csaba Osztrogonac <oszi@inf.u-szeged.hu>
-
- Reviewed by David Levin.
-
- Build fix on platforms don't have MMAP.
- https://bugs.webkit.org/show_bug.cgi?id=27365
-
- * interpreter/RegisterFile.h: Including stdio.h irrespectively of HAVE(MMAP)
-
-2009-07-16 Fumitoshi Ukai <ukai@chromium.org>
-
- Reviewed by David Levin.
-
- Add --web-sockets flag and ENABLE_WEB_SOCKETS define.
- https://bugs.webkit.org/show_bug.cgi?id=27206
-
- Add ENABLE_WEB_SOCKETS
-
- * Configurations/FeatureDefines.xcconfig: add ENABLE_WEB_SOCKETS
-
-2009-07-16 Maxime Simon <simon.maxime@gmail.com>
-
- Reviewed by Eric Seidel.
-
- Added Haiku-specific files for JavaScriptCore.
- https://bugs.webkit.org/show_bug.cgi?id=26620
-
- * wtf/haiku/MainThreadHaiku.cpp: Added.
- (WTF::initializeMainThreadPlatform):
- (WTF::scheduleDispatchFunctionsOnMainThread):
-
-2009-07-16 Gavin Barraclough <barraclough@apple.com>
-
- RS by Oliver Hunt.
-
- Revert r45969, this fix does not appear to be valid.
- https://bugs.webkit.org/show_bug.cgi?id=27077
-
- * bytecode/CodeBlock.cpp:
- (JSC::CodeBlock::~CodeBlock):
- (JSC::CodeBlock::unlinkCallers):
- * jit/JIT.cpp:
- * jit/JIT.h:
-
-2009-07-16 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
-
- Reviewed by Oliver Hunt.
-
- Allow custom memory allocation control in ExceptionInfo and RareData struct
- https://bugs.webkit.org/show_bug.cgi?id=27336
-
- Inherits ExceptionInfo and RareData struct from FastAllocBase because these
- have been instantiated by 'new' in JavaScriptCore/bytecode/CodeBlock.cpp:1289 and
- in JavaScriptCore/bytecode/CodeBlock.h:453.
-
- Remove unnecessary WTF:: namespace from CodeBlock inheritance.
-
- * bytecode/CodeBlock.h:
-
-2009-07-16 Mark Rowe <mrowe@apple.com>
-
- Rubber-stamped by Geoff Garen.
-
- Fix FeatureDefines.xcconfig to not be out of sync with the rest of the world.
-
- * Configurations/FeatureDefines.xcconfig:
-
-2009-07-16 Yong Li <yong.li@torchmobile.com>
-
- Reviewed by George Staikos.
-
- https://bugs.webkit.org/show_bug.cgi?id=27320
- _countof is only included in CE6; for CE5 we need to define it ourself
-
- * wtf/Platform.h:
-
-2009-07-16 Zoltan Herczeg <zherczeg@inf.u-szeged.hu>
-
- Reviewed by Oliver Hunt.
-
- Workers + garbage collector: weird crashes
- https://bugs.webkit.org/show_bug.cgi?id=27077
-
- We need to unlink cached method call sites when a function is destroyed.
-
- * JavaScriptCore.xcodeproj/project.pbxproj:
- * bytecode/CodeBlock.cpp:
- (JSC::CodeBlock::~CodeBlock):
- (JSC::CodeBlock::unlinkCallers):
- * jit/JIT.cpp:
- (JSC::JIT::unlinkMethodCall):
- * jit/JIT.h:
-
-2009-07-15 Steve Falkenburg <sfalken@apple.com>
-
- Windows Build fix.
-
- Visual Studio reset our intermediate directory on us.
- This sets it back.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
- * JavaScriptCore.vcproj/testapi/testapi.vcproj:
-
-2009-07-15 Kwang Yul Seo <skyul@company100.net>
-
- Reviewed by Eric Seidel.
-
- https://bugs.webkit.org/show_bug.cgi?id=26794
- Make Yacc-generated parsers to use fastMalloc/fastFree.
-
- Define YYMALLOC and YYFREE to fastMalloc and fastFree
- respectively.
-
- * parser/Grammar.y:
-
-2009-07-15 Darin Adler <darin@apple.com>
-
- Fix a build for a particular Apple configuration.
-
- * wtf/FastAllocBase.h: Change include to use "" style for
- including another wtf header. This is the style we use for
- including other public headers in the same directory.
-
-2009-07-15 George Staikos <george.staikos@torchmobile.com>
-
- Reviewed by Adam Treat.
-
- https://bugs.webkit.org/show_bug.cgi?id=27303
- Implement createThreadInternal for WinCE.
- Contains changes by George Staikos <george.staikos@torchmobile.com> and Joe Mason <joe.mason@torchmobile.com>
-
- * wtf/ThreadingWin.cpp:
- (WTF::createThreadInternal):
-
-2009-07-15 Joe Mason <joe.mason@torchmobile.com>
-
- Reviewed by George Staikos.
-
- https://bugs.webkit.org/show_bug.cgi?id=27298
- Platform defines for WINCE.
- Contains changes by Yong Li <yong.li@torchmobile.com>,
- George Staikos <george.staikos@torchmobile.com> and Joe Mason <joe.mason@torchmobile.com>
-
- * wtf/Platform.h:
-
-2009-07-15 Yong Li <yong.li@torchmobile.com>
-
- Reviewed by Adam Treat.
-
- https://bugs.webkit.org/show_bug.cgi?id=27306
- Use RegisterClass instead of RegisterClassEx on WinCE.
-
- * wtf/win/MainThreadWin.cpp:
- (WTF::initializeMainThreadPlatform):
-
-2009-07-15 Yong Li <yong.li@torchmobile.com>
-
- Reviewed by George Staikos.
-
- https://bugs.webkit.org/show_bug.cgi?id=27301
- Use OutputDebugStringW on WinCE since OutputDebugStringA is not supported
- Originally written by Yong Li <yong.li@torchmobile.com> and refactored by
- Joe Mason <joe.mason@torchmobile.com>
-
- * wtf/Assertions.cpp: vprintf_stderr_common
-
-2009-07-15 Yong Li <yong.li@torchmobile.com>
-
- Reviewed by George Staikos.
-
- https://bugs.webkit.org/show_bug.cgi?id=27020
- msToGregorianDateTime should set utcOffset to 0 when outputIsUTC is false
-
- * wtf/DateMath.cpp:
- (WTF::gregorianDateTimeToMS):
-
-2009-07-15 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- [Qt] Cleanup - Remove obsolete code from the make system
- https://bugs.webkit.org/show_bug.cgi?id=27299
-
- * JavaScriptCore.pro:
- * jsc.pro:
-
-2009-07-07 Norbert Leser <norbert.leser@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- https://bugs.webkit.org/show_bug.cgi?id=27056
-
- Alternate bool operator for codewarrior compiler (WINSCW).
- Compiler (latest b482) reports error for UnspecifiedBoolType construct:
- "illegal explicit conversion from 'WTF::OwnArrayPtr<JSC::Register>' to 'bool'"
-
- Same fix as in r38391.
-
- * JavaScriptCore/wtf/OwnArrayPtr.h:
-
-2009-07-15 Norbert Leser <norbert.leser@nokia.com>
-
- Reviewed by Darin Adler.
-
- Qualify include path with wtf to fix compilation
- on Symbian.
- https://bugs.webkit.org/show_bug.cgi?id=27055
-
- * interpreter/Interpreter.h:
-
-2009-07-15 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Dave Kilzer.
-
- Turn off non-portable date manipulations for SYMBIAN
- https://bugs.webkit.org/show_bug.cgi?id=27064
-
- Introduce HAVE(TM_GMTOFF), HAVE(TM_ZONE) and HAVE(TIMEGM) guards
- and place the rules for controlling the guards in Platform.h.
- Turn off these newly introduced guards for SYMBIAN.
-
- * wtf/DateMath.cpp:
- (WTF::calculateUTCOffset):
- * wtf/DateMath.h:
- (WTF::GregorianDateTime::GregorianDateTime):
- (WTF::GregorianDateTime::operator tm):
- * wtf/Platform.h:
-
-2009-07-15 Norbert Leser <norbert.leser@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- Undef ASSERT on Symbian, to avoid excessive warnings
- https://bugs.webkit.org/show_bug.cgi?id=27052
-
- * wtf/Assertions.h:
-
-2009-07-15 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Simon Hausmann.
-
- REGRESSION: fast/js/postfix-syntax.html fails with interpreter
- https://bugs.webkit.org/show_bug.cgi?id=27294
-
- When postfix operators operating on locals assign to the same local
- the order of operations has to be to store the incremented value, then
- store the unmodified number. Rather than implementing this subtle
- semantic in the interpreter I've just made the logic explicit in the
- bytecode generator, so x=x++ effectively becomes x=ToNumber(x) (for a
- local var x).
-
- * parser/Nodes.cpp:
- (JSC::emitPostIncOrDec):
-
-2009-07-15 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Simon Hausmann.
-
- REGRESSION(43559): fast/js/kde/arguments-scope.html fails with interpreter
- https://bugs.webkit.org/show_bug.cgi?id=27259
-
- The interpreter was incorrectly basing its need to create the arguments object
- based on the presence of the callframe's argument reference rather than the local
- arguments reference. Based on this it then overrode the local variable reference.
-
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::privateExecute):
-
-2009-07-14 Steve Falkenburg <sfalken@apple.com>
-
- Reorganize JavaScriptCore headers into:
- API: include/JavaScriptCore/
- Private: include/private/JavaScriptCore/
-
- Reviewed by Darin Adler.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
- * JavaScriptCore.vcproj/testapi/testapi.vcproj:
- * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops:
-
-2009-07-14 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
-
- Reviewed by Darin Adler.
-
- Change JSCell's superclass to NoncopyableCustomAllocated
- https://bugs.webkit.org/show_bug.cgi?id=27248
-
- JSCell class customizes operator new, since Noncopyable will be
- inherited from FastAllocBase, NoncopyableCustomAllocated has
- to be used.
-
- * runtime/JSCell.h:
-
-2009-07-14 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
-
- Reviewed by Darin Adler.
-
- Change all Noncopyable inheriting visibility to public.
- https://bugs.webkit.org/show_bug.cgi?id=27225
-
- Change all Noncopyable inheriting visibility to public because
- it is needed to the custom allocation framework (bug #20422).
-
- * bytecode/SamplingTool.h:
- * bytecompiler/RegisterID.h:
- * interpreter/CachedCall.h:
- * interpreter/RegisterFile.h:
- * parser/Lexer.h:
- * parser/Parser.h:
- * runtime/ArgList.h:
- * runtime/BatchedTransitionOptimizer.h:
- * runtime/Collector.h:
- * runtime/CommonIdentifiers.h:
- * runtime/JSCell.h:
- * runtime/JSGlobalObject.h:
- * runtime/JSLock.h:
- * runtime/JSONObject.cpp:
- * runtime/SmallStrings.cpp:
- * runtime/SmallStrings.h:
- * wtf/CrossThreadRefCounted.h:
- * wtf/GOwnPtr.h:
- * wtf/Locker.h:
- * wtf/MessageQueue.h:
- * wtf/OwnArrayPtr.h:
- * wtf/OwnFastMallocPtr.h:
- * wtf/OwnPtr.h:
- * wtf/RefCounted.h:
- * wtf/ThreadSpecific.h:
- * wtf/Threading.h:
- * wtf/Vector.h:
- * wtf/unicode/Collator.h:
-
-2009-07-14 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
-
- Reviewed by Darin Adler.
-
- Change ParserArenaRefCounted's superclass to RefCountedCustomAllocated
- https://bugs.webkit.org/show_bug.cgi?id=27249
-
- ParserArenaDeletable customizes operator new, to avoid double inheritance
- ParserArenaDeletable's superclass has been changed to RefCountedCustomAllocated.
-
- * parser/Nodes.h:
-
-2009-07-14 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
-
- Reviewed by Darin Adler.
-
- Add RefCountedCustomAllocated to RefCounted.h
- https://bugs.webkit.org/show_bug.cgi?id=27232
-
- Some class which are inherited from RefCounted customize
- operator new, but RefCounted is inherited from Noncopyable
- which will be inherited from FastAllocBase. To avoid
- conflicts Noncopyable inheriting was moved down to RefCounted
- and to avoid double inheritance this class has been added.
-
- * wtf/RefCounted.h:
- (WTF::RefCountedCustomAllocated::deref):
- (WTF::RefCountedCustomAllocated::~RefCountedCustomAllocated):
-
-2009-07-14 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
-
- Reviewed by Darin Adler.
-
- Add NoncopyableCustomAllocated to Noncopyable.h.
- https://bugs.webkit.org/show_bug.cgi?id=27228
-
- Some classes which inherited from Noncopyable overrides operator new
- since Noncopyable'll be inherited from FastAllocBase, Noncopyable.h
- needs to be extended with this new class to support the overriding.
-
- * wtf/Noncopyable.h:
- (WTFNoncopyable::NoncopyableCustomAllocated::NoncopyableCustomAllocated):
- (WTFNoncopyable::NoncopyableCustomAllocated::~NoncopyableCustomAllocated):
-
-2009-07-14 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
-
- Reviewed by Darin Adler.
-
- Allow custom memory allocation control for JavaScriptCore's IdentifierTable class
- https://bugs.webkit.org/show_bug.cgi?id=27260
-
- Inherits IdentifierTable class from FastAllocBase because it has been
- instantiated by 'new' in JavaScriptCore/runtime/Identifier.cpp:70.
-
- * runtime/Identifier.cpp:
-
-2009-07-14 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
-
- Reviewed by Darin Adler.
-
- Allow custom memory allocation control for JavaScriptCore's Profiler class
- https://bugs.webkit.org/show_bug.cgi?id=27253
-
- Inherits Profiler class from FastAllocBase because it has been instantiated by
- 'new' in JavaScriptCore/profiler/Profiler.cpp:56.
-
- * profiler/Profiler.h:
-
-2009-07-06 George Staikos <george.staikos@torchmobile.com>
-
- Reviewed by Adam Treat.
-
- Authors: George Staikos <george.staikos@torchmobile.com>, Joe Mason <joe.mason@torchmobile.com>, Makoto Matsumoto <matumoto@math.keio.ac.jp>, Takuji Nishimura
-
- https://bugs.webkit.org/show_bug.cgi?id=27030
- Implement custom RNG for WinCE using Mersenne Twister
-
- * wtf/RandomNumber.cpp:
- (WTF::randomNumber):
- * wtf/RandomNumberSeed.h:
- (WTF::initializeRandomNumberGenerator):
- * wtf/wince/mt19937ar.c: Added.
- (init_genrand):
- (init_by_array):
- (genrand_int32):
- (genrand_int31):
- (genrand_real1):
- (genrand_real2):
- (genrand_real3):
- (genrand_res53):
-
-2009-07-13 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk>
-
- Unreviewed make dist build fix.
-
- * GNUmakefile.am:
-
-2009-07-13 Drew Wilson <atwilson@google.com>
-
- Reviewed by David Levin.
-
- Add ENABLE(SHARED_WORKERS) flag and define SharedWorker APIs
- https://bugs.webkit.org/show_bug.cgi?id=26932
-
- Added ENABLE(SHARED_WORKERS) flag (off by default).
-
- * Configurations/FeatureDefines.xcconfig:
-
-2009-07-07 Norbert Leser <norbert.leser@nokia.com>
-
- Reviewed by Maciej Stachoviak.
-
- https://bugs.webkit.org/show_bug.cgi?id=27058
-
- Removed superfluous parenthesis around single expression.
- Compilers on Symbian platform fail to properly parse and compile.
-
- * JavaScriptCore/wtf/Platform.h:
-
-2009-07-13 Norbert Leser <norbert.leser@nokia.com>
-
- Reviewed by Maciej Stachoviak.
-
- https://bugs.webkit.org/show_bug.cgi?id=27054
-
- Renamed Translator to HashTranslator
-
- Codewarrior compiler (WINSCW) latest b482 cannot resolve typename
- mismatch between template declaration and definition
- (HashTranslator / Translator)
-
- * wtf/HashSet.h:
-
-2009-07-13 Norbert Leser <norbert.leser@nokia.com>
-
- Reviewed by Eric Seidel.
-
- https://bugs.webkit.org/show_bug.cgi?id=27053
-
- Ambiguity in LabelScope initialization
-
- Codewarrior compiler (WINSCW) latest b482 on Symbian cannot resolve
- type of "0" unambiguously. Set expression explicitly to
- PassRefPtr<Label>::PassRefPtr()
-
- * bytecompiler/BytecodeGenerator.cpp
-
-2009-07-11 Simon Fraser <simon.fraser@apple.com>
-
- Enable support for accelerated compositing and 3d transforms on Leopard.
- <https://bugs.webkit.org/show_bug.cgi?id=20166>
- <rdar://problem/6120614>
-
- Reviewed by Oliver Hunt.
-
- * Configurations/FeatureDefines.xcconfig:
- * wtf/Platform.h:
-
-2009-07-10 Mark Rowe <mrowe@apple.com>
-
- Second part of the "make Windows happier" dance.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
-
-2009-07-10 Mark Rowe <mrowe@apple.com>
-
- Try and make the Windows build happy.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
-
-2009-07-10 Kevin McCullough <kmccullough@apple.com>
-
- Reviewed by Geoffrey Garen.
-
- * debugger/Debugger.h: Made this function virtual for use in WebCore's
- WebInspector.
-
-2009-07-10 Kwang Yul Seo <skyul@company100.net>
-
- Reviewed by Darin Adler.
-
- ParserArenaDeletable should override delete
- https://bugs.webkit.org/show_bug.cgi?id=26790
-
- ParserArenaDeletable overrides new, but it does not override delete.
- ParserArenaDeletable must be freed by fastFree
- because it is allocated by fastMalloc.
-
- * parser/NodeConstructors.h:
- (JSC::ParserArenaDeletable::operator delete):
- * parser/Nodes.h:
-
-2009-07-10 Adam Roben <aroben@apple.com>
-
- Sort all our Xcode projects
-
- Accomplished using sort-Xcode-project-file.
-
- Requested by Dave Kilzer.
-
- * JavaScriptCore.xcodeproj/project.pbxproj:
-
-2009-07-09 Maciej Stachowiak <mjs@apple.com>
-
- Not reviewed, build fix.
-
- Windows build fix for the last change.
-
- * wtf/dtoa.cpp: Forgot to include Vector.h
-
-2009-07-09 Maciej Stachowiak <mjs@apple.com>
-
- Reviewed by Darin Adler.
-
- REGRESSION: crash in edge cases of floating point parsing.
- https://bugs.webkit.org/show_bug.cgi?id=27110
- <rdar://problem/7044458>
-
- Tests: fast/css/number-parsing-crash.html
- fast/css/number-parsing-crash.html
- fast/js/number-parsing-crash.html
-
- * wtf/dtoa.cpp:
- (WTF::BigInt::BigInt): Converted this to more a proper class, using a Vector
- with inline capacity
-
- (WTF::lshift): Rearranged logic somewhat nontrivially to deal with the new way of sizing BigInts.
- Added an assertion to verify that invariants are maintained.
-
- All other functions are adapted fairly mechanically to the above changes.
- (WTF::BigInt::clear):
- (WTF::BigInt::size):
- (WTF::BigInt::resize):
- (WTF::BigInt::words):
- (WTF::BigInt::append):
- (WTF::multadd):
- (WTF::s2b):
- (WTF::i2b):
- (WTF::mult):
- (WTF::cmp):
- (WTF::diff):
- (WTF::b2d):
- (WTF::d2b):
- (WTF::ratio):
- (WTF::strtod):
- (WTF::quorem):
- (WTF::dtoa):
-
-2009-07-09 Drew Wilson <atwilson@google.com>
-
- Reviewed by Alexey Proskuryakov.
-
- Turned on CHANNEL_MESSAGING by default because the MessageChannel API
- can now be implemented for Web Workers and is reasonably stable.
-
- * Configurations/FeatureDefines.xcconfig:
-
-2009-07-09 Oliver Hunt <oliver@apple.com>
-
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::privateExecute):
-
-2009-07-09 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Darin Adler.
-
- Bug 27016 - Interpreter crashes due to invalid array indexes
- <https://bugs.webkit.org/show_bug.cgi?id=27016>
-
- Unsigned vs signed conversions results in incorrect behaviour in
- 64bit interpreter builds.
-
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::privateExecute):
-
-2009-07-09 Dimitri Glazkov <dglazkov@chromium.org>
-
- Reviewed by Darin Fisher.
-
- [Chromium] Upstream JavaScriptCore.gypi, the project file for Chromium build.
- https://bugs.webkit.org/show_bug.cgi?id=27135
-
- * JavaScriptCore.gypi: Added.
-
-2009-07-09 Joe Mason <joe.mason@torchmobile.com>
-
- Reviewed by George Staikos.
-
- Authors: Yong Li <yong.li@torchmobile.com>, Joe Mason <joe.mason@torchmobile.com>
-
- https://bugs.webkit.org/show_bug.cgi?id=27031
- Add an override for deleteOwnedPtr(HDC) on Windows
-
- * wtf/OwnPtrCommon.h:
- * wtf/OwnPtrWin.cpp:
- (WTF::deleteOwnedPtr):
-
-2009-07-09 Laszlo Gombos <laszlo.1.gombos@nokia.com>
-
- Reviewed by Darin Adler.
-
- Guard singal.h dependency with HAVE(SIGNAL_H) to enable building jsc
- on SYMBIAN.
-
- https://bugs.webkit.org/show_bug.cgi?id=27026
-
- Based on Norbert Leser's work.
-
- * jsc.cpp:
- (printUsageStatement):
- (parseArguments):
- * wtf/Platform.h:
-
-2009-07-07 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Sam Weinig.
-
- Stop loading constants into the register file.
-
- Instead, use high register values (highest bit bar the sign bit set) to indicate
- constants in the instruction stream, and when we encounter such a value load it
- directly from the CodeBlock.
-
- Since constants are no longer copied into the register file, this patch renders
- the 'unexpected constant' mechanism redundant, and removes it.
-
- 2% improvement, thanks to Sam Weinig.
+ Relanding r60075.
* bytecode/CodeBlock.cpp:
(JSC::CodeBlock::dump):
- (JSC::CodeBlock::CodeBlock):
- (JSC::CodeBlock::mark):
- (JSC::CodeBlock::shrinkToFit):
+ (JSC::CodeBlock::getByIdExceptionInfoForBytecodeOffset):
* bytecode/CodeBlock.h:
- (JSC::CodeBlock::isTemporaryRegisterIndex):
- (JSC::CodeBlock::constantRegister):
- (JSC::CodeBlock::isConstantRegisterIndex):
- (JSC::CodeBlock::getConstant):
- (JSC::ExecState::r):
* bytecode/Opcode.h:
* bytecompiler/BytecodeGenerator.cpp:
- (JSC::BytecodeGenerator::preserveLastVar):
(JSC::BytecodeGenerator::BytecodeGenerator):
- (JSC::BytecodeGenerator::addConstantValue):
- (JSC::BytecodeGenerator::emitEqualityOp):
- (JSC::BytecodeGenerator::emitLoad):
- (JSC::BytecodeGenerator::emitResolveBase):
- (JSC::BytecodeGenerator::emitResolveWithBase):
- (JSC::BytecodeGenerator::emitNewError):
+ (JSC::BytecodeGenerator::emitConstruct):
* bytecompiler/BytecodeGenerator.h:
- (JSC::BytecodeGenerator::emitNode):
- * interpreter/CallFrame.h:
- (JSC::ExecState::noCaller):
- (JSC::ExecState::hasHostCallFrameFlag):
- (JSC::ExecState::addHostCallFrameFlag):
- (JSC::ExecState::removeHostCallFrameFlag):
+ (JSC::BytecodeGenerator::emitGetByIdExceptionInfo):
* interpreter/Interpreter.cpp:
- (JSC::Interpreter::resolve):
- (JSC::Interpreter::resolveSkip):
- (JSC::Interpreter::resolveGlobal):
- (JSC::Interpreter::resolveBase):
- (JSC::Interpreter::resolveBaseAndProperty):
- (JSC::Interpreter::resolveBaseAndFunc):
- (JSC::Interpreter::dumpRegisters):
- (JSC::Interpreter::throwException):
- (JSC::Interpreter::createExceptionScope):
(JSC::Interpreter::privateExecute):
- (JSC::Interpreter::retrieveArguments):
* jit/JIT.cpp:
(JSC::JIT::privateCompileMainPass):
- * jit/JITInlineMethods.h:
- (JSC::JIT::emitLoadDouble):
- (JSC::JIT::emitLoadInt32ToDouble):
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_new_error):
- (JSC::JIT::emit_op_enter):
- (JSC::JIT::emit_op_enter_with_activation):
- * parser/Nodes.cpp:
- (JSC::DeleteResolveNode::emitBytecode):
- (JSC::DeleteValueNode::emitBytecode):
- (JSC::PrefixResolveNode::emitBytecode):
- * runtime/JSActivation.cpp:
- (JSC::JSActivation::JSActivation):
- * wtf/Platform.h:
-
-2009-07-07 Mark Rowe <mrowe@apple.com>
-
- Reviewed by Darin Adler.
-
- Fix <https://bugs.webkit.org/show_bug.cgi?id=27025> / <rdar://problem/7033448>.
- Bug 27025: Crashes and regression test failures related to regexps in 64-bit
-
- For x86_64 RegexGenerator uses rbx, a callee-save register, as a scratch register but
- neglects to save and restore it. The change in handling of the output vector in r45545
- altered code generation so that the RegExp::match was now storing important data in rbx,
- which caused crashes and bogus results when it was clobbered.
-
- * yarr/RegexJIT.cpp:
- (JSC::Yarr::RegexGenerator::generateEnter): Save rbx.
- (JSC::Yarr::RegexGenerator::generateReturn): Restore rbx.
-
-2009-07-06 Ada Chan <adachan@apple.com>
-
- Reviewed by Darin Adler and Mark Rowe.
-
- Decommitted spans are added to the list of normal spans rather than
- the returned spans in TCMalloc_PageHeap::Delete().
- https://bugs.webkit.org/show_bug.cgi?id=26998
-
- In TCMalloc_PageHeap::Delete(), the deleted span can be decommitted in
- the process of merging with neighboring spans that are also decommitted.
- The merged span needs to be placed in the list of returned spans (spans
- whose memory has been returned to the system). Right now it's always added
- to the list of the normal spans which can theoretically cause thrashing.
-
- * wtf/FastMalloc.cpp:
- (WTF::TCMalloc_PageHeap::Delete):
-
-2009-07-05 Lars Knoll <lars.knoll@nokia.com>
-
- Reviewed by Maciej Stachowiak.
-
- https://bugs.webkit.org/show_bug.cgi?id=26843
-
- Fix run-time crashes in JavaScriptCore with the Metrowerks compiler on Symbian.
-
- The Metrowerks compiler on the Symbian platform moves the globally
- defined Hashtables into read-only memory, despite one of the members
- being mutable. This causes crashes at run-time due to write access to
- read-only memory.
-
- Avoid the use of const with this compiler by introducing the
- JSC_CONST_HASHTABLE macro.
-
- Based on idea by Norbert Leser.
-
- * runtime/Lookup.h: Define JSC_CONST_HASHTABLE as const for !WINSCW.
- * create_hash_table: Use JSC_CONST_HASHTABLE for hashtables.
- * runtime/JSGlobalData.cpp: Import various global hashtables via the macro.
-
-2009-07-04 Dan Bernstein <mitz@apple.com>
-
- - debug build fix
-
- * runtime/RegExpConstructor.cpp:
- (JSC::RegExpConstructor::getLastParen):
-
-2009-07-03 Yong Li <yong.li@torchmobile.com>
-
- Reviewed by Maciej Stachowiak (and revised slightly)
-
- RegExp::match to be optimized
- https://bugs.webkit.org/show_bug.cgi?id=26957
-
- Allow regexp matching to use Vectors with inline capacity instead of
- allocating a new ovector buffer every time.
-
- ~5% speedup on SunSpider string-unpack-code test, 0.3% on SunSpider overall.
-
- * runtime/RegExp.cpp:
- (JSC::RegExp::match):
- * runtime/RegExp.h:
- * runtime/RegExpConstructor.cpp:
- (JSC::RegExpConstructorPrivate::RegExpConstructorPrivate):
- (JSC::RegExpConstructorPrivate::lastOvector):
- (JSC::RegExpConstructorPrivate::tempOvector):
- (JSC::RegExpConstructorPrivate::changeLastOvector):
- (JSC::RegExpConstructor::performMatch):
- (JSC::RegExpMatchesArray::RegExpMatchesArray):
- (JSC::RegExpMatchesArray::fillArrayInstance):
- (JSC::RegExpConstructor::getBackref):
- (JSC::RegExpConstructor::getLastParen):
- (JSC::RegExpConstructor::getLeftContext):
- (JSC::RegExpConstructor::getRightContext):
- * runtime/StringPrototype.cpp:
- (JSC::stringProtoFuncSplit):
-
-2009-06-30 Kwang Yul Seo <skyul@company100.net>
-
- Reviewed by Eric Seidel.
-
- Override operator new/delete with const std::nothrow_t& as the second
- argument.
- https://bugs.webkit.org/show_bug.cgi?id=26792
-
- On Windows CE, operator new/delete, new[]/delete[] with const
- std::nothrow_t& must be overrided because some standard template
- libraries use these operators.
-
- The problem occurs when memory allocated by new(size_t s, const
- std::nothrow_t&) is freed by delete(void* p). This causes the umatched
- malloc/free problem.
-
- The patch overrides all new, delete, new[] and delete[] to use
- fastMaloc and fastFree consistently.
-
- * wtf/FastMalloc.h:
- (throw):
-
-2009-06-30 Gabor Loki <loki@inf.u-szeged.hu>
-
- Reviewed by Sam Weinig.
-
- <https://bugs.webkit.org/show_bug.cgi?id=24986>
-
- Remove unnecessary references to AssemblerBuffer.
-
- * interpreter/Interpreter.cpp:
- * interpreter/Interpreter.h:
-
-2009-06-29 David Levin <levin@chromium.org>
-
- Reviewed by Oliver Hunt.
-
- Still seeing occasional leaks from UString::sharedBuffer code
- https://bugs.webkit.org/show_bug.cgi?id=26420
-
- The problem is that the pointer to the memory allocation isn't visible
- by "leaks" due to the lower bits being used as flags. The fix is to
- make the pointer visible in memory (in debug only). The downside of
- this fix that the memory allocated by sharedBuffer will still look like
- a leak in non-debug builds when any flags are set.
-
- * wtf/PtrAndFlags.h:
- (WTF::PtrAndFlags::set):
-
-2009-06-29 Sam Weinig <sam@webkit.org>
-
- Reviewed by Mark Rowe.
-
- Remove more unused scons support.
-
- * SConstruct: Removed.
-
-2009-06-29 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- <rdar://problem/7016214> JSON.parse fails to parse valid JSON with most Unicode characters
- <https://bugs.webkit.org/show_bug.cgi?id=26802>
-
- In the original JSON.parse patch unicode was handled correctly, however in some last
- minute "clean up" I oversimplified isSafeStringCharacter. This patch corrects this bug.
-
- * runtime/LiteralParser.cpp:
- (JSC::isSafeStringCharacter):
- (JSC::LiteralParser::Lexer::lexString):
-
-2009-06-26 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Dan Bernstein.
-
- <rdar://problem/7009684> REGRESSION(r45039): Crashes inside JSEvent::put on PowerPC (26746)
- <https://bugs.webkit.org/show_bug.cgi?id=26746>
-
- Fix for r45039 incorrectly uncached a get_by_id by converting it to put_by_id. Clearly this
- is less than correct. This patch corrects that error.
-
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::tryCacheGetByID):
-
-2009-06-26 Eric Seidel <eric@webkit.org>
-
- No review, only rolling out r45259.
-
- Roll out r45259 after crash appeared on the bots:
- plugins/undefined-property-crash.html
- ASSERTION FAILED: s <= HeapConstants<heapType>::cellSize
- (leopard-intel-debug-tests/build/JavaScriptCore/runtime/Collector.cpp:278
- void* JSC::Heap::heapAllocate(size_t) [with JSC::HeapType heapType = PrimaryHeap])
-
- * runtime/DateInstance.cpp:
- * runtime/Identifier.cpp:
- * runtime/Lookup.h:
- * runtime/RegExpConstructor.cpp:
- * runtime/RegExpObject.h:
- * runtime/ScopeChain.h:
- * runtime/UString.h:
-
-2009-06-26 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
-
- Reviewed by Simon Hausmann.
-
- Add support for QDataStream operators to Vector.
-
- * wtf/Vector.h:
- (WTF::operator<<):
- (WTF::operator>>):
-
-2009-06-24 Sam Weinig <sam@webkit.org>
-
- Reviewed by Gavin Barraclough.
-
- Make the opcode sampler work once again.
-
* jit/JIT.h:
- (JSC::JIT::compileGetByIdProto):
- (JSC::JIT::compileGetByIdSelfList):
- (JSC::JIT::compileGetByIdProtoList):
- (JSC::JIT::compileGetByIdChainList):
- (JSC::JIT::compileGetByIdChain):
- (JSC::JIT::compilePutByIdTransition):
- (JSC::JIT::compileCTIMachineTrampolines):
- (JSC::JIT::compilePatchGetArrayLength):
- * jit/JITStubCall.h:
- (JSC::JITStubCall::call):
-
-2009-06-24 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
-
- Reviewed by Maciej Stachowiak.
-
- Extend FastAllocBase.h with 'using WTF::FastAllocBase' to avoid
- unnecessary WTF:: usings.
- Remove existing unnecessary WTF:: usings.
-
- * interpreter/Interpreter.h:
- * profiler/CallIdentifier.h:
- * runtime/ScopeChain.h:
- * wtf/FastAllocBase.h:
-
-2009-06-24 David Levin <levin@chromium.org>
-
- Fix all builds.
-
- * bytecode/CodeBlock.h:
- * bytecompiler/BytecodeGenerator.h:
- * interpreter/Register.h:
-
-2009-06-24 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
-
- Reviewed by Maciej Stachowiak.
-
- https://bugs.webkit.org/show_bug.cgi?id=26677
-
- Inherits CodeBlock class from FastAllocBase because it
- has been instantiated by 'new' in JavaScriptCore/bytecode/CodeBlock.h:217.
-
- * bytecode/CodeBlock.h:
-
-2009-06-24 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
-
- Reviewed by Maciej Stachowiak.
-
- https://bugs.webkit.org/show_bug.cgi?id=26676
-
- Inherits BytecodeGenerator class from FastAllocBase because it has been
- instantiated by 'new' in JavaScriptCore/parser/Nodes.cpp:1892.
-
- * bytecompiler/BytecodeGenerator.h:
-
-2009-06-24 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
-
- Reviewed by Maciej Stachowiak.
-
- https://bugs.webkit.org/show_bug.cgi?id=26675
-
- Inherits Register class from FastAllocBase because it has been
- instantiated by 'new' in JavaScriptCore/runtime/JSVariableObject.h:149.
-
- * interpreter/Register.h:
-
-2009-06-24 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
-
- Reviewed by Darin Adler.
-
- https://bugs.webkit.org/show_bug.cgi?id=26674
-
- Inherits HashMap class from FastAllocBase because it has been
- instantiated by 'new' in JavaScriptCore/runtime/Structure.cpp:458.
-
- * wtf/HashMap.h:
-
-2009-06-24 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Darin Adler.
-
- <rdar://problem/6940519> REGRESSION (Safari 4 Public Beta - TOT): google.com/adplanner shows blank page instead of site details in "basic research'
-
- The problem was caused by the page returned with a function using a
- var declaration list containing around ~3000 variables. The solution
- to this is to flatten the comma expression representation and make
- codegen comma expressions and initializer lists iterative rather than
- recursive.
-
- * parser/Grammar.y:
- * parser/NodeConstructors.h:
- (JSC::CommaNode::CommaNode):
- * parser/Nodes.cpp:
- (JSC::CommaNode::emitBytecode):
- * parser/Nodes.h:
- (JSC::ExpressionNode::isCommaNode):
- (JSC::CommaNode::isCommaNode):
- (JSC::CommaNode::append):
-
-2009-06-24 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
-
- Reviewed by Maciej Stachowiak.
-
- https://bugs.webkit.org/show_bug.cgi?id=26645
-
- Inherits ScopeChainNode class from FastAllocBase because it has been
- instantiated by 'new' in JavaScriptCore/runtime/ScopeChain.h:95.
-
- * wtf/RefPtr.h:
-
-2009-06-24 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
-
- Reviewed by Darin Adler.
-
- https://bugs.webkit.org/show_bug.cgi?id=26648
-
- Inherits Deque class from FastAllocBase because it has been
- instantiated by 'new' with DEFINE_STATIC_LOCAL macro in
- JavaScriptCore/wtf/MainThread.cpp:62.
-
- * wtf/Deque.h:
-
-2009-06-24 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
-
- Reviewed by Darin Adler.
-
- https://bugs.webkit.org/show_bug.cgi?id=26644
-
- Inherits RefPtr class from FastAllocBase because it has been
- instantiated by 'new' in JavaScriptCore/runtime/StructureChain.cpp:41.
-
- * wtf/RefPtr.h:
-
-2009-06-24 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
-
- Reviewed by Darin Adler.
-
- Inherits HashSet class from FastAllocBase, because it has been
- instantiated by 'new' in JavaScriptCore/runtime/Collector.h:116.
-
- * wtf/HashSet.h:
-
-2009-06-24 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
-
- Reviewed by Darin Adler.
-
- Inherits Vector class from FastAllocBase because it has been
- instantiated by 'new' in JavaScriptCore/runtime/Structure.cpp:633.
-
- * wtf/Vector.h:
-
-2009-06-24 Norbert Leser <norbert.leser@nokia.com>
-
- Reviewed by Maciej Stachoviak.
-
- The BytecodeGenerator objects were instantiated on stack, which takes up ~38kB per instance
- (each instance includes copy of JSC::CodeBlock with large SymbolTable, etc.).
- Specifically, since there is nested invocation (e.g., GlobalCode --> FunctionCode),
- the stack overflows immediately on Symbian hardware (max. 80 kB).
- Proposed change allocates generator objects on heap.
- Performance impact (if any) should be negligible and change is proposed as general fix,
- rather than ifdef'd for SYMBIAN.
-
- * parser/Nodes.cpp:
- (JSC::ProgramNode::generateBytecode):
- (JSC::EvalNode::generateBytecode):
- (JSC::EvalNode::bytecodeForExceptionInfoReparse):
- (JSC::FunctionBodyNode::generateBytecode):
- (JSC::FunctionBodyNode::bytecodeForExceptionInfoReparse):
-
-2009-06-23 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- <rdar://problem/6992806> REGRESSION: Enumeration can skip new properties in cases of prototypes that have more than 64 (26593)
- <https://bugs.webkit.org/show_bug.cgi?id=26593>
-
- Do not attempt to cache structure chains if they contain a dictionary at any level.
-
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::tryCachePutByID):
- (JSC::Interpreter::tryCacheGetByID):
- * jit/JITStubs.cpp:
- (JSC::JITThunks::tryCachePutByID):
- * runtime/Structure.cpp:
- (JSC::Structure::getEnumerablePropertyNames):
- (JSC::Structure::addPropertyTransition):
- * runtime/StructureChain.cpp:
- (JSC::StructureChain::isCacheable):
- * runtime/StructureChain.h:
-
-2009-06-23 Yong Li <yong.li@torchmobile.com>
-
- Reviewed by George Staikos.
-
- https://bugs.webkit.org/show_bug.cgi?id=26654
- Add the proper export define for the JavaScriptCore API when building for WINCE.
-
- * API/JSBase.h:
-
-2009-06-23 Joe Mason <joe.mason@torchmobile.com>
-
- Reviewed by Adam Treat.
-
- Authors: Yong Li <yong.li@torchmobile.com>, Joe Mason <joe.mason@torchmobile.com>
-
- https://bugs.webkit.org/show_bug.cgi?id=26611
- Implement currentThreadStackBase on WINCE by adding a global,
- g_stackBase, which must be set to the address of a local variable
- by the caller before calling any WebKit function that invokes JSC.
-
- * runtime/Collector.cpp:
- (JSC::isPageWritable):
- (JSC::getStackBase):
- Starts at the top of the stack and returns the entire range of
- consecutive writable pages as an estimate of the actual stack.
- This will be much bigger than the actual stack range, so some
- dead objects can't be collected, but it guarantees live objects
- aren't collected prematurely.
-
- (JSC::currentThreadStackBase):
- On WinCE, returns g_stackBase if set or call getStackBase as a
- fallback if not.
-
-2009-06-23 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Alexey Proskuryakov.
-
- Fix stupid performance problem in the LiteralParser
-
- The LiteralParser was making a new UString in order to use
- toDouble, however UString's toDouble allows a much wider range
- of numberic strings than the LiteralParser accepts, and requires
- an additional heap allocation or two for the construciton of the
- UString. To rectify this we just call WTF::dtoa directly using
- a stack allocated buffer to hold the validated numeric literal.
-
- * runtime/LiteralParser.cpp:
- (JSC::LiteralParser::Lexer::lexNumber):
- (JSC::LiteralParser::parse):
- * runtime/LiteralParser.h:
-
-2009-06-22 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Alexey Proskuryakov.
-
- Bug 26640: JSON.stringify needs to special case Boolean objects
- <https://bugs.webkit.org/show_bug.cgi?id=26640>
-
- Add special case handling of the Boolean object so we match current
- ES5 errata.
-
- * runtime/JSONObject.cpp:
- (JSC::unwrapBoxedPrimitive): renamed from unwrapNumberOrString
- (JSC::gap):
- (JSC::Stringifier::appendStringifiedValue):
-
-2009-06-22 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Darin Adler.
-
- Bug 26591: Support revivers in JSON.parse
- <https://bugs.webkit.org/show_bug.cgi?id=26591>
-
- Add reviver support to JSON.parse. This completes the JSON object.
-
- * runtime/JSONObject.cpp:
- (JSC::Walker::Walker):
- (JSC::Walker::callReviver):
- (JSC::Walker::walk):
- (JSC::JSONProtoFuncParse):
-
-2009-06-21 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Darin Adler.
-
- Bug 26592: Support standard toJSON functions
- <https://bugs.webkit.org/show_bug.cgi?id=26592>
-
- Add support for the standard Date.toJSON function.
-
- * runtime/DatePrototype.cpp:
- (JSC::dateProtoFuncToJSON):
-
-2009-06-21 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Sam Weinig.
-
- Bug 26594: JSC needs to support Date.toISOString
- <https://bugs.webkit.org/show_bug.cgi?id=26594>
-
- Add support for Date.toISOString.
-
- * runtime/DatePrototype.cpp:
- (JSC::dateProtoFuncToISOString):
-
-2009-06-21 Oliver Hunt <oliver@apple.com>
-
- Remove dead code.
-
- * runtime/LiteralParser.cpp:
- (JSC::LiteralParser::parse):
-
-2009-06-21 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Darin Adler and Cameron Zwarich.
-
- Bug 26587: Support JSON.parse
- <https://bugs.webkit.org/show_bug.cgi?id=26587>
-
- Extend the LiteralParser to support the full strict JSON
- grammar, fix a few places where the grammar was incorrectly
- lenient. Doesn't yet support the JSON.parse reviver function
- but that does not block the JSON.parse functionality itself.
-
- * interpreter/Interpreter.cpp:
- (JSC::Interpreter::callEval):
- * runtime/JSGlobalObjectFunctions.cpp:
- (JSC::globalFuncEval):
- * runtime/JSONObject.cpp:
- (JSC::JSONProtoFuncParse):
- * runtime/LiteralParser.cpp:
- (JSC::LiteralParser::Lexer::lex):
- (JSC::isSafeStringCharacter):
- (JSC::LiteralParser::Lexer::lexString):
- (JSC::LiteralParser::parse):
- * runtime/LiteralParser.h:
- (JSC::LiteralParser::LiteralParser):
- (JSC::LiteralParser::tryJSONParse):
- (JSC::LiteralParser::):
- (JSC::LiteralParser::Lexer::Lexer):
-
-2009-06-21 David Levin <levin@chromium.org>
-
- Reviewed by NOBODY (speculative build fix for windows).
-
- Simply removed some whitespace form this file to make windows build wtf and
- hopefully copy the new MessageQueque.h so that WebCore picks it up.
-
- * wtf/Assertions.cpp:
-
-2009-06-21 Drew Wilson <atwilson@google.com>
-
- Reviewed by David Levin.
-
- <https://bugs.webkit.org/show_bug.cgi?id=25043>
- Added support for multi-threaded MessagePorts.
-
- * wtf/MessageQueue.h:
- (WTF::::appendAndCheckEmpty):
- Added API to test whether the queue was empty before adding an element.
-
-2009-06-20 David D. Kilzer <ddkilzer@webkit.org>
-
- Fix namespace comment in SegmentedVector.h
-
- * wtf/SegmentedVector.h: Updated namespace comment to reflect
- new namespace after r44897.
-
-2009-06-20 Zoltan Herczeg <zherczeg@inf.u-szeged.hu>
-
- Bug 24986: ARM JIT port
- <https://bugs.webkit.org/show_bug.cgi?id=24986>
-
- Reviewed by Oliver Hunt.
-
- An Iterator added for SegmentedVector. Currently
- only the pre ++ operator is supported.
-
- * wtf/SegmentedVector.h:
- (WTF::SegmentedVectorIterator::~SegmentedVectorIterator):
- (WTF::SegmentedVectorIterator::operator*):
- (WTF::SegmentedVectorIterator::operator->):
- (WTF::SegmentedVectorIterator::operator++):
- (WTF::SegmentedVectorIterator::operator==):
- (WTF::SegmentedVectorIterator::operator!=):
- (WTF::SegmentedVectorIterator::operator=):
- (WTF::SegmentedVectorIterator::SegmentedVectorIterator):
- (WTF::SegmentedVector::alloc):
- (WTF::SegmentedVector::begin):
- (WTF::SegmentedVector::end):
-
-2009-06-20 Zoltan Herczeg <zherczeg@inf.u-szeged.hu>
-
- Bug 24986: ARM JIT port
- <https://bugs.webkit.org/show_bug.cgi?id=24986>
-
- Reviewed by Oliver Hunt.
-
- Move SegmentedVector to /wtf subdirectory
- and change "namespace JSC" to "namespace WTF"
-
- Additional build file updates by David Kilzer.
-
- * GNUmakefile.am: Updated path to SegmentedVector.h.
- * JavaScriptCore.order: Updated SegmentedVector namespace from
- JSC to WTF in mangled C++ method name.
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
- Removed reference to bytecompiler\SegmentedVector.h.
- * JavaScriptCore.vcproj/WTF/WTF.vcproj: Added reference to
- wtf\SegmentedVector.h.
- * JavaScriptCore.xcodeproj/project.pbxproj: Moved
- SegmentedVector.h definition from bytecompiler subdirectory to
- wtf subdirectory.
- * bytecompiler/BytecodeGenerator.h: Updated #include path to
- SegmentedVector.h and prepended WTF:: namespace to its use.
- * parser/Lexer.h: Ditto.
- * wtf/SegmentedVector.h: Renamed from JavaScriptCore/bytecompiler/SegmentedVector.h.
- (WTF::SegmentedVector::SegmentedVector):
- (WTF::SegmentedVector::~SegmentedVector):
- (WTF::SegmentedVector::size):
- (WTF::SegmentedVector::at):
- (WTF::SegmentedVector::operator[]):
- (WTF::SegmentedVector::last):
- (WTF::SegmentedVector::append):
- (WTF::SegmentedVector::removeLast):
- (WTF::SegmentedVector::grow):
- (WTF::SegmentedVector::clear):
- (WTF::SegmentedVector::deleteAllSegments):
- (WTF::SegmentedVector::segmentExistsFor):
- (WTF::SegmentedVector::segmentFor):
- (WTF::SegmentedVector::subscriptFor):
- (WTF::SegmentedVector::ensureSegmentsFor):
- (WTF::SegmentedVector::ensureSegment):
-
-2009-06-19 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (build fix take 2 - rename FIELD_OFFSET to something that doesn't conflict with winnt.h).
-
- * jit/JIT.cpp:
- (JSC::JIT::privateCompile):
- (JSC::JIT::privateCompileCTIMachineTrampolines):
- (JSC::JIT::emitGetVariableObjectRegister):
- (JSC::JIT::emitPutVariableObjectRegister):
- * jit/JIT.h:
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_rshift):
- (JSC::JIT::emitSlow_op_jnless):
- (JSC::JIT::emitSlow_op_jnlesseq):
- (JSC::JIT::compileBinaryArithOp):
* jit/JITCall.cpp:
- (JSC::JIT::compileOpCallInitializeCallFrame):
(JSC::JIT::compileOpCall):
- * jit/JITInlineMethods.h:
- (JSC::JIT::restoreArgumentReference):
- (JSC::JIT::checkStructure):
+ (JSC::JIT::compileOpCallSlowCase):
+ * jit/JITCall32_64.cpp:
+ (JSC::JIT::compileOpCall):
+ (JSC::JIT::compileOpCallSlowCase):
* jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_instanceof):
- (JSC::JIT::emit_op_get_scoped_var):
- (JSC::JIT::emit_op_put_scoped_var):
- (JSC::JIT::emit_op_construct_verify):
- (JSC::JIT::emit_op_resolve_global):
- (JSC::JIT::emit_op_jeq_null):
- (JSC::JIT::emit_op_jneq_null):
- (JSC::JIT::emit_op_to_jsnumber):
- (JSC::JIT::emit_op_catch):
- (JSC::JIT::emit_op_eq_null):
+ (JSC::JIT::privateCompileCTIMachineTrampolines):
+ (JSC::JIT::privateCompileCTINativeCall):
(JSC::JIT::emit_op_neq_null):
(JSC::JIT::emit_op_convert_this):
- (JSC::JIT::emit_op_profile_will_call):
- (JSC::JIT::emit_op_profile_did_call):
- (JSC::JIT::emitSlow_op_get_by_val):
- * jit/JITPropertyAccess.cpp:
- (JSC::JIT::emit_op_get_by_val):
- (JSC::JIT::emit_op_put_by_val):
- (JSC::JIT::emit_op_method_check):
- (JSC::JIT::compileGetByIdHotPath):
- (JSC::JIT::emit_op_put_by_id):
- (JSC::JIT::compilePutDirectOffset):
- (JSC::JIT::compileGetDirectOffset):
- (JSC::JIT::privateCompilePutByIdTransition):
- (JSC::JIT::privateCompilePatchGetArrayLength):
- * jit/JITStubs.cpp:
- (JSC::JITThunks::JITThunks):
-
-2009-06-19 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (Windows build fix).
-
- * jit/JIT.h:
- * jit/JITInlineMethods.h:
-
-2009-06-19 Gabor Loki <loki@inf.u-szeged.hu>
-
- Reviewed by Gavin Barraclough.
-
- Reorganize ARM architecture specific macros.
- Use PLATFORM_ARM_ARCH(7) instead of PLATFORM(ARM_V7).
-
- Bug 24986: ARM JIT port
- <https://bugs.webkit.org/show_bug.cgi?id=24986>
-
- * assembler/ARMv7Assembler.h:
- * assembler/AbstractMacroAssembler.h:
- (JSC::AbstractMacroAssembler::Imm32::Imm32):
- * assembler/MacroAssembler.h:
- * assembler/MacroAssemblerCodeRef.h:
- (JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr):
- * jit/ExecutableAllocator.h:
- (JSC::ExecutableAllocator::cacheFlush):
- * jit/JIT.h:
- * jit/JITInlineMethods.h:
- (JSC::JIT::restoreArgumentReferenceForTrampoline):
- * jit/JITStubs.cpp:
- * jit/JITStubs.h:
- * wtf/Platform.h:
- * yarr/RegexJIT.cpp:
- (JSC::Yarr::RegexGenerator::generateEnter):
- (JSC::Yarr::RegexGenerator::generateReturn):
-
-2009-06-19 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Fix armv7 JIT build issues.
-
- Unfortunate the arm compiler does not like the use of offsetof on JITStackFrame (since it now contains non POD types),
- and the FIELD_OFFSET macro does not appear constantish enough for it to be happy with its use in COMPILE_ASSERT macros.
-
- * Replace offsetofs with FIELD_OFFSETs (safe on C++ objects).
- * Move COMPILE_ASSERTs defending layout of JITStackFrame structure on armv7 into JITThunks constructor.
-
- * jit/JIT.cpp:
- * jit/JIT.h:
- * jit/JITInlineMethods.h:
- (JSC::JIT::restoreArgumentReference):
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_catch):
- * jit/JITStubs.cpp:
- (JSC::JITThunks::JITThunks):
-
-2009-06-19 Adam Treat <adam.treat@torchmobile.com>
-
- Blind attempt at build fix.
-
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
-
-2009-06-19 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
-
- Reviewed by Oliver Hunt.
-
- Inherits CallIdentifier struct from FastAllocBase because it has been
- instantiated by 'new' in JavaScriptCore/profiler/CallIdentifier.h:86.
-
- * wtf/HashCountedSet.h:
-
-2009-06-19 Adam Treat <adam.treat@torchmobile.com>
-
- Reviewed by Oliver Hunt.
-
- https://bugs.webkit.org/show_bug.cgi?id=26540
- Modify the test shell to add a new function 'checkSyntax' that will
- only parse the source instead of executing it. In this way we can test
- pure parsing performance against some of the larger scripts in the wild.
-
- * jsc.cpp:
- (GlobalObject::GlobalObject):
- (functionCheckSyntax):
-
-2009-06-19 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
-
- Reviewed by Darin Adler.
-
- Inherits HashCountedSet class from FastAllocBase because it has been
- instantiated by 'new' in JavaScriptCore/runtime/Collector.cpp:1095.
-
- * wtf/HashCountedSet.h:
-
-2009-06-19 Yong Li <yong.li@torchmobile.com>
-
- Reviewed by George Staikos.
-
- https://bugs.webkit.org/show_bug.cgi?id=26558
- Declare these symbols extern for WINCE as they are provided by libce.
-
- * runtime/DateConstructor.cpp:
- * runtime/DatePrototype.cpp:
- (JSC::formatLocaleDate):
-
-2009-06-19 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Maciej Stachowiak.
-
- <rdar://problem/6988973> ScopeChain leak in interpreter builds
-
- Move the Scopechain destruction code in JSFunction outside of the ENABLE(JIT)
- path.
-
- * runtime/JSFunction.cpp:
- (JSC::JSFunction::~JSFunction):
- * wtf/Platform.h:
-
-2009-06-19 Yong Li <yong.li@torchmobile.com>
-
- Reviewed by George Staikos.
-
- https://bugs.webkit.org/show_bug.cgi?id=26543
- Windows CE uses 'GetLastError' instead of 'errno.'
-
- * interpreter/RegisterFile.h:
- (JSC::RegisterFile::RegisterFile):
- (JSC::RegisterFile::grow):
-
-2009-06-19 David Levin <levin@chromium.org>
-
- Reviewed by NOBODY (Windows build fix).
-
- Add export for Windows corresponding to OSX export done in r44844.
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
- * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
-
-2009-06-18 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin "Viceroy of Venezuela" Barraclough.
-
- Bug 26532: Native functions do not correctly unlink from optimised callsites when they're collected
- <https://bugs.webkit.org/show_bug.cgi?id=26532> <rdar://problem/6625385>
-
- We need to make sure that each native function instance correctly unlinks any references to it
- when it is collected. Allowing this to happen required a few changes:
- * Every native function needs a codeblock to track the link information
- * To have this codeblock, every function now also needs its own functionbodynode
- so we no longer get to have a single shared instance.
- * Identifying a host function is now done by looking for CodeBlock::codeType() == NativeCode
-
- * JavaScriptCore.exp:
- * bytecode/CodeBlock.cpp:
- (JSC::CodeBlock::CodeBlock):
- Constructor for NativeCode CodeBlock
- (JSC::CodeBlock::derefStructures):
- (JSC::CodeBlock::refStructures):
- (JSC::CodeBlock::reparseForExceptionInfoIfNecessary):
- (JSC::CodeBlock::handlerForBytecodeOffset):
- (JSC::CodeBlock::lineNumberForBytecodeOffset):
- (JSC::CodeBlock::expressionRangeForBytecodeOffset):
- (JSC::CodeBlock::getByIdExceptionInfoForBytecodeOffset):
- (JSC::CodeBlock::functionRegisterForBytecodeOffset):
- (JSC::CodeBlock::hasGlobalResolveInstructionAtBytecodeOffset):
- (JSC::CodeBlock::hasGlobalResolveInfoAtBytecodeOffset):
- (JSC::CodeBlock::setJITCode):
- Add assertions to ensure we don't try and use NativeCode CodeBlocks as
- a normal codeblock.
-
- * bytecode/CodeBlock.h:
- (JSC::):
- (JSC::CodeBlock::source):
- (JSC::CodeBlock::sourceOffset):
- (JSC::CodeBlock::evalCodeCache):
- (JSC::CodeBlock::createRareDataIfNecessary):
- More assertions.
-
- * jit/JIT.cpp:
+ (JSC::JIT::emit_op_get_callee):
+ (JSC::JIT::emit_op_create_this):
+ * jit/JITOpcodes32_64.cpp:
(JSC::JIT::privateCompileCTIMachineTrampolines):
- (JSC::JIT::linkCall):
- Update logic to allow native function caching
-
- * jit/JITStubs.cpp:
- * parser/Nodes.cpp:
- (JSC::FunctionBodyNode::createNativeThunk):
- (JSC::FunctionBodyNode::isHostFunction):
- * parser/Nodes.h:
- * runtime/JSFunction.cpp:
- (JSC::JSFunction::JSFunction):
- (JSC::JSFunction::~JSFunction):
- (JSC::JSFunction::mark):
- * runtime/JSGlobalData.cpp:
- (JSC::JSGlobalData::~JSGlobalData):
- * runtime/JSGlobalData.h:
-
-2009-06-18 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by NOBODY (Windows build fix).
-
- * wtf/DateMath.cpp:
- (WTF::calculateUTCOffset):
-
-2009-06-18 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Geoff Garen.
-
- Timezone calculation incorrect in Venezuela.
-
- https://bugs.webkit.org/show_bug.cgi?id=26531
- <rdar://problem/6646169> Time is incorrectly reported to JavaScript in both Safari 3 and Firefox 3
-
- The problem is that we're calculating the timezone relative to 01/01/2000,
- but the VET timezone changed from -4 hours to -4:30 hours on 12/09/2007.
- According to the spec, section 15.9.1.9 states "the time since the beginning
- of the year", presumably meaning the *current* year. Change the calculation
- to be based on whatever the current year is, rather than a canned date.
-
- No performance impact.
-
- * wtf/DateMath.cpp:
- (WTF::calculateUTCOffset):
-
-2009-06-18 Gavin Barraclough <barraclough@apple.com>
-
- Rubber Stamped by Mark Rowe (originally reviewed by Sam Weinig).
-
- (Reintroducing patch added in r44492, and reverted in r44796.)
-
- Change the implementation of op_throw so the stub function always modifies its
- return address - if it doesn't find a 'catch' it will switch to a trampoline
- to force a return from JIT execution. This saves memory, by avoiding the need
- for a unique return for every op_throw.
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_throw):
- JITStubs::cti_op_throw now always changes its return address,
- remove return code generated after the stub call (this is now
- handled by ctiOpThrowNotCaught).
+ (JSC::JIT::privateCompileCTINativeCall):
+ (JSC::JIT::emit_op_get_callee):
+ (JSC::JIT::emit_op_create_this):
* jit/JITStubs.cpp:
- (JSC::):
- Add ctiOpThrowNotCaught definitions.
- (JSC::JITStubs::DEFINE_STUB_FUNCTION):
- Change cti_op_throw to always change its return address.
+ (JSC::DEFINE_STUB_FUNCTION):
+ (JSC::JITThunks::hostFunctionStub):
* jit/JITStubs.h:
- Add ctiOpThrowNotCaught declaration.
-
-2009-06-18 Kevin McCullough <kmccullough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- <rdar://problem/6940880> REGRESSION: Breakpoints don't break in 64-bit
-
- - Exposed functions now needed by WebCore.
-
- * JavaScriptCore.exp:
-
-2009-06-17 Darin Adler <darin@apple.com>
-
- Reviewed by Oliver Hunt.
-
- Bug 26429: Make JSON.stringify non-recursive so it can handle objects
- of arbitrary complexity
- https://bugs.webkit.org/show_bug.cgi?id=26429
-
- For marking I decided not to use gcProtect, because this is inside the engine
- so it's easy enough to just do marking. And that darned gcProtect does locking!
- Oliver tried to convince me to used MarkedArgumentBuffer, but the constructor
- for that class says "FIXME: Remove all clients of this API, then remove this API."
-
- * runtime/Collector.cpp:
- (JSC::Heap::collect): Add a call to JSONObject::markStringifiers.
-
- * runtime/CommonIdentifiers.cpp:
- (JSC::CommonIdentifiers::CommonIdentifiers): Added emptyIdentifier.
- * runtime/CommonIdentifiers.h: Ditto.
-
- * runtime/JSGlobalData.cpp:
- (JSC::JSGlobalData::JSGlobalData): Initialize firstStringifierToMark to 0.
- * runtime/JSGlobalData.h: Added firstStringifierToMark.
-
- * runtime/JSONObject.cpp: Cut down the includes to the needed ones only.
- (JSC::unwrapNumberOrString): Added. Helper for unwrapping number and string
- objects to get their number and string values.
- (JSC::ReplacerPropertyName::ReplacerPropertyName): Added. The class is used
- to wrap an identifier or integer so we don't have to do any work unless we
- actually call a replacer.
- (JSC::ReplacerPropertyName::value): Added.
- (JSC::gap): Added. Helper function for the Stringifier constructor.
- (JSC::PropertyNameForFunctionCall::PropertyNameForFunctionCall): Added.
- The class is used to wrap an identifier or integer so we don't have to
- allocate a number or string until we actually call toJSON or a replacer.
- (JSC::PropertyNameForFunctionCall::asJSValue): Added.
- (JSC::Stringifier::Stringifier): Updated and moved out of the class
- definition. Added code to hook this into a singly linked list for marking.
- (JSC::Stringifier::~Stringifier): Remove from the singly linked list.
- (JSC::Stringifier::mark): Mark all the objects in the holder stacks.
- (JSC::Stringifier::stringify): Updated.
- (JSC::Stringifier::appendQuotedString): Tweaked and streamlined a bit.
- (JSC::Stringifier::toJSON): Renamed from toJSONValue.
- (JSC::Stringifier::appendStringifiedValue): Renamed from stringify.
- Added code to use the m_holderStack to do non-recursive stringify of
- objects and arrays. This code also uses the timeout checker since in
- pathological cases it could be slow even without calling into the
- JavaScript virtual machine.
- (JSC::Stringifier::willIndent): Added.
- (JSC::Stringifier::indent): Added.
- (JSC::Stringifier::unindent): Added.
- (JSC::Stringifier::startNewLine): Added.
- (JSC::Stringifier::Holder::Holder): Added.
- (JSC::Stringifier::Holder::appendNextProperty): Added. This is the
- function that handles the format of arrays and objects.
- (JSC::JSONObject::getOwnPropertySlot): Moved this down to the bottom
- of the file so the JSONObject class is not interleaved with the
- Stringifier class.
- (JSC::JSONObject::markStringifiers): Added. Calls mark.
- (JSC::JSONProtoFuncStringify): Streamlined the code here. The code
- to compute the gap string is now a separate function.
-
- * runtime/JSONObject.h: Made everything private. Added markStringifiers.
-
-2009-06-17 Oliver Hunt <oliver@apple.com>
-
- Reviewed by Gavin Barraclough.
-
- <rdar://problem/6974140> REGRESSION(r43849): Crash in cti_op_call_NotJSFunction when getting directions on maps.google.com
-
- Roll out r43849 as it appears that we cannot rely on the address of
- an objects property storage being constant even if the structure is
- unchanged.
-
- * jit/JIT.h:
- * jit/JITPropertyAccess.cpp:
- (JSC::JIT::compileGetDirectOffset):
- (JSC::JIT::privateCompileGetByIdProto):
- (JSC::JIT::privateCompileGetByIdProtoList):
- (JSC::JIT::privateCompileGetByIdChainList):
- (JSC::JIT::privateCompileGetByIdChain):
-
-2009-06-17 Gavin Barraclough <barraclough@apple.com>
-
- Rubber Stamped by Mark Rowe.
-
- Fully revert r44492 & r44748 while we fix a bug they cause on internal builds <rdar://problem/6955963>.
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_throw):
- * jit/JITStubs.cpp:
+ (JSC::JITThunks::ctiNativeConstruct):
(JSC::):
- (JSC::JITStubs::DEFINE_STUB_FUNCTION):
- * jit/JITStubs.h:
-
-2009-06-17 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Mark Rowe.
-
- <rdar://problem/6947426> sunspider math-cordic.js exhibits different intermediate results running 32-bit vs. 64-bit
-
- On 64-bit, NaN-encoded values must be detagged before they can be used in rshift.
-
- No performance impact.
-
- * jit/JITArithmetic.cpp:
- (JSC::JIT::emit_op_rshift):
-
-2009-06-17 Adam Treat <adam.treat@torchmobile.com>
-
- Reviewed by George Staikos.
-
- https://bugs.webkit.org/show_bug.cgi?id=23155
- Move WIN_CE -> WINCE as previously discussed with Qt WINCE folks.
-
- * jsc.cpp:
- (main):
-
-2009-06-17 George Staikos <george.staikos@torchmobile.com>
-
- Reviewed by Adam Treat.
-
- https://bugs.webkit.org/show_bug.cgi?id=23155
- Move WIN_CE -> WINCE as previously discussed with Qt WINCE folks.
-
- * config.h:
- * jsc.cpp:
- * wtf/Assertions.cpp:
- * wtf/Assertions.h:
- * wtf/CurrentTime.cpp:
- (WTF::lowResUTCTime):
- * wtf/DateMath.cpp:
- (WTF::getLocalTime):
- * wtf/MathExtras.h:
+ * runtime/ExceptionHelpers.cpp:
+ (JSC::createNotAnObjectError):
+ * runtime/Executable.h:
+ (JSC::NativeExecutable::create):
+ (JSC::NativeExecutable::NativeExecutable):
+ * runtime/JSFunction.cpp:
+ (JSC::callHostFunctionAsConstructor):
+ * runtime/JSFunction.h:
* wtf/Platform.h:
- * wtf/StringExtras.h:
- * wtf/Threading.h:
- * wtf/win/MainThreadWin.cpp:
-
-2009-06-17 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver Hunt.
-
- <rdar://problem/6974175> ASSERT in JITStubs.cpp at appsaccess.apple.com
-
- Remove PropertySlot::putValue - PropertySlots should only be used for getting,
- not putting. Rename JSGlobalObject::getOwnPropertySlot to hasOwnPropertyForWrite,
- which is what it really was being used to ask, and remove some other getOwnPropertySlot
- & getOwnPropertySlotForWrite methods, which were unused and likely to lead to confusion.
-
- * runtime/JSGlobalObject.h:
- (JSC::JSGlobalObject::hasOwnPropertyForWrite):
- * runtime/JSObject.h:
- * runtime/JSStaticScopeObject.cpp:
- * runtime/JSStaticScopeObject.h:
- * runtime/PropertySlot.h:
-
-2009-06-16 Gavin Barraclough <barraclough@apple.com>
-
- Reviewed by Oliver hunt.
-
- Temporarily partially disable r44492, since this is causing some problems on internal builds.
-
- * jit/JITOpcodes.cpp:
- (JSC::JIT::emit_op_throw):
- * jit/JITStubs.cpp:
- (JSC::JITStubs::DEFINE_STUB_FUNCTION):
-
-2009-06-16 Sam Weinig <sam@webkit.org>
-
- Fix windows build.
-
- * jit/JIT.cpp:
- (JSC::JIT::JIT):
-
-2009-06-16 Sam Weinig <sam@webkit.org>
-
- Reviewed by Oliver Hunt.
-
- Initialize m_bytecodeIndex to -1 in JIT, and correctly initialize
- it for each type of stub using the return address to find the correct
- offset.
-
- * jit/JIT.cpp:
- (JSC::JIT::JIT):
- * jit/JIT.h:
- (JSC::JIT::compileGetByIdProto):
- (JSC::JIT::compileGetByIdSelfList):
- (JSC::JIT::compileGetByIdProtoList):
- (JSC::JIT::compileGetByIdChainList):
- (JSC::JIT::compileGetByIdChain):
- (JSC::JIT::compilePutByIdTransition):
- (JSC::JIT::compileCTIMachineTrampolines):
- (JSC::JIT::compilePatchGetArrayLength):
- * jit/JITStubCall.h:
- (JSC::JITStubCall::call):
-== Rolled over to ChangeLog-2009-06-16 ==
+== Rolled over to ChangeLog-2010-05-24 ==
diff --git a/JavaScriptCore/ChangeLog-2010-05-24 b/JavaScriptCore/ChangeLog-2010-05-24
new file mode 100644
index 0000000..e6ec0f1
--- /dev/null
+++ b/JavaScriptCore/ChangeLog-2010-05-24
@@ -0,0 +1,28211 @@
+2010-05-24 Gavin Barraclough <barraclough@apple.com>
+
+ Rubber Stamped by Sam Weinig.
+
+ Accidentally committed double write of codeblock in Interpreter.
+
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::privateExecute):
+
+2010-05-24 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ https://bugs.webkit.org/show_bug.cgi?id=39583
+ Move creation of 'this' object from caller to callee in construction.
+
+ Presently the caller of a constructor is responsible for providing a this
+ object. Instead, move the object creation into a new op_create_this opcode,
+ planted in the head of the contructor bytecode for a function. Since the
+ prototype for the object is provided by performing a get_by_id on the callee,
+ also add a new get_callee opcode (this is used to get the callee JSFunction
+ into a register so that a normal get_by_id can be used).
+
+ Currently the caller is also responsible for detecting when op_construct is
+ performed on a JSFunction representing a host function, in which case an
+ exception is thrown – and this check currently takes place when constructing
+ the this object. Instead, mirroring the recent changes for non-host functions,
+ add a parallel code-path for native constructors to follow, with a thunk for
+ invoking native constructors provided by JITStubs, and a constructor-specific
+ NativeFunction on NativeExecutable. Provide an implementation of a host
+ constructor which will throw an exception.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dump):
+ (JSC::CodeBlock::getByIdExceptionInfoForBytecodeOffset):
+ * bytecode/CodeBlock.h:
+ * bytecode/Opcode.h:
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::BytecodeGenerator):
+ (JSC::BytecodeGenerator::emitConstruct):
+ * bytecompiler/BytecodeGenerator.h:
+ (JSC::BytecodeGenerator::emitGetByIdExceptionInfo):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::privateExecute):
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileMainPass):
+ * jit/JIT.h:
+ * jit/JITCall.cpp:
+ (JSC::JIT::compileOpCall):
+ (JSC::JIT::compileOpCallSlowCase):
+ * jit/JITCall32_64.cpp:
+ (JSC::JIT::compileOpCall):
+ (JSC::JIT::compileOpCallSlowCase):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::privateCompileCTIMachineTrampolines):
+ (JSC::JIT::privateCompileCTINativeCall):
+ (JSC::JIT::emit_op_neq_null):
+ (JSC::JIT::emit_op_convert_this):
+ (JSC::JIT::emit_op_get_callee):
+ (JSC::JIT::emit_op_create_this):
+ * jit/JITOpcodes32_64.cpp:
+ (JSC::JIT::privateCompileCTIMachineTrampolines):
+ (JSC::JIT::privateCompileCTINativeCall):
+ (JSC::JIT::emit_op_get_callee):
+ (JSC::JIT::emit_op_create_this):
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ (JSC::JITThunks::hostFunctionStub):
+ * jit/JITStubs.h:
+ (JSC::JITThunks::ctiNativeConstruct):
+ (JSC::):
+ * runtime/ExceptionHelpers.cpp:
+ (JSC::createNotAnObjectError):
+ * runtime/Executable.h:
+ (JSC::NativeExecutable::create):
+ (JSC::NativeExecutable::NativeExecutable):
+ * runtime/JSFunction.cpp:
+ (JSC::callHostFunctionAsConstructor):
+ * runtime/JSFunction.h:
+
+2010-05-23 Sam Weinig <sam@webkit.org>
+
+ Fix windows build.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-05-23 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Oliver Hunt.
+
+ Fix for https://bugs.webkit.org/show_bug.cgi?id=39575
+ Make JS DOMObject inherit from JSObjectWithGlobalObject instead of JSObject
+
+ Expose the global object stored in JSObjectWithGlobalObject.
+
+ * JavaScriptCore.exp:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * runtime/JSObjectWithGlobalObject.cpp:
+ (JSC::JSObjectWithGlobalObject::JSObjectWithGlobalObject):
+ (JSC::JSObjectWithGlobalObject::globalObject):
+ * runtime/JSObjectWithGlobalObject.h:
+
+2010-05-21 Oliver Hunt <oliver@apple.com>
+
+ "asm volatile" isn't valid outside of functions.
+
+ Reviewed by Gavin Barraclough.
+
+ * jit/JITStubs.cpp:
+
+2010-05-21 Gavin Barraclough <barraclough@apple.com>
+
+ Unreviewed build fix.
+
+ Interpreter fix following r59974.
+
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::privateExecute):
+ * runtime/JSPropertyNameIterator.cpp:
+ (JSC::JSPropertyNameIterator::get):
+ * runtime/JSPropertyNameIterator.h:
+
+2010-05-21 Gavin Barraclough <barraclough@apple.com>
+
+ Rubber stamped by Oliver Hunt.
+
+ Interpreter fix following r59939.
+
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::privateExecute):
+
+2010-05-21 David Levin <levin@chromium.org>
+
+ Unreviewed build fix.
+
+ * wtf/SizeLimits.cpp: Removed a check while I figure out how to write it properly.
+
+2010-05-21 David Levin <levin@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ Enforce size constraints on various data structures in JavaScriptCore/wtf.
+ https://bugs.webkit.org/show_bug.cgi?id=39327
+
+ I only modified the default build for OSX and Chromium's build file to include WTFCompileAsserts.cpp
+ as those should be sufficient to catch regressions on the size of the data structures.
+
+ * JavaScriptCore.gypi: Added the WTFCompileAsserts.cpp file.
+ * JavaScriptCore.xcodeproj/project.pbxproj: Added the WTFCompileAsserts.cpp file.
+ * runtime/UString.cpp: Added a compile assert for UString size.
+ * wtf/SizeLimits.cpp: Added compile asserts for data structures that didn't have cpp files.
+ * wtf/text/StringImpl.cpp: Added a compile assert for StringImpl size.
+
+2010-05-21 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Bug 39509 - Exceptions raised when JSString::value() is called not always properly thrown.
+ Missing some CHECK_FOR_EXCEPTION()s, cleanup NativeError construction (adding a property
+ via the prototype was inefficient, and whilst trivially true that the property is is not
+ a rope - and thus couldn't except - it would be hard to prove this).
+
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::callEval):
+ (JSC::Interpreter::privateExecute):
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ * runtime/InternalFunction.cpp:
+ (JSC::InternalFunction::name):
+ (JSC::InternalFunction::displayName):
+ * runtime/JSFunction.cpp:
+ (JSC::JSFunction::name):
+ (JSC::JSFunction::displayName):
+ * runtime/JSGlobalObject.cpp:
+ (JSC::JSGlobalObject::reset):
+ * runtime/JSPropertyNameIterator.cpp:
+ * runtime/JSPropertyNameIterator.h:
+ * runtime/JSString.h:
+ (JSC::RopeBuilder::tryGetValue):
+ (JSC::JSString::getIndex):
+ * runtime/NativeErrorConstructor.cpp:
+ (JSC::NativeErrorConstructor::NativeErrorConstructor):
+ * runtime/NativeErrorConstructor.h:
+ * runtime/NativeErrorPrototype.cpp:
+ (JSC::NativeErrorPrototype::NativeErrorPrototype):
+ * runtime/NativeErrorPrototype.h:
+ * runtime/StringPrototype.cpp:
+ (JSC::stringProtoFuncReplace):
+
+2010-05-21 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (build fix).
+
+ Fix interpreter build.
+
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::privateExecute):
+
+2010-05-21 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Split out JITCall32_64.cpp, and tightened up some #ifdefs in the hopes
+ of improving compile times.
+ https://bugs.webkit.org/show_bug.cgi?id=39507
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * jit/JIT.cpp:
+ * jit/JITArithmetic.cpp:
+ * jit/JITArithmetic32_64.cpp:
+ * jit/JITCall.cpp:
+ * jit/JITCall32_64.cpp: Copied from jit/JITCall.cpp.
+ * jit/JITOpcodes.cpp:
+ * jit/JITOpcodes32_64.cpp:
+ * jit/JITPropertyAccess.cpp:
+ * jit/JITPropertyAccess32_64.cpp:
+ * jit/JITStubs.cpp:
+
+2010-05-21 Csaba Osztrogonác <ossy@webkit.org>
+
+ Unreviewed buildfix for Qt after r59941.
+
+ * JavaScriptCore.pro: missing runtime/JSObjectWithGlobalObject.cpp added to SOURCES.
+
+2010-05-21 Oliver Hunt <oliver@apple.com>
+
+ Windows build fix #3
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-05-21 Oliver Hunt <oliver@apple.com>
+
+ Windows build fix #2
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-05-21 Oliver Hunt <oliver@apple.com>
+
+ Windows build fix #1
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-05-21 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Geoffrey Garen.
+
+ All callable objects should have a global object reference
+ https://bugs.webkit.org/show_bug.cgi?id=39495
+
+ All objects that may ever return a value other CallTypeNone
+ or ConstructTypeNone now get a global object in their constructor
+ and store that in their first anonymous slot. We add a new type
+ JSObjectWithGlobalObject to allow us to share this logic as much
+ as possible, however some objects have specific inheritance
+ requirements so we can't just use it universally.
+
+ To enforce this requirement JSValue::getCallData and getConstructData
+ make use of a new "isValidCallee" function to assert that any object
+ that returns a value other than CallType/ConstructTypeNone has a
+ global object in anonymous slot 0.
+
+ In order to ensure that static function slots are converted into
+ function objects with the correct global object, all prototype objects
+ and other classes with static function slots also gain a global object
+ reference. Happily this fixes the long standing issue where host
+ function objects get a prototype from the lexical global object of the
+ first function that calls them, instead of the global object that they
+ are defined on.
+
+ * API/JSCallbackConstructor.cpp:
+ (JSC::JSCallbackConstructor::JSCallbackConstructor):
+ * API/JSCallbackConstructor.h:
+ * API/JSCallbackFunction.cpp:
+ (JSC::JSCallbackFunction::JSCallbackFunction):
+ * API/JSCallbackFunction.h:
+ * API/JSCallbackObject.cpp:
+ (JSC::):
+ * API/JSCallbackObject.h:
+ * API/JSCallbackObjectFunctions.h:
+ (JSC::::JSCallbackObject):
+ (JSC::::staticFunctionGetter):
+ * API/JSClassRef.cpp:
+ (OpaqueJSClass::prototype):
+ * API/JSContextRef.cpp:
+ * API/JSObjectRef.cpp:
+ (JSObjectMake):
+ (JSObjectMakeFunctionWithCallback):
+ (JSObjectMakeConstructor):
+ (JSObjectGetPrivate):
+ (JSObjectSetPrivate):
+ (JSObjectGetPrivateProperty):
+ (JSObjectSetPrivateProperty):
+ (JSObjectDeletePrivateProperty):
+ * API/JSValueRef.cpp:
+ (JSValueIsObjectOfClass):
+ * API/JSWeakObjectMapRefPrivate.cpp:
+ * CMakeLists.txt:
+ * GNUmakefile.am:
+ * JavaScriptCore.exp:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::privateExecute):
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ * jsc.cpp:
+ (GlobalObject::GlobalObject):
+ * runtime/ArrayConstructor.cpp:
+ (JSC::ArrayConstructor::ArrayConstructor):
+ * runtime/ArrayConstructor.h:
+ * runtime/ArrayPrototype.cpp:
+ (JSC::ArrayPrototype::ArrayPrototype):
+ * runtime/ArrayPrototype.h:
+ (JSC::ArrayPrototype::createStructure):
+ * runtime/BooleanConstructor.cpp:
+ (JSC::BooleanConstructor::BooleanConstructor):
+ * runtime/BooleanConstructor.h:
+ * runtime/BooleanPrototype.cpp:
+ (JSC::BooleanPrototype::BooleanPrototype):
+ * runtime/BooleanPrototype.h:
+ * runtime/DateConstructor.cpp:
+ (JSC::DateConstructor::DateConstructor):
+ * runtime/DateConstructor.h:
+ * runtime/DatePrototype.cpp:
+ (JSC::DatePrototype::DatePrototype):
+ * runtime/DatePrototype.h:
+ * runtime/ErrorConstructor.cpp:
+ (JSC::ErrorConstructor::ErrorConstructor):
+ * runtime/ErrorConstructor.h:
+ * runtime/ErrorPrototype.cpp:
+ (JSC::ErrorPrototype::ErrorPrototype):
+ * runtime/ErrorPrototype.h:
+ * runtime/FunctionConstructor.cpp:
+ (JSC::FunctionConstructor::FunctionConstructor):
+ * runtime/FunctionConstructor.h:
+ * runtime/FunctionPrototype.cpp:
+ (JSC::FunctionPrototype::FunctionPrototype):
+ (JSC::FunctionPrototype::addFunctionProperties):
+ * runtime/FunctionPrototype.h:
+ * runtime/GlobalEvalFunction.cpp:
+ (JSC::GlobalEvalFunction::GlobalEvalFunction):
+ * runtime/GlobalEvalFunction.h:
+ * runtime/InternalFunction.cpp:
+ (JSC::InternalFunction::InternalFunction):
+ * runtime/InternalFunction.h:
+ * runtime/JSCell.h:
+ (JSC::JSValue::getCallData):
+ (JSC::JSValue::getConstructData):
+ * runtime/JSFunction.cpp:
+ (JSC::JSFunction::JSFunction):
+ * runtime/JSFunction.h:
+ * runtime/JSGlobalObject.cpp:
+ (JSC::JSGlobalObject::reset):
+ * runtime/JSGlobalObject.h:
+ (JSC::JSGlobalObject::JSGlobalObject):
+ * runtime/JSONObject.cpp:
+ (JSC::JSONObject::JSONObject):
+ * runtime/JSONObject.h:
+ * runtime/JSObject.h:
+ * runtime/JSObjectWithGlobalObject.cpp: Added.
+ (JSC::JSObjectWithGlobalObject::JSObjectWithGlobalObject):
+ * runtime/JSObjectWithGlobalObject.h: Added.
+ (JSC::JSObjectWithGlobalObject::createStructure):
+ (JSC::JSObjectWithGlobalObject::JSObjectWithGlobalObject):
+ * runtime/JSValue.cpp:
+ (JSC::JSValue::isValidCallee):
+ * runtime/JSValue.h:
+ * runtime/Lookup.cpp:
+ (JSC::setUpStaticFunctionSlot):
+ * runtime/MathObject.cpp:
+ (JSC::MathObject::MathObject):
+ * runtime/MathObject.h:
+ * runtime/NativeErrorConstructor.cpp:
+ (JSC::NativeErrorConstructor::NativeErrorConstructor):
+ * runtime/NativeErrorConstructor.h:
+ * runtime/NativeErrorPrototype.cpp:
+ (JSC::NativeErrorPrototype::NativeErrorPrototype):
+ * runtime/NativeErrorPrototype.h:
+ * runtime/NumberConstructor.cpp:
+ (JSC::NumberConstructor::NumberConstructor):
+ * runtime/NumberConstructor.h:
+ * runtime/NumberPrototype.cpp:
+ (JSC::NumberPrototype::NumberPrototype):
+ * runtime/NumberPrototype.h:
+ * runtime/ObjectConstructor.cpp:
+ (JSC::ObjectConstructor::ObjectConstructor):
+ * runtime/ObjectConstructor.h:
+ * runtime/ObjectPrototype.cpp:
+ (JSC::ObjectPrototype::ObjectPrototype):
+ * runtime/ObjectPrototype.h:
+ * runtime/PrototypeFunction.cpp:
+ (JSC::PrototypeFunction::PrototypeFunction):
+ * runtime/PrototypeFunction.h:
+ * runtime/RegExpConstructor.cpp:
+ (JSC::RegExpConstructor::RegExpConstructor):
+ (JSC::constructRegExp):
+ * runtime/RegExpConstructor.h:
+ * runtime/RegExpObject.cpp:
+ (JSC::RegExpObject::RegExpObject):
+ * runtime/RegExpObject.h:
+ * runtime/RegExpPrototype.cpp:
+ (JSC::RegExpPrototype::RegExpPrototype):
+ * runtime/RegExpPrototype.h:
+ * runtime/StringConstructor.cpp:
+ (JSC::StringConstructor::StringConstructor):
+ * runtime/StringConstructor.h:
+ * runtime/StringPrototype.cpp:
+ (JSC::StringPrototype::StringPrototype):
+ * runtime/StringPrototype.h:
+
+2010-05-21 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Removed the unused entry in the CallFrame
+ https://bugs.webkit.org/show_bug.cgi?id=39470
+
+ Removed the unused entry in the CallFrame, and reordered CallFrame
+ writes on the hot path to be in forwards order.
+
+ SunSpider says 0.3% faster.
+
+ * interpreter/RegisterFile.h:
+ (JSC::RegisterFile::):
+ * jit/JITCall.cpp:
+ (JSC::JIT::compileOpCall):
+
+2010-05-21 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ Split the QScriptValue autotest into smaller chunks.
+
+ File tst_qscriptvalue_generated.cpp was huge and it was difficult to compile
+ it with MSVS2008, because of the code optimization.
+
+ Tests were splited into a few files for better use of distributed
+ compilation.
+ Repeated calls to insert() and operator<<() where replaced by loops,
+ that should reduce time of code optimizing.
+
+ New files were generated by the same application, test logic wasn't changed.
+
+ [Qt] The QScriptValue autotest should be refactored.
+ https://bugs.webkit.org/show_bug.cgi?id=38987
+
+ * qt/tests/qscriptvalue/qscriptvalue.pro:
+ * qt/tests/qscriptvalue/tst_qscriptvalue.h:
+ * qt/tests/qscriptvalue/tst_qscriptvalue_generated.cpp: Removed.
+ * qt/tests/qscriptvalue/tst_qscriptvalue_generated_init.cpp: Added.
+ (tst_QScriptValue::initScriptValues):
+ * qt/tests/qscriptvalue/tst_qscriptvalue_generated_istype.cpp: Added.
+ (tst_QScriptValue::isValid_initData):
+ (tst_QScriptValue::isValid_makeData):
+ (tst_QScriptValue::isValid_test):
+ (tst_QScriptValue::isBool_initData):
+ (tst_QScriptValue::isBool_makeData):
+ (tst_QScriptValue::isBool_test):
+ (tst_QScriptValue::isBoolean_initData):
+ (tst_QScriptValue::isBoolean_makeData):
+ (tst_QScriptValue::isBoolean_test):
+ (tst_QScriptValue::isNumber_initData):
+ (tst_QScriptValue::isNumber_makeData):
+ (tst_QScriptValue::isNumber_test):
+ (tst_QScriptValue::isFunction_initData):
+ (tst_QScriptValue::isFunction_makeData):
+ (tst_QScriptValue::isFunction_test):
+ (tst_QScriptValue::isNull_initData):
+ (tst_QScriptValue::isNull_makeData):
+ (tst_QScriptValue::isNull_test):
+ (tst_QScriptValue::isString_initData):
+ (tst_QScriptValue::isString_makeData):
+ (tst_QScriptValue::isString_test):
+ (tst_QScriptValue::isUndefined_initData):
+ (tst_QScriptValue::isUndefined_makeData):
+ (tst_QScriptValue::isUndefined_test):
+ (tst_QScriptValue::isObject_initData):
+ (tst_QScriptValue::isObject_makeData):
+ (tst_QScriptValue::isObject_test):
+ * qt/tests/qscriptvalue/tst_qscriptvalue_generated_totype.cpp: Added.
+ (tst_QScriptValue::toString_initData):
+ (tst_QScriptValue::toString_makeData):
+ (tst_QScriptValue::toString_test):
+ (tst_QScriptValue::toNumber_initData):
+ (tst_QScriptValue::toNumber_makeData):
+ (tst_QScriptValue::toNumber_test):
+ (tst_QScriptValue::toBool_initData):
+ (tst_QScriptValue::toBool_makeData):
+ (tst_QScriptValue::toBool_test):
+ (tst_QScriptValue::toBoolean_initData):
+ (tst_QScriptValue::toBoolean_makeData):
+ (tst_QScriptValue::toBoolean_test):
+ (tst_QScriptValue::toInteger_initData):
+ (tst_QScriptValue::toInteger_makeData):
+ (tst_QScriptValue::toInteger_test):
+ (tst_QScriptValue::toInt32_initData):
+ (tst_QScriptValue::toInt32_makeData):
+ (tst_QScriptValue::toInt32_test):
+ (tst_QScriptValue::toUInt32_initData):
+ (tst_QScriptValue::toUInt32_makeData):
+ (tst_QScriptValue::toUInt32_test):
+ (tst_QScriptValue::toUInt16_initData):
+ (tst_QScriptValue::toUInt16_makeData):
+ (tst_QScriptValue::toUInt16_test):
+
+2010-05-21 Kwang Yul Seo <skyul@company100.net>
+
+ Reviewed by Eric Seidel.
+
+ Add COMPILER(MSVC) guard for strnstr
+ https://bugs.webkit.org/show_bug.cgi?id=39397
+
+ BREWMP uses MSVC for simulator build, but it is not OS(WINDOWS).
+ Add COMPILER(MSVC) guard for strnstr.
+
+ * wtf/StringExtras.h:
+
+2010-05-21 Kwang Yul Seo <skyul@company100.net>
+
+ Reviewed by Eric Seidel.
+
+ [BREWMP] Add !PLATFORM(BREWMP) guard for isMainThread
+ https://bugs.webkit.org/show_bug.cgi?id=39396
+
+ BREWMP sets ENABLE(SINGLE_THREADED), so it uses isMainThread from ThreadingNone.cpp.
+ Exclude isMainThread in MainThread.cpp.
+
+ * wtf/MainThread.cpp:
+
+2010-05-20 Kwang Yul Seo <skyul@company100.net>
+
+ Reviewed by Eric Seidel.
+
+ [BREWMP] Use skia as BREW MP's graphics backend.
+ https://bugs.webkit.org/show_bug.cgi?id=39407
+
+ Define WTF_PLATFORM_SKIA=1 for BREW MP.
+
+ * wtf/Platform.h:
+
+2010-05-20 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Beth Dakin.
+
+ Fixed naming mixup: it's op_call_put_result, not ret_result.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dump):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::privateExecute):
+
+2010-05-20 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Whittling away at CodeBlock use: Removed a little wonkiness in closure lookup
+ https://bugs.webkit.org/show_bug.cgi?id=39444
+
+ Calculate all lookup depths at compile time. I'm not sure why we couldn't
+ do this before, but whatever the reason, it seems to be gone now.
+
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::findScopedProperty):
+ * bytecompiler/BytecodeGenerator.h:
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::resolveSkip):
+ (JSC::Interpreter::resolveGlobalDynamic):
+ (JSC::Interpreter::privateExecute):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_get_scoped_var):
+ (JSC::JIT::emit_op_put_scoped_var):
+ (JSC::JIT::emit_op_resolve_skip):
+ (JSC::JIT::emit_op_resolve_global_dynamic):
+ (JSC::JIT::emitSlow_op_resolve_global_dynamic):
+ * jit/JITOpcodes32_64.cpp:
+ (JSC::JIT::emit_op_get_scoped_var):
+ (JSC::JIT::emit_op_put_scoped_var):
+ (JSC::JIT::emit_op_resolve_skip):
+
+2010-05-20 Darin Adler <darin@apple.com>
+
+ Reviewed by Eric Seidel.
+
+ Fix warnings seen on the buildbots today
+ https://bugs.webkit.org/show_bug.cgi?id=39368
+
+ * profiler/ProfileNode.cpp:
+ (JSC::getCount): Removed unneeded initialization of global variable.
+ These are all initialized to zero anyway, so no need to try to initialize
+ it and get a warning.
+
+ * wtf/CurrentTime.cpp:
+ (WTF::currentTime): Removed unused global variable.
+
+2010-05-20 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Removed some reliance on callFame[CodeBlock] by storing CodeBlock in a
+ local variable in the Interpreter.
+ https://bugs.webkit.org/show_bug.cgi?id=39447
+
+ Small speedup on SunSpider in Interpreter mode.
+
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::privateExecute):
+ * jsc.cpp:
+ * wtf/Platform.h:
+
+2010-05-19 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Bug 39408 - Unify JIT/interpreter return behaviour.
+
+ Presently the JIT and the interpreter have differing implementations in how
+ they handle storing the result of a function call back to the register file.
+ In both cases the op_call ( / _eval / _varargs / op_construct) opcode has an
+ operand indicating the VM register in which the result should be stored.
+ The JIT plants code after the call to store the result, so the value will be
+ stored as soon as the callee has returned. In the interpreter the call
+ passes the return value register id into the callee via the callee callframe,
+ and the callee is responsible for writing the result back into its callers
+ register file after it has restored the parents callframe pointer, but before
+ returning.
+
+ Instead, move the task of writing the call result to the register file into a
+ new opcode (op_call_put_result), and after returning the callee should leave
+ the return value in a canonical location. In the case of the interpreter,
+ this canonical location is a local variable in privateExecute
+ (functionReturnValue), in the case of the JIT this is the normal return value
+ registers (regT0, or regT1:regT0 in JSVALUE32_64). op_call_put_result stores
+ the result from the canonical location to the registerfile.
+
+ In addition to unifying JIT & interpreter behaviour this change allows us to
+ remove a slot from the callframe, omit the write of the result where the
+ return value from the call is not used, and provides a 2% speedup on sunspider
+ in the interpreter.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dump):
+ * bytecode/Opcode.h:
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::emitCall):
+ (JSC::BytecodeGenerator::emitCallVarargs):
+ (JSC::BytecodeGenerator::emitConstruct):
+ * bytecompiler/BytecodeGenerator.h:
+ (JSC::BytecodeGenerator::finalDestinationOrIgnored):
+ * bytecompiler/NodesCodegen.cpp:
+ (JSC::NewExprNode::emitBytecode):
+ (JSC::FunctionCallValueNode::emitBytecode):
+ (JSC::FunctionCallResolveNode::emitBytecode):
+ (JSC::FunctionCallBracketNode::emitBytecode):
+ (JSC::FunctionCallDotNode::emitBytecode):
+ (JSC::CallFunctionCallDotNode::emitBytecode):
+ (JSC::ApplyFunctionCallDotNode::emitBytecode):
+ * interpreter/CallFrame.h:
+ (JSC::ExecState::init):
+ (JSC::ExecState::noCaller):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::dumpRegisters):
+ (JSC::Interpreter::throwException):
+ (JSC::Interpreter::privateExecute):
+ * interpreter/RegisterFile.h:
+ (JSC::RegisterFile::):
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileMainPass):
+ * jit/JIT.h:
+ * jit/JITCall.cpp:
+ (JSC::JIT::compileOpCallSetupArgs):
+ (JSC::JIT::compileOpConstructSetupArgs):
+ (JSC::JIT::emit_op_call_put_result):
+ (JSC::JIT::compileOpCallVarargs):
+ (JSC::JIT::compileOpCallVarargsSlowCase):
+ (JSC::JIT::compileOpCall):
+ (JSC::JIT::compileOpCallSlowCase):
+ (JSC::JIT::compileOpCallVarargsSetupArgs):
+
+2010-05-20 Steve Block <steveblock@google.com>
+
+ Reviewed by Jeremy Orlow.
+
+ Provide bindings for DeviceOrientation
+ https://bugs.webkit.org/show_bug.cgi?id=39210
+
+ Adds ENABLE_DEVICE_ORIENTATION to XCode project file, always disabled.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2010-05-19 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Errk! rename op_constructor_ret as requested in review of Bug 39399.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dump):
+ * bytecode/Opcode.h:
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::emitReturn):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::privateExecute):
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileMainPass):
+ * jit/JIT.h:
+ * jit/JITCall.cpp:
+ (JSC::JIT::emit_op_ret_object_or_this):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_ret_object_or_this):
+
+2010-05-19 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Bug 39399 - Move responsibility for verifying constructors return objects from the caller to the callee.
+
+ This is a necessary step to move object creation from caller to callee.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dump):
+ * bytecode/Opcode.h:
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::BytecodeGenerator):
+ (JSC::BytecodeGenerator::emitReturn):
+ (JSC::BytecodeGenerator::emitConstruct):
+ * bytecompiler/BytecodeGenerator.h:
+ (JSC::BytecodeGenerator::isConstructor):
+ * bytecompiler/NodesCodegen.cpp:
+ (JSC::FunctionBodyNode::emitBytecode):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::privateExecute):
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileMainPass):
+ (JSC::JIT::privateCompileSlowCases):
+ * jit/JIT.h:
+ * jit/JITCall.cpp:
+ (JSC::JIT::emit_op_constructor_ret):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_constructor_ret):
+
+2010-05-19 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (build fix).
+
+ Fix windows build II.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-05-19 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (build fix).
+
+ Fix windows build.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-05-19 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Bug 39393 - JSFunction need not be a subclass of InternalFunction.
+
+ re-landing r59800.
+
+ * JavaScriptCore.exp:
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::retrieveCaller):
+ (JSC::Interpreter::findFunctionCallFrame):
+ * interpreter/Interpreter.h:
+ * profiler/Profiler.cpp:
+ (JSC::Profiler::createCallIdentifier):
+ * runtime/FunctionPrototype.cpp:
+ (JSC::functionProtoFuncToString):
+ * runtime/JSFunction.cpp:
+ (JSC::):
+ (JSC::JSFunction::JSFunction):
+ (JSC::JSFunction::name):
+ (JSC::JSFunction::displayName):
+ (JSC::JSFunction::calculatedDisplayName):
+ * runtime/JSFunction.h:
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::putDirectFunction):
+ (JSC::JSObject::putDirectFunctionWithoutTransition):
+ * runtime/JSObject.h:
+ * runtime/Lookup.cpp:
+ (JSC::setUpStaticFunctionSlot):
+
+2010-05-19 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (build fix).
+
+ Reverting r59800, this b0rked stuff.
+
+ * JavaScriptCore.exp:
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::retrieveCaller):
+ (JSC::Interpreter::findFunctionCallFrame):
+ * interpreter/Interpreter.h:
+ * profiler/Profiler.cpp:
+ (JSC::Profiler::createCallIdentifier):
+ * runtime/FunctionPrototype.cpp:
+ (JSC::functionProtoFuncToString):
+ * runtime/JSFunction.cpp:
+ (JSC::):
+ (JSC::JSFunction::JSFunction):
+ * runtime/JSFunction.h:
+ * runtime/JSObject.cpp:
+ * runtime/JSObject.h:
+ * runtime/Lookup.cpp:
+ (JSC::setUpStaticFunctionSlot):
+
+2010-05-19 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Bug 39393 - JSFunction need not be a subclass of InternalFunction.
+
+ This may prevent us from introducing a more useful parent class to
+ JSFunction, e.g. a JSObject that holds an executable, which could
+ also reference an eval or program executable.
+
+ * JavaScriptCore.exp:
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::retrieveCaller):
+ (JSC::Interpreter::findFunctionCallFrame):
+ * interpreter/Interpreter.h:
+ * profiler/Profiler.cpp:
+ (JSC::Profiler::createCallIdentifier):
+ * runtime/FunctionPrototype.cpp:
+ (JSC::functionProtoFuncToString):
+ * runtime/JSFunction.cpp:
+ (JSC::):
+ (JSC::JSFunction::JSFunction):
+ (JSC::JSFunction::name):
+ (JSC::JSFunction::displayName):
+ (JSC::JSFunction::calculatedDisplayName):
+ * runtime/JSFunction.h:
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::putDirectFunction):
+ (JSC::JSObject::putDirectFunctionWithoutTransition):
+ * runtime/JSObject.h:
+ * runtime/Lookup.cpp:
+ (JSC::setUpStaticFunctionSlot):
+
+2010-05-19 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Geoffrey Garen.
+
+ emitJumpIfNotJSCell should special case constant immediate values
+ https://bugs.webkit.org/show_bug.cgi?id=39392
+ <rdar://problem/8001324>
+
+ Make emitJumpSlowCaseIfNotJSCell special case constant immediate
+ values, in addition to the immediate JSCell optimisation.
+
+ Also add assertions to make sure no one else produces code that
+ attempts to load constants from the register file.
+
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::emitJumpSlowCaseIfNotJSCell):
+ * jit/JSInterfaceJIT.h:
+ (JSC::JSInterfaceJIT::emitJumpIfNotJSCell):
+ (JSC::JSInterfaceJIT::emitLoadInt32):
+ (JSC::JSInterfaceJIT::tagFor):
+ (JSC::JSInterfaceJIT::payloadFor):
+ (JSC::JSInterfaceJIT::emitLoadDouble):
+ (JSC::JSInterfaceJIT::addressFor):
+ * jit/ThunkGenerators.cpp:
+
+2010-05-19 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Slight refactoring to CodeBlock bytecode access
+ https://bugs.webkit.org/show_bug.cgi?id=39384
+
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::bytecodeOffset):
+ * interpreter/CallFrame.h:
+ (JSC::ExecState::returnPC):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::unwindCallFrame):
+ (JSC::Interpreter::retrieveLastCaller): Moved bytecode access into a
+ CodeBlock helper function. Changed CallFrame to accurately represent
+ how the returnPC is stored in JIT vs Interpreter.
+
+2010-05-19 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Don't build the Interpreter into JIT builds.
+ https://bugs.webkit.org/show_bug.cgi?id=39373
+
+ SunSpider says no change.
+
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::privateExecute):
+ * interpreter/Interpreter.h:
+ * wtf/Platform.h:
+
+2010-05-19 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Standardized naming: "bytecode offset" wins; "bytecode index" loses.
+
+ Also renamed getBytecodeOffset to bytecodeOffset, to match the WebKit
+ naming style.
+
+ * bytecode/CodeBlock.h:
+ (JSC::CallReturnOffsetToBytecodeOffset::CallReturnOffsetToBytecodeOffset):
+ (JSC::getCallReturnOffset):
+ (JSC::CodeBlock::bytecodeOffset):
+ (JSC::CodeBlock::callReturnIndexVector):
+ * interpreter/Interpreter.cpp:
+ (JSC::bytecodeOffsetForPC):
+ * jit/JIT.cpp:
+ (JSC::JIT::JIT):
+ (JSC::JIT::privateCompileMainPass):
+ (JSC::JIT::privateCompileLinkPass):
+ (JSC::JIT::privateCompileSlowCases):
+ (JSC::JIT::privateCompile):
+ * jit/JIT.h:
+ (JSC::CallRecord::CallRecord):
+ (JSC::JumpTable::JumpTable):
+ (JSC::SwitchRecord::SwitchRecord):
+ * jit/JITCall.cpp:
+ (JSC::JIT::compileOpCallVarargsSlowCase):
+ (JSC::JIT::compileOpCall):
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::emitNakedCall):
+ (JSC::JIT::addSlowCase):
+ (JSC::JIT::addJump):
+ (JSC::JIT::emitJumpSlowToHot):
+ (JSC::JIT::isLabeled):
+ (JSC::JIT::map):
+ (JSC::JIT::unmap):
+ (JSC::JIT::isMapped):
+ (JSC::JIT::getMappedPayload):
+ (JSC::JIT::getMappedTag):
+ (JSC::JIT::emitGetVirtualRegister):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_switch_imm):
+ (JSC::JIT::emit_op_switch_char):
+ (JSC::JIT::emit_op_switch_string):
+ (JSC::JIT::emit_op_new_error):
+ * jit/JITOpcodes32_64.cpp:
+ (JSC::JIT::emit_op_mov):
+ (JSC::JIT::emit_op_get_global_var):
+ (JSC::JIT::emit_op_put_global_var):
+ (JSC::JIT::emit_op_get_scoped_var):
+ (JSC::JIT::emit_op_put_scoped_var):
+ (JSC::JIT::emit_op_to_primitive):
+ (JSC::JIT::emit_op_resolve_global):
+ (JSC::JIT::emit_op_to_jsnumber):
+ (JSC::JIT::emit_op_catch):
+ (JSC::JIT::emit_op_switch_imm):
+ (JSC::JIT::emit_op_switch_char):
+ (JSC::JIT::emit_op_switch_string):
+ (JSC::JIT::emit_op_new_error):
+ (JSC::JIT::emit_op_convert_this):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emit_op_method_check):
+ (JSC::JIT::emitSlow_op_method_check):
+ * jit/JITPropertyAccess32_64.cpp:
+ (JSC::JIT::emit_op_method_check):
+ (JSC::JIT::emitSlow_op_method_check):
+ (JSC::JIT::emit_op_get_by_val):
+ (JSC::JIT::emit_op_get_by_id):
+ (JSC::JIT::emit_op_get_by_pname):
+ * jit/JITStubCall.h:
+ (JSC::JITStubCall::call):
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+
+2010-05-19 Peter Varga <pvarga@inf.u-szeged.hu>
+
+ Reviewed by Darin Adler.
+
+ The backtrackParenthesesOnceEnd function should store the start position
+ of the subpattern's non-greedy match at the place of the subpattern's
+ start index in the output array instead of the place of the
+ subpattern's end index.
+ Add layout test for checking of non-greedy matching of subpattern in
+ regular expressions.
+ https://bugs.webkit.org/show_bug.cgi?id=39289
+
+ * yarr/RegexInterpreter.cpp:
+ (JSC::Yarr::Interpreter::backtrackParenthesesOnceEnd):
+
+2010-05-18 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Bug 39343 - Dynamically generate a native call thunk per NativeFunction
+
+ https://bugs.webkit.org/show_bug.cgi?id=39252 regressed performance on i386,
+ by adding an extra indirection to making a native call. By introducing per-
+ NativeFunction thunks we can hard code the function pointer into the thunk
+ so that it need not be loaded from the callee.
+
+ * jit/JIT.h:
+ (JSC::JIT::compileCTINativeCall):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::privateCompileCTINativeCall):
+ * jit/JITOpcodes32_64.cpp:
+ (JSC::JIT::privateCompileCTINativeCall):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emitSlow_op_get_by_val):
+ * jit/JITPropertyAccess32_64.cpp:
+ (JSC::JIT::emitSlow_op_get_by_val):
+ * jit/JITStubs.cpp:
+ (JSC::JITThunks::ctiStub):
+ (JSC::JITThunks::hostFunctionStub):
+ * jit/JITStubs.h:
+ * jit/SpecializedThunkJIT.h:
+ (JSC::SpecializedThunkJIT::finalize):
+ * jit/ThunkGenerators.cpp:
+ (JSC::charCodeAtThunkGenerator):
+ (JSC::charAtThunkGenerator):
+ (JSC::fromCharCodeThunkGenerator):
+ (JSC::sqrtThunkGenerator):
+ (JSC::powThunkGenerator):
+ * runtime/JSFunction.cpp:
+ (JSC::JSFunction::JSFunction):
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::getHostFunction):
+ * runtime/JSGlobalData.h:
+ (JSC::JSGlobalData::getCTIStub):
+ * runtime/Lookup.cpp:
+ (JSC::setUpStaticFunctionSlot):
+ * runtime/StringConstructor.cpp:
+ (JSC::StringConstructor::StringConstructor):
+ * wtf/Platform.h:
+
+2010-05-18 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Simplified handling of 'arguments' -- 1.2% SunSpider speedup
+ https://bugs.webkit.org/show_bug.cgi?id=39200
+
+ Removed the reserved OptionalCalleeArguments slot from the CallFrame.
+ Now, slots for 'arguments' are allocated and initialized only by
+ functions that might need them.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dump): Updated for new bytecode operands.
+
+ (JSC::CodeBlock::CodeBlock):
+ * bytecode/CodeBlock.h:
+ (JSC::unmodifiedArgumentsRegister): Added a helper function for mapping
+ from the arguments register to its unmodified counterpart.
+
+ (JSC::CodeBlock::setArgumentsRegister):
+ (JSC::CodeBlock::argumentsRegister):
+ (JSC::CodeBlock::usesArguments): Changed from a "usesArguments" bool to
+ an optional int index representing the arguments register.
+
+ * bytecode/Opcode.h: Updated for new bytecode operands.
+
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::addVar): Factored out a helper function for
+ allocating an anonymous var.
+
+ (JSC::BytecodeGenerator::BytecodeGenerator): Merged / simplified some
+ arguments vs activation logic, and added code to allocate the arguments
+ registers when needed.
+
+ (JSC::BytecodeGenerator::createArgumentsIfNecessary): Updated for new bytecode operands.
+
+ (JSC::BytecodeGenerator::emitCallEval): No need to create the arguments
+ object before calling eval; the activation object will lazily create the
+ arguments object if eval resolves it.
+
+ (JSC::BytecodeGenerator::emitReturn): Updated for new bytecode operands.
+
+ (JSC::BytecodeGenerator::emitPushScope):
+ (JSC::BytecodeGenerator::emitPushNewScope): Ditto emitCallEval.
+
+ * bytecompiler/BytecodeGenerator.h:
+ (JSC::BytecodeGenerator::addVar): Factored out a helper function for
+ allocating an anonymous var.
+
+ (JSC::BytecodeGenerator::registerFor): No more need for special handling
+ of the arguments registers; they're allocated just like normal registers
+ now.
+
+ * interpreter/CallFrame.h:
+ (JSC::ExecState::callerFrame):
+ (JSC::ExecState::init):
+ * interpreter/CallFrameClosure.h:
+ (JSC::CallFrameClosure::resetCallFrame): Nixed optionalCalleeArguments.
+
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::dumpRegisters):
+ (JSC::Interpreter::unwindCallFrame):
+ (JSC::Interpreter::privateExecute):
+ (JSC::Interpreter::retrieveArguments): Opcodes accessing 'arguments' now
+ take operands specifying registers, just like all other opcodes.
+ JSActivation::copyRegisters is no longer responsible for tearing off the
+ arguments object; instead, the VM is responsible for both.
+
+ Also, a behavior change: Each access to f.arguments creates a new object,
+ unless f itself uses 'arguments'. This matches Chrome, and is necessary
+ for the optimization. f.arguments is a nonstandard, deprecated feature,
+ so high fidelity to a given implementation is not necessarily a goal.
+ Also, as illustrated by the new test case, the identity of f.arguments
+ has been broken since 2008, except in the case where f itself accesses
+ f.arguments -- but nobody seemed to notice. So, hopefully this change won't
+ break the web.
+
+ * interpreter/Register.h: Nixed the special arguments accessor. It's no
+ longer needed.
+
+ * interpreter/RegisterFile.h:
+ (JSC::RegisterFile::):
+ * jit/JITCall.cpp:
+ (JSC::JIT::compileOpCallInitializeCallFrame):
+ (JSC::JIT::compileOpCall):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_tear_off_activation):
+ (JSC::JIT::emit_op_tear_off_arguments):
+ (JSC::JIT::emit_op_create_arguments):
+ (JSC::JIT::emit_op_init_arguments):
+ * jit/JITOpcodes32_64.cpp:
+ (JSC::JIT::emit_op_tear_off_activation):
+ (JSC::JIT::emit_op_tear_off_arguments):
+ (JSC::JIT::emit_op_create_arguments):
+ (JSC::JIT::emit_op_init_arguments): The actual optimization: Removed
+ OptionalCalleeArguments from the callframe slot. Now, it doesn't need
+ to be initialized for most calls.
+
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ * jit/JITStubs.h:
+ (JSC::): Updated stubs to support arbitrary 'arguments' registers,
+ instead of hard-coding something in the call frame.
+
+ * runtime/Arguments.h:
+ (JSC::JSActivation::copyRegisters): Removed some obfuscatory abstraction.
+
+ * runtime/Executable.h:
+ (JSC::FunctionExecutable::generatedByteCode): Added a helper for accessing
+ the 'arguments' register. In a future patch, that kind of data should
+ probably move out of CodeBlock and into Executable.
+
+ * runtime/JSActivation.cpp:
+ (JSC::JSActivation::getOwnPropertySlot):
+ (JSC::JSActivation::argumentsGetter):
+ * runtime/JSActivation.h: Simplified / fixed access to 'arguments' via
+ the activation object. It now implements the same behavior implemented
+ by optimized variable access in the VM. This simplifies some other
+ things, too -- like eval code generation.
+
+2010-05-18 Sam Weinig <sam@webkit.org>
+
+ Try to fix the windows build.
+
+ * API/JSStringRefBSTR.cpp:
+
+2010-05-18 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Add an inlineCapacity template parameter to ListHashSet and use it to shrink the positioned object list hash set.
+ https://bugs.webkit.org/show_bug.cgi?id=39304
+ <rdar://problem/7998366>
+
+ Add an inlineCapacity template parameter to ListHashSet.
+
+ * wtf/ListHashSet.h:
+ (WTF::::ListHashSet):
+ (WTF::::operator):
+ (WTF::::swap):
+ (WTF::::~ListHashSet):
+ (WTF::::size):
+ (WTF::::capacity):
+ (WTF::::isEmpty):
+ (WTF::::begin):
+ (WTF::::end):
+ (WTF::::find):
+ (WTF::::contains):
+ (WTF::::add):
+ (WTF::::insertBefore):
+ (WTF::::remove):
+ (WTF::::clear):
+ (WTF::::unlinkAndDelete):
+ (WTF::::appendNode):
+ (WTF::::insertNodeBefore):
+ (WTF::::deleteAllNodes):
+ (WTF::::makeIterator):
+ (WTF::::makeConstIterator):
+ (WTF::deleteAllValues):
+
+2010-05-18 Gabor Loki <loki@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ Fix the interpreter after r59637
+ https://bugs.webkit.org/show_bug.cgi?id=39287
+
+ * runtime/Executable.h:
+ * runtime/JSFunction.cpp:
+ (JSC::JSFunction::JSFunction):
+ (JSC::JSFunction::getCallData):
+ * runtime/JSGlobalData.cpp:
+ * runtime/JSGlobalData.h:
+
+2010-05-17 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Oops, meant ebx not eax there. Fix Qt (and probably Win too).
+
+ * jit/JITOpcodes32_64.cpp:
+
+2010-05-17 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Bug 39252 - Move host/native JSFunction's NativeFunction onto NativeExecutable.
+
+ Currently host functions reuse JSFunction's ScopeChain as storage for their
+ NativeFunction (the C function pointer to the host function implementation).
+ Instead, move this onto NativeExecutable. This will allow host functions to
+ have a scopechain (which will be implemented as a separate patch).
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * jit/JIT.h:
+ * jit/JITCall.cpp:
+ (JSC::JIT::compileOpCallInitializeCallFrame):
+ (JSC::JIT::compileOpCall):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::privateCompileCTIMachineTrampolines):
+ * jit/JITOpcodes32_64.cpp:
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::stringGetByValStubGenerator):
+ (JSC::JIT::emitSlow_op_get_by_val):
+ * jit/JITPropertyAccess32_64.cpp:
+ (JSC::JIT::stringGetByValStubGenerator):
+ (JSC::JIT::emitSlow_op_get_by_val):
+ * jit/JITStubs.cpp:
+ (JSC::JITThunks::specializedThunk):
+ * jit/JITStubs.h:
+ (JSC::JITThunks::ctiNativeCall):
+ * jit/SpecializedThunkJIT.h:
+ (JSC::SpecializedThunkJIT::finalize):
+ * jit/ThunkGenerators.cpp:
+ (JSC::charCodeAtThunkGenerator):
+ (JSC::charAtThunkGenerator):
+ (JSC::fromCharCodeThunkGenerator):
+ (JSC::sqrtThunkGenerator):
+ (JSC::powThunkGenerator):
+ * jit/ThunkGenerators.h:
+ * runtime/Executable.h:
+ (JSC::NativeExecutable::create):
+ (JSC::NativeExecutable::function):
+ (JSC::NativeExecutable::NativeExecutable):
+ (JSC::JSFunction::nativeFunction):
+ * runtime/JSFunction.cpp:
+ (JSC::JSFunction::JSFunction):
+ (JSC::JSFunction::~JSFunction):
+ (JSC::JSFunction::markChildren):
+ (JSC::JSFunction::getCallData):
+ (JSC::JSFunction::call):
+ (JSC::JSFunction::getOwnPropertySlot):
+ (JSC::JSFunction::getConstructData):
+ (JSC::JSFunction::construct):
+ * runtime/JSFunction.h:
+ (JSC::JSFunction::scope):
+ * runtime/JSGlobalData.h:
+ (JSC::JSGlobalData::getThunk):
+ * runtime/Lookup.cpp:
+ (JSC::setUpStaticFunctionSlot):
+ * runtime/StringConstructor.cpp:
+ (JSC::StringConstructor::StringConstructor):
+
+2010-05-17 Patrick Gansterer <paroga@paroga.com>
+
+ Reviewed by Laszlo Gombos.
+
+ [Qt] Remove WinCE endian dedection.
+ https://bugs.webkit.org/show_bug.cgi?id=38511
+
+ Windows CE supports little-endian format only.
+ Correct dedection was added in r57804.
+
+ * wtf/Platform.h:
+
+2010-05-16 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Reduce the size of FunctionExecutable
+ https://bugs.webkit.org/show_bug.cgi?id=39180
+
+ Change m_numVariables from a size_t to 31 bits in a bitfield,
+ packed with another bit for m_forceUsesArguments (which in turn
+ get packed with the base class).
+
+ Reduces the size of FunctionExecutable from 160 to 152 bytes.
+
+ * runtime/Executable.h:
+ (JSC::FunctionExecutable::variableCount):
+ (JSC::FunctionExecutable::FunctionExecutable):
+
+2010-05-15 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Incorrect codegen for slowcase of < in 64-bit
+ https://bugs.webkit.org/show_bug.cgi?id=39151
+
+ Call the correct stud for the slowcases of the < operator.
+
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emitSlow_op_jnless):
+ (JSC::JIT::emitSlow_op_jless):
+
+2010-05-15 Leo Yang <leo.yang@torchmobile.com.cn>
+
+ Reviewed by Darin Adler.
+
+ Fix bug https://bugs.webkit.org/show_bug.cgi?id=38890
+
+ * runtime/DatePrototype.cpp:
+ (JSC::formatLocaleDate):
+
+2010-05-15 Leandro Pereira <leandro@profusion.mobi>
+
+ Reviewed by Adam Treat.
+
+ [EFL] Add build system for the EFL port.
+ http://webkit.org/b/37945
+
+ * CMakeLists.txt: Added.
+ * CMakeListsEfl.txt: Added.
+ * config.h: Add conditional to look for cmakeconfig.h.
+ * jsc/CMakeLists.txt: Added.
+ * jsc/CMakeListsEfl.txt: Added.
+ * wtf/CMakeLists.txt: Added.
+ * wtf/CMakeListsEfl.txt: Added.
+
+2010-05-15 Chao-ying Fu <fu@mips.com>
+
+ Reviewed by Oliver Hunt.
+
+ Update MIPS JIT for unsigned right shift, Math.sqrt, load16
+ https://bugs.webkit.org/show_bug.cgi?id=38412
+
+ Fixed MIPS build failure.
+
+ * assembler/MIPSAssembler.h:
+ (JSC::MIPSAssembler::srl):
+ (JSC::MIPSAssembler::srlv):
+ (JSC::MIPSAssembler::sqrtd):
+ * assembler/MacroAssemblerMIPS.h:
+ (JSC::MacroAssemblerMIPS::urshift32):
+ (JSC::MacroAssemblerMIPS::sqrtDouble):
+ (JSC::MacroAssemblerMIPS::load16):
+ (JSC::MacroAssemblerMIPS::supportsFloatingPointSqrt):
+ * jit/JSInterfaceJIT.h:
+
+2010-05-15 Ilya Tikhonovsky <loislo@chromium.org>
+
+ Reviewed by Geoffrey Garen.
+
+ WebInspector: JSC Should provide heap size info for Timeline panel.
+ https://bugs.webkit.org/show_bug.cgi?id=38420
+
+ * JavaScriptCore.exp:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * runtime/Collector.cpp:
+ (JSC::Heap::size):
+ * runtime/Collector.h:
+
+2010-05-15 Dave Tapuska <dtapuska@rim.com>
+
+ Reviewed by Darin Adler.
+
+ Add a new define for we need strict arena alignment. ARMv5 with
+ double word instructions set this value.
+
+ * wtf/Platform.h:
+
+2010-05-14 Stephanie Lewis <slewis@apple.com>
+
+ Rubber-stamped by Mark Rowe.
+
+ Update order files.
+
+ * JavaScriptCore.order:
+
+2010-05-14 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ Implementation of QtScript API that provide method to convert a value to an object.
+
+ [Qt] QtScript is missing toObject API
+ https://bugs.webkit.org/show_bug.cgi?id=36594
+
+ * qt/api/qscriptengine.cpp:
+ (QScriptEngine::toObject):
+ * qt/api/qscriptengine.h:
+ * qt/api/qscriptvalue.cpp:
+ (QScriptValue::toObject):
+ * qt/api/qscriptvalue.h:
+ * qt/api/qscriptvalue_p.h:
+ (QScriptValuePrivate::toObject):
+ * qt/tests/qscriptengine/tst_qscriptengine.cpp:
+ (tst_QScriptEngine::toObject):
+ (tst_QScriptEngine::toObjectTwoEngines):
+ * qt/tests/qscriptvalue/tst_qscriptvalue.cpp:
+ (tst_QScriptValue::toObjectSimple):
+ * qt/tests/qscriptvalue/tst_qscriptvalue.h:
+
+2010-05-14 Chao-ying Fu <fu@mips.com>
+
+ Reviewed by Oliver Hunt.
+
+ String Indexing Failure on JSVALUE32 targets
+ https://bugs.webkit.org/show_bug.cgi?id=39034
+
+ Remove zero-extend/shift-right code on regT1, because we already have
+ it in emit_op_get_by_val().
+
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::stringGetByValStubGenerator):
+
+2010-05-10 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
+
+ Reviewed by Alexey Proskuryakov.
+
+ Fix a VS2010 assert in std::copy
+ https://bugs.webkit.org/show_bug.cgi?id=38630
+
+ The assert complains that the output iterator is null.
+
+ * wtf/Vector.h:
+ (WTF::::operator):
+
+2010-05-13 Maciej Stachowiak <mjs@apple.com>
+
+ No review, attempted build fix.
+
+ Try to fix Tiger build with some gratuitous initialization of
+ seemingly uninitialized variables.
+
+ * wtf/text/StringImpl.h:
+ (WebCore::StringImpl::tryCreateUninitialized):
+
+2010-05-13 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Mark Rowe.
+
+ Various JavaScript string optimizations
+ https://bugs.webkit.org/show_bug.cgi?id=39051
+
+ Approximately 1% SunSpider speedup.
+
+ * runtime/ArrayPrototype.cpp:
+ (JSC::arrayProtoFuncJoin): Remove branches from the hot code path
+ by moving the first pass outside the loop, and duplicating the hot loop
+ to extract the loop-invariant branch.
+ * runtime/RegExp.cpp:
+ (JSC::RegExp::match): resize ovector to 0 instead of clearing to avoid
+ thrash in case of large matches.
+ * runtime/RegExpConstructor.h:
+ (JSC::RegExpConstructor::performMatch): Mark ALWAYS_INLINE to make the
+ compiler respect our authority.
+ * runtime/StringPrototype.cpp:
+ (JSC::jsSpliceSubstringsWithSeparators): Inline.
+ (JSC::stringProtoFuncSubstring): Rewrite boundary condition checks to
+ reduce the number of floating point comparisons and branches.
+
+2010-05-12 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ https://bugs.webkit.org/show_bug.cgi?id=39039
+ Provide support for separate bytecode/JIT code translations for call/construct usage
+ This will allow us to produce code generated specifically for use as a constructor, not for general function use.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::CodeBlock):
+ (JSC::CodeBlock::unlinkCallers):
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::getBytecodeIndex):
+ (JSC::CodeBlock::getJITCode):
+ (JSC::CodeBlock::executablePool):
+ (JSC::GlobalCodeBlock::GlobalCodeBlock):
+ (JSC::FunctionCodeBlock::FunctionCodeBlock):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::executeCall):
+ (JSC::Interpreter::executeConstruct):
+ (JSC::Interpreter::prepareForRepeatCall):
+ (JSC::Interpreter::execute):
+ (JSC::Interpreter::privateExecute):
+ * interpreter/Interpreter.h:
+ * jit/JIT.cpp:
+ (JSC::JIT::unlinkCallOrConstruct):
+ (JSC::JIT::linkConstruct):
+ * jit/JIT.h:
+ * jit/JITCall.cpp:
+ (JSC::JIT::compileOpCall):
+ (JSC::JIT::compileOpCallSlowCase):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::privateCompileCTIMachineTrampolines):
+ * jit/JITOpcodes32_64.cpp:
+ (JSC::JIT::privateCompileCTIMachineTrampolines):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emitSlow_op_get_by_val):
+ * jit/JITPropertyAccess32_64.cpp:
+ (JSC::JIT::emitSlow_op_get_by_val):
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ * jit/JITStubs.h:
+ (JSC::JITThunks::ctiVirtualConstructLink):
+ (JSC::JITThunks::ctiVirtualConstruct):
+ (JSC::):
+ * jit/SpecializedThunkJIT.h:
+ (JSC::SpecializedThunkJIT::finalize):
+ * runtime/Arguments.h:
+ (JSC::JSActivation::copyRegisters):
+ * runtime/ArrayPrototype.cpp:
+ (JSC::isNumericCompareFunction):
+ * runtime/Executable.cpp:
+ (JSC::FunctionExecutable::~FunctionExecutable):
+ (JSC::FunctionExecutable::compileForCall):
+ (JSC::FunctionExecutable::compileForConstruct):
+ (JSC::EvalExecutable::generateJITCode):
+ (JSC::ProgramExecutable::generateJITCode):
+ (JSC::FunctionExecutable::generateJITCodeForCall):
+ (JSC::FunctionExecutable::generateJITCodeForConstruct):
+ (JSC::FunctionExecutable::markAggregate):
+ (JSC::FunctionExecutable::reparseExceptionInfo):
+ (JSC::EvalExecutable::reparseExceptionInfo):
+ (JSC::FunctionExecutable::recompile):
+ * runtime/Executable.h:
+ (JSC::ExecutableBase::ExecutableBase):
+ (JSC::ExecutableBase::isHostFunction):
+ (JSC::ExecutableBase::generatedJITCodeForCall):
+ (JSC::ExecutableBase::generatedJITCodeForConstruct):
+ (JSC::NativeExecutable::NativeExecutable):
+ (JSC::EvalExecutable::jitCode):
+ (JSC::ProgramExecutable::jitCode):
+ (JSC::FunctionExecutable::bytecodeForCall):
+ (JSC::FunctionExecutable::isGeneratedForCall):
+ (JSC::FunctionExecutable::generatedBytecodeForCall):
+ (JSC::FunctionExecutable::bytecodeForConstruct):
+ (JSC::FunctionExecutable::isGeneratedForConstruct):
+ (JSC::FunctionExecutable::generatedBytecodeForConstruct):
+ (JSC::FunctionExecutable::symbolTable):
+ (JSC::FunctionExecutable::FunctionExecutable):
+ (JSC::FunctionExecutable::jitCodeForCall):
+ (JSC::FunctionExecutable::jitCodeForConstruct):
+ * runtime/JSActivation.h:
+ (JSC::JSActivation::JSActivationData::JSActivationData):
+ * runtime/JSFunction.cpp:
+ (JSC::JSFunction::~JSFunction):
+ (JSC::JSFunction::call):
+ (JSC::JSFunction::construct):
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::numericCompareFunction):
+
+2010-05-12 Oliver Hunt <oliver@apple.com>
+
+ build fix
+
+ <rdar://problem/7977960> REGRESSION (r59282): Tiger PPC build broken
+
+ * runtime/UString.h:
+ (JSC::tryMakeString):
+
+2010-05-12 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ <rdar://7969718> Incorrect 32-bit codegen for op_jnlesseq
+ https://bugs.webkit.org/show_bug.cgi?id=39038
+
+ Correct the use of incorrect comparison operators.
+
+ * jit/JITArithmetic32_64.cpp:
+ (JSC::JIT::emit_op_jlesseq):
+ (JSC::JIT::emitBinaryDoubleOp):
+
+2010-05-12 Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>
+
+ Reviewed by Eric Seidel.
+
+ JavaScriptCore: fix build when some optimizations are disabled
+ https://bugs.webkit.org/show_bug.cgi?id=38800
+
+ Remove outdated UNUSED_PARAMs when using JIT but with
+ ENABLE_JIT_OPTIMIZE_CALL and ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS
+ disabled.
+
+ * jit/JITOpcodes.cpp:
+ * jit/JITOpcodes32_64.cpp:
+
+2010-05-12 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Work around GCC stupidity by either explicitly inlining or by
+ using ALWAYS_INLINE
+
+ * runtime/StringPrototype.cpp:
+ (JSC::stringProtoFuncReplace):
+ * runtime/UString.h:
+ (JSC::UString::~UString):
+ * wtf/RefPtr.h:
+ (WTF::RefPtr::RefPtr):
+ (WTF::RefPtr::~RefPtr):
+ * wtf/text/StringImpl.h:
+ (WebCore::StringImpl::create):
+ (WebCore::StringImpl::tryCreateUninitialized):
+
+2010-05-12 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] Detect debug mode consistently
+ https://bugs.webkit.org/show_bug.cgi?id=38863
+
+ * JavaScriptCore.pri:
+ * JavaScriptCore.pro:
+ * jsc.pro:
+ * qt/api/QtScript.pro:
+
+2010-05-12 Peter Varga <pvarga@inf.u-szeged.hu>
+
+ Reviewed by Gavin Barraclough.
+
+ Remove a direct jump in generatePatternCharacterGreedy() and
+ generatePatternCharacterClassGreedy() functions if quantityCount of the term
+ is unlimited.
+ https://bugs.webkit.org/show_bug.cgi?id=38898
+
+ * yarr/RegexJIT.cpp:
+ (JSC::Yarr::RegexGenerator::generatePatternCharacterGreedy):
+ (JSC::Yarr::RegexGenerator::generateCharacterClassGreedy):
+
+2010-05-11 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Slight simplification to the calling convention: read RegisterFile::end()
+ from an absolute address, instead of from a pointer to the RegisterFile
+ on the stack.
+
+ SunSpider reports no change.
+
+ This should free us to remove the RegisterFile argument from the stack.
+
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompile):
+
+2010-05-11 Brian Weinstein <bweinstein@apple.com>
+
+ Possible Gtk build fix - use ALWAYS_INLINE on functions that were inlined.
+
+ * wtf/text/AtomicString.h:
+ (WebCore::AtomicString::add): Use ALWAYS_INLINE.
+ * wtf/text/WTFString.h:
+ (WebCore::String::length): Ditto.
+ (WebCore::String::isEmpty): Ditto.
+
+2010-05-11 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Add a compile time assert that sizeof(String) == sizeof(AtomicString).
+
+ * wtf/text/AtomicString.cpp:
+
+2010-05-11 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Mark Rowe.
+
+ https://bugs.webkit.org/show_bug.cgi?id=38961
+ Move some member variables around to reduce class sizes.
+
+ Make AtomicString no longer inherit from FastAllocBase.
+
+ Since AtomicString's first (and only) member variable, a RefPtr, also inherits from FastAllocBase this
+ was causing the size of AtomicString to contain sizeof(void*) bytes of padding.
+
+ * wtf/text/AtomicString.h:
+
+2010-05-11 Brian Weinstein <bweinstein@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+ Patch by Gavin Barraclough.
+
+ Rest of REGRESSION (r57900-57919): 3% PLT Regression from moving strings into WTF.
+ https://bugs.webkit.org/show_bug.cgi?id=38930
+ <rdar://problem/7937188>
+
+ Inline string functions that are commonly used in WTFString, CString, and AtomicString.
+
+ * JavaScriptCore.exp: Remove exports of inline functions.
+ * wtf/text/AtomicString.cpp:
+ (WebCore::AtomicString::addSlowCase): Rename add to addSlowCase, and inline the fast path
+ of add.
+ * wtf/text/AtomicString.h:
+ (WebCore::AtomicString::add): Inline the fast path of add.
+ * wtf/text/CString.cpp: Inline implementation of data and length in the header.
+ * wtf/text/CString.h:
+ (WTF::CString::data): Inline implementation of data.
+ (WTF::CString::length): Inline implementation of length.
+ * wtf/text/WTFString.cpp: Remove implementations of functions to be inlined.
+ * wtf/text/WTFString.h:
+ (WebCore::String::String): Inline implementation.
+ (WebCore::String::length): Ditto.
+ (WebCore::String::characters): Ditto.
+ (WebCore::String::operator[]): Ditto.
+ (WebCore::String::isEmpty): Ditto.
+
+2010-05-11 Brian Weinstein <bweinstein@apple.com>
+
+ Reviewed by Steve Falkenburg and Jon Honeycutt.
+ Patch by Gavin Barraclough.
+
+ REGRESSION (r57900-57919): 3% PLT Regression from moving strings into WTF.
+ https://bugs.webkit.org/show_bug.cgi?id=38930
+ <rdar://problem/7937188>
+
+ When the String classes were moved from WebCore to WTF, it meant that on Windows, all operations
+ on Strings in WebCore had to cross a DLL boundary (from WebKit.dll to JavaScript.dll).
+
+ We fix this by refactoring some of the WTF string code, so the code in AtomicString, StringImpl, and
+ WTFString can be built by both WebCore and WTF, and we don't need to talk across a DLL to do operations
+ on Strings.
+
+ * GNUmakefile.am: Add new file to build system.
+ * JavaScriptCore.gypi: Ditto.
+ * JavaScriptCore.pro: Ditto.
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Remove string exports, because these are now
+ handled in WebCore.
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Remove the post-build step that was added
+ here (the post build step is in JavaScriptCoreCommon.vsprops).
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops: Copy the three cpp files that need to be compiled
+ by WebCore into the WebKitOutputDir directory.
+ * JavaScriptCore.vcproj/WTF/WTF.vcproj: Add the StringStatics file.
+ * JavaScriptCore.vcproj/jsc/jsc.vcproj: Add the three WTF string cpp files to this project.
+ * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: Remove the need to link against WTF.lib (since jsc links against JavaScriptCore).
+ * JavaScriptCore.xcodeproj/project.pbxproj: Add the StringStatics file.
+ * wtf/text/AtomicString.cpp: Moved code to StringStatics.
+ * wtf/text/StringImpl.cpp: Ditto.
+ * wtf/text/StringStatics.cpp: Added. Move functions in WTF Strings that define static variables to here, so
+ the rest of the files can be compiled in WebCore.
+ (WebCore::StringImpl::empty): Moved from StringImpl.cpp to here.
+ (WebCore::AtomicString::init): Moved from AtomicString.cpp to here.
+
+2010-05-11 Alice Liu <alice.liu@apple.com>
+
+ Rubber-stamped by Gavin Barraclough.
+
+ Fix build error when enabling debugging block in WebKit win painting code
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-05-11 Mark Rowe <mrowe@apple.com>
+
+ Fix the world.
+
+ In r59162 a change was made to WebCore's FeatureDefines.xcconfig that enabled FILE_READER and FILE_WRITER.
+ The author and reviewer of that patch ignored the carefully-worded warning at the top of that file asking
+ that changes to the file be kept in sync across JavaScriptCore, WebCore and WebKit, as well as being kept
+ in sync with build-webkit. This led to WebCore and WebKit having different views of Document's vtable
+ and results in crashes in Safari shortly after launch when virtual function calls resulted in the wrong
+ function in WebCore being called.
+
+ We fix this by bringing the FeatureDefines.xcconfig files in to sync. Based on the ChangeLog message and
+ other changes in r59162 it appears that enabling FILE_WRITER was unintentional so that particular change
+ has been reverted.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2010-05-11 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r59171.
+ http://trac.webkit.org/changeset/59171
+ https://bugs.webkit.org/show_bug.cgi?id=38933
+
+ "Broke the world" (Requested by bweinstein on #webkit).
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
+ * JavaScriptCore.vcproj/WTF/WTF.vcproj:
+ * JavaScriptCore.vcproj/jsc/jsc.vcproj:
+ * JavaScriptCore.vcproj/jsc/jscCommon.vsprops:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * wtf/text/AtomicString.cpp:
+ (WebCore::AtomicString::init):
+ * wtf/text/StringImpl.cpp:
+ (WebCore::StringImpl::empty):
+ * wtf/text/StringStatics.cpp: Removed.
+
+2010-05-11 Brian Weinstein <bweinstein@apple.com>
+
+ Reviewed by Steve Falkenburg.
+ Patch by Gavin Barraclough.
+
+ REGRESSION (r57900-57919): 3% PLT Regression from moving strings into WTF.
+ https://bugs.webkit.org/show_bug.cgi?id=38930
+ <rdar://problem/7937188>
+
+ When the String classes were moved from WebCore to WTF, it meant that on Windows, all operations
+ on Strings in WebCore had to cross a DLL boundary (from WebKit.dll to JavaScript.dll).
+
+ We fix this by refactoring some of the WTF string code, so the code in AtomicString, StringImpl, and
+ WTFString can be built by both WebCore and WTF, and we don't need to talk across a DLL to do operations
+ on Strings.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Remove string exports, because these are now
+ handled in WebCore.
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Remove the post-build step that was added
+ here (the post build step is in JavaScriptCoreCommon.vsprops).
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops: Copy the three cpp files that need to be compiled
+ by WebCore into the WebKitOutputDir directory.
+ * JavaScriptCore.vcproj/WTF/WTF.vcproj: Add the StringStatics file.
+ * JavaScriptCore.vcproj/jsc/jsc.vcproj: Add the three WTF string cpp files to this project.
+ * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: Remove the need to link against WTF.lib (since jsc links against JavaScriptCore).
+ * JavaScriptCore.xcodeproj/project.pbxproj: Add the StringStatics file.
+ * wtf/text/AtomicString.cpp: Moved code to StringStatics.
+ * wtf/text/StringImpl.cpp: Ditto.
+ * wtf/text/StringStatics.cpp: Added. Move functions in WTF Strings that define static variables to here, so
+ the rest of the files can be compiled in WebCore.
+ (WebCore::StringImpl::empty): Moved from StringImpl.cpp to here.
+ (WebCore::AtomicString::init): Moved from AtomicString.cpp to here.
+
+2010-05-11 Geoffrey Garen <ggaren@apple.com>
+
+ Fixed test failures seen on SnowLeopard buildbot.
+
+ * runtime/JSString.cpp:
+ (JSC::JSString::replaceCharacter): Don't use size_t and wtf::notFound.
+ Instead, use the individual types and notFound values of the string APIs
+ we're using, since they're not necessarily the same in 64bit.
+
+2010-05-11 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt and Darin Adler.
+
+ Start using ropes in String.prototype.replace.
+
+ 1%-1.5% speedup on SunSpider.
+
+ * runtime/JSString.cpp:
+ (JSC::JSString::resolveRope): Updated for RopeImpl refactoring.
+
+ (JSC::JSString::replaceCharacter): Added a replaceCharacter function, which creates
+ a rope for the resulting replacement.
+
+ * runtime/JSString.h: A few changes here:
+ (JSC::):
+ (JSC::RopeBuilder::RopeIterator::RopeIterator):
+ (JSC::RopeBuilder::RopeIterator::operator++):
+ (JSC::RopeBuilder::RopeIterator::operator*):
+ (JSC::RopeBuilder::RopeIterator::operator!=):
+ (JSC::RopeBuilder::RopeIterator::WorkItem::WorkItem):
+ (JSC::RopeBuilder::RopeIterator::WorkItem::operator!=):
+ (JSC::RopeBuilder::RopeIterator::skipRopes): Created a RopeIterator abstraction.
+ We use this to do a substring find without having to resolve the rope.
+ (We could use this iterator when resolving ropes, too, but resolving
+ ropes backwards is usually more efficient.)
+
+ (JSC::RopeBuilder::JSString): Added constructors for 2 & 3 UStrings.
+
+ (JSC::RopeBuilder::appendValueInConstructAndIncrementLength):
+ (JSC::RopeBuilder::size): Updated for RopeImpl refactoring.
+
+ * runtime/Operations.h: Updated for RopeImpl refactoring.
+ (JSC::jsString): Added jsString functions for 2 & 3 UStrings.
+
+ * runtime/RopeImpl.cpp:
+ (JSC::RopeImpl::derefFibersNonRecursive):
+ * runtime/RopeImpl.h:
+ (JSC::RopeImpl::initializeFiber):
+ (JSC::RopeImpl::size):
+ (JSC::RopeImpl::fibers):
+ (JSC::RopeImpl::deref):
+ (JSC::RopeImpl::RopeImpl): A little refactoring to make this patch easier:
+ Moved statics to the top of the class; put multi-statement functions on
+ multiple lines; renamed "fiberCount" to "size" to match other collections;
+ changed the "fibers" accessor to return the fibers buffer, instead of an
+ item in the buffer, to make iteration easier.
+
+ * runtime/StringPrototype.cpp:
+ (JSC::stringProtoFuncReplace): Don't resolve a rope unless we need to. Do
+ use our new replaceCharacter function if possible. Do use a rope to
+ represent splicing three strings together.
+
+2010-05-10 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Darin Adler.
+
+ [Qt] Disable JIT support for mingw-w64
+ https://bugs.webkit.org/show_bug.cgi?id=38747
+
+ Disale JIT for mingw-w64 as it is reportedly
+ unstable.
+
+ Thanks for Vanboxem Rruben for the investigation.
+
+ * wtf/Platform.h:
+
+2010-05-09 Fumitoshi Ukai <ukai@chromium.org>
+
+ Reviewed by Eric Seidel.
+
+ JavaScriptCore/wtf/MD5.h: checksum should take a reference to output.
+ https://bugs.webkit.org/show_bug.cgi?id=38723
+
+ * JavaScriptCore.exp:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * wtf/MD5.cpp:
+ (WTF::expectMD5):
+ Fix for checksum change.
+ (WTF::MD5::checksum):
+ Take a reference to output, instead of returning the result by value, to reduce coping for performance.
+ * wtf/MD5.h:
+
+2010-05-09 Oliver Hunt <oliver@apple.com>
+
+ Build fix.
+
+ Fix accidental repeat addition of emit_op_new_regexp
+
+ * jit/JITOpcodes.cpp:
+
+2010-05-09 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ REGRESSION(r57955): RegExp literals should not actually be cached, so r57955 should be rolled out.
+ https://bugs.webkit.org/show_bug.cgi?id=38828
+ <rdar://problem/7961634>
+
+ Rollout r57955
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::regexpToSourceString):
+ (JSC::regexpName):
+ (JSC::CodeBlock::dump):
+ (JSC::CodeBlock::shrinkToFit):
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::addRegExp):
+ (JSC::CodeBlock::regexp):
+ * bytecode/Opcode.h:
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::addRegExp):
+ (JSC::BytecodeGenerator::emitNewRegExp):
+ * bytecompiler/BytecodeGenerator.h:
+ * bytecompiler/NodesCodegen.cpp:
+ (JSC::RegExpNode::emitBytecode):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::privateExecute):
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileMainPass):
+ * jit/JIT.h:
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_new_regexp):
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ * jit/JITStubs.h:
+ (JSC::):
+
+2010-05-09 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Reserve a large-ish initial capacity for Lexer::m_buffer16.
+
+ SunSpider says 0.3% faster.
+
+ m_buffer16 is used when parsing complex strings -- for example, strings
+ with escape sequences in them. These kinds of strings can be really long,
+ and we want to avoid repeatedly copying as we grow m_buffer16.
+
+ The net memory cost is quite low, since it's proporitional to source
+ code we already have in memory, and we throw away m_buffer16 right when
+ we're done parsing.
+
+ * parser/Lexer.cpp:
+ (JSC::Lexer::Lexer): No need to reserve initial capacity in our constructor,
+ since setCode will be called before we're asked to lex anything.
+ (JSC::Lexer::setCode): Reserve enough space to lex half the source code
+ as a complex string without having to copy.
+ (JSC::Lexer::clear): No need to reserve initial capacity here either,
+ since setCode will be called before we're asked to lex anything.
+
+2010-05-09 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Eric Seidel.
+
+ [Qt] Remove YARR configuration rules from Qt make system
+ https://bugs.webkit.org/show_bug.cgi?id=38819
+
+ Setting YARR based on JIT seeting is now in Platform.h
+ for all ports. This patch essentially reverses r49238.
+
+ * JavaScriptCore.pri:
+
+2010-05-09 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Improve string indexing performance
+ https://bugs.webkit.org/show_bug.cgi?id=38814
+
+ Add an assembly stub to do indexed loads from strings much
+ more cheaply than the current stub dispatch logic. We can
+ do this because we are able to make guarantees about the
+ register contents when entering the stub so the call overhead
+ is negligible.
+
+ * jit/JIT.h:
+ * jit/JITInlineMethods.h:
+ * jit/JITOpcodes.cpp:
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::stringGetByValStubGenerator):
+ (JSC::JIT::emitSlow_op_get_by_val):
+ Moved from JITOpcodes.cpp to keep the slowcase next to
+ the normal case codegen as we do for everything else.
+ * jit/JITPropertyAccess32_64.cpp:
+ (JSC::JIT::stringGetByValStubGenerator):
+ (JSC::JIT::emitSlow_op_get_by_val):
+ * jit/JSInterfaceJIT.h:
+ (JSC::JSInterfaceJIT::emitFastArithImmToInt):
+
+2010-05-09 Maciej Stachowiak <mjs@apple.com>
+
+ Fixed version of: "Optimized o[s] where o is a cell and s is a string"
+ https://bugs.webkit.org/show_bug.cgi?id=38815
+
+ Fixed the previous patch for this from Geoff Garen.
+
+ The two problems were a missing exception check and a PropertySlot
+ initialized improperly, leading to crashes and failures in the case
+ of getters accessed with bracket syntax.
+
+ Previous patch:
+
+ Optimized o[s] where o is a cell and s is a string, removing some old
+ code that wasn't really tuned for the JIT.
+
+ SunSpider says 0.8% faster.
+
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ * runtime/JSCell.h:
+
+2010-05-08 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Unreviewed, build fix.
+
+ Fix missing terminating ' character warning
+
+ The warning has been only seen on the Gtk buildbots.
+
+ * wtf/Platform.h:
+
+2010-05-08 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Refactor YARR and YARR_JIT default rules in Platform.h
+ https://bugs.webkit.org/show_bug.cgi?id=38727
+
+ Turn on YARR and YARR JIT by default of JIT is enabled.
+ Ports can overrule this default decisions as they wish.
+
+ * wtf/Platform.h:
+
+2010-05-08 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Split JSVALUE32_64 code out of JITOpcodes.cpp and into JITOpcodes32_64.cpp
+ https://bugs.webkit.org/show_bug.cgi?id=38808
+
+ * GNUmakefile.am:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.pro:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * jit/JITOpcodes.cpp:
+ * jit/JITOpcodes32_64.cpp: Added.
+ (JSC::JIT::privateCompileCTIMachineTrampolines):
+ (JSC::JIT::emit_op_mov):
+ (JSC::JIT::emit_op_end):
+ (JSC::JIT::emit_op_jmp):
+ (JSC::JIT::emit_op_loop_if_lesseq):
+ (JSC::JIT::emitSlow_op_loop_if_lesseq):
+ (JSC::JIT::emit_op_new_object):
+ (JSC::JIT::emit_op_instanceof):
+ (JSC::JIT::emitSlow_op_instanceof):
+ (JSC::JIT::emit_op_new_func):
+ (JSC::JIT::emit_op_get_global_var):
+ (JSC::JIT::emit_op_put_global_var):
+ (JSC::JIT::emit_op_get_scoped_var):
+ (JSC::JIT::emit_op_put_scoped_var):
+ (JSC::JIT::emit_op_tear_off_activation):
+ (JSC::JIT::emit_op_tear_off_arguments):
+ (JSC::JIT::emit_op_new_array):
+ (JSC::JIT::emit_op_resolve):
+ (JSC::JIT::emit_op_to_primitive):
+ (JSC::JIT::emitSlow_op_to_primitive):
+ (JSC::JIT::emit_op_strcat):
+ (JSC::JIT::emit_op_resolve_base):
+ (JSC::JIT::emit_op_resolve_skip):
+ (JSC::JIT::emit_op_resolve_global):
+ (JSC::JIT::emitSlow_op_resolve_global):
+ (JSC::JIT::emit_op_not):
+ (JSC::JIT::emitSlow_op_not):
+ (JSC::JIT::emit_op_jfalse):
+ (JSC::JIT::emitSlow_op_jfalse):
+ (JSC::JIT::emit_op_jtrue):
+ (JSC::JIT::emitSlow_op_jtrue):
+ (JSC::JIT::emit_op_jeq_null):
+ (JSC::JIT::emit_op_jneq_null):
+ (JSC::JIT::emit_op_jneq_ptr):
+ (JSC::JIT::emit_op_jsr):
+ (JSC::JIT::emit_op_sret):
+ (JSC::JIT::emit_op_eq):
+ (JSC::JIT::emitSlow_op_eq):
+ (JSC::JIT::emit_op_neq):
+ (JSC::JIT::emitSlow_op_neq):
+ (JSC::JIT::compileOpStrictEq):
+ (JSC::JIT::emit_op_stricteq):
+ (JSC::JIT::emitSlow_op_stricteq):
+ (JSC::JIT::emit_op_nstricteq):
+ (JSC::JIT::emitSlow_op_nstricteq):
+ (JSC::JIT::emit_op_eq_null):
+ (JSC::JIT::emit_op_neq_null):
+ (JSC::JIT::emit_op_resolve_with_base):
+ (JSC::JIT::emit_op_new_func_exp):
+ (JSC::JIT::emit_op_throw):
+ (JSC::JIT::emit_op_get_pnames):
+ (JSC::JIT::emit_op_next_pname):
+ (JSC::JIT::emit_op_push_scope):
+ (JSC::JIT::emit_op_pop_scope):
+ (JSC::JIT::emit_op_to_jsnumber):
+ (JSC::JIT::emitSlow_op_to_jsnumber):
+ (JSC::JIT::emit_op_push_new_scope):
+ (JSC::JIT::emit_op_catch):
+ (JSC::JIT::emit_op_jmp_scopes):
+ (JSC::JIT::emit_op_switch_imm):
+ (JSC::JIT::emit_op_switch_char):
+ (JSC::JIT::emit_op_switch_string):
+ (JSC::JIT::emit_op_new_error):
+ (JSC::JIT::emit_op_debug):
+ (JSC::JIT::emit_op_enter):
+ (JSC::JIT::emit_op_enter_with_activation):
+ (JSC::JIT::emit_op_create_arguments):
+ (JSC::JIT::emit_op_init_arguments):
+ (JSC::JIT::emit_op_convert_this):
+ (JSC::JIT::emitSlow_op_convert_this):
+ (JSC::JIT::emit_op_profile_will_call):
+ (JSC::JIT::emit_op_profile_did_call):
+
+2010-05-08 Gabor Loki <loki@webkit.org>
+
+ Reviewed by Gavin Barraclough.
+
+ Fix halfword loads on ARM
+ https://bugs.webkit.org/show_bug.cgi?id=38741
+
+ The BaseIndex and ImplicitAddress are contain 32bit wide offset, but
+ the load16 functions were working with 8 bit data (encoded in the
+ instruction). If the offset cannot be encoded in an instruction, it
+ should be stored in a temporary register.
+
+ * assembler/ARMAssembler.h:
+ (JSC::ARMAssembler::getOffsetForHalfwordDataTransfer):
+ * assembler/MacroAssemblerARM.h:
+ (JSC::MacroAssemblerARM::load16):
+
+2010-05-08 Gabor Loki <loki@webkit.org>
+
+ Reviewed by Gavin Barraclough.
+
+ Fix spanning branch instruction on Cortex-A8 with Thumb-2 JIT
+ https://bugs.webkit.org/show_bug.cgi?id=38280
+
+ If the 32-bit Thumb-2 branch instruction spans two 4KiB regions and
+ the target of the branch falls within the first region it is
+ possible for the processor to incorrectly determine the branch
+ instruction, and it is also possible in some cases for the processor
+ to enter a deadlock state.
+
+ * assembler/ARMv7Assembler.h:
+ (JSC::ARMv7Assembler::linkJumpAbsolute):
+
+2010-05-08 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Darin Fisher.
+
+ [WTFURL] Add a buffer for managing the output of the canonicalizer
+ https://bugs.webkit.org/show_bug.cgi?id=38671
+
+ The canonicalizer produces a stream of canonicalized characters, which
+ we will store in a URLBuffer. URLBuffer is quite similar to Vector,
+ but serves as an abstraction to isolate us from the underlying
+ character storage. In the case of WebKit, we'll probably implement a
+ subclass of URLBuffer with Vector. In Chromium, the backing store is a
+ std::string, which avoids an unnecessary memcpy that would be caused by
+ using Vector instead.
+
+ * wtf/url/src/URLBuffer.h: Added.
+ (WTF::URLBuffer::URLBuffer):
+ (WTF::URLBuffer::~URLBuffer):
+ (WTF::URLBuffer::at):
+ (WTF::URLBuffer::set):
+ (WTF::URLBuffer::capacity):
+ (WTF::URLBuffer::length):
+ (WTF::URLBuffer::data):
+ (WTF::URLBuffer::setLength):
+ (WTF::URLBuffer::append):
+ (WTF::URLBuffer::grow):
+
+2010-05-08 Eric Seidel <eric@webkit.org>
+
+ Unreviewed, just reverting commit.
+
+ REGRESSION(59000): r59000 contained all sorts of changes it should not have, needs revert.
+ https://bugs.webkit.org/show_bug.cgi?id=38798
+
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::emitResolve):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_resolve_global):
+
+2010-05-04 Jer Noble <jer.noble@apple.com>
+
+ Reviewed by Maciej Stachowiak
+
+ Safari pegs CPU and drops tons of frames using HTML5 Vimeo player
+ <https://bugs.webkit.org/show_bug.cgi?id=34005>
+ <rdar://problem/7569713>
+
+ Added cancelCallOnMainThread. callOnMainThread should always now be paired
+ with cancelCallOnMainThread in situations where the refcon passed to callOnMainThread
+ may be dealloced before the main thread function can be dispatched.
+
+ * wtf/MainThread.cpp:
+ (WTF::FunctionWithContext::operator == ): Supports the FunctionWithContextFinder predicate functor.
+ (WTF::FunctionWithContextFinder::FunctionWithContextFinder): Predicate functor for use with Dequeue::findIf
+ (WTF::FunctionWithContextFinder::operator()):
+ (WTF::cancelCallOnMainThread):
+ * wtf/MainThread.h:
+
+2010-05-07 Oliver Hunt <oliver@apple.com>
+
+ Windows build fix.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-05-07 Eric Seidel <eric@webkit.org>
+
+ Unreviewed, rolling out r58990.
+ http://trac.webkit.org/changeset/58990
+
+ Broke 4 tests on Snow Leopard and Qt.
+
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ * runtime/JSCell.h:
+
+2010-05-07 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Optimize access to the global object from a function that uses eval
+ https://bugs.webkit.org/show_bug.cgi?id=38644
+
+ Fix bug where cross scope access to a global var (vs. property) would
+ be allowed without checking for intervening dynamic scopes.
+
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::emitResolve):
+
+2010-05-07 Oliver Hunt <oliver@apple.com>
+
+ 32-bit buildfix.
+
+ Macro expansion I stab at thee!
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_resolve_global):
+
+2010-05-07 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Optimized o[s] where o is a cell and s is a string, removing some old
+ code that wasn't really tuned for the JIT.
+
+ SunSpider says 0.8% faster.
+
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ * runtime/JSCell.h:
+
+2010-05-07 Oliver Hunt <oliver@apple.com>
+
+ Windows build fix.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-05-07 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Geoffrey Garen.
+
+ Optimize access to the global object from a function that uses eval
+ https://bugs.webkit.org/show_bug.cgi?id=38644
+
+ Add op_resolve_global_dynamic, a variant of op_resolve_global that
+ checks each node in the scope chain for dynamically inserted properties
+ and falls back to the normal resolve logic in that case.
+
+ * JavaScriptCore.exp:
+ * bytecode/CodeBlock.cpp:
+ (JSC::isGlobalResolve):
+ (JSC::CodeBlock::printStructures):
+ (JSC::CodeBlock::dump):
+ (JSC::CodeBlock::derefStructures):
+ * bytecode/Opcode.h:
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::findScopedProperty):
+ Now take an additional reference parameter to used to indicate that
+ there were nodes that may gain dynamic properties
+ (JSC::BytecodeGenerator::emitResolve):
+ (JSC::BytecodeGenerator::emitResolveBase):
+ (JSC::BytecodeGenerator::emitResolveWithBase):
+ deal with additional argument to findScopedProperty
+ * bytecompiler/BytecodeGenerator.h:
+ * bytecompiler/NodesCodegen.cpp:
+ (JSC::FunctionCallResolveNode::emitBytecode):
+ (JSC::PostfixResolveNode::emitBytecode):
+ (JSC::PrefixResolveNode::emitBytecode):
+ (JSC::ReadModifyResolveNode::emitBytecode):
+ (JSC::AssignResolveNode::emitBytecode):
+ These functions use findScopedProperty directly in order to
+ optimise lookup. They cannot trivially handle any degree of
+ dynamism in the lookup so we just give up in such case.
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::resolveGlobalDynamic):
+ (JSC::Interpreter::execute):
+ (JSC::Interpreter::privateExecute):
+ * interpreter/Interpreter.h:
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileMainPass):
+ (JSC::JIT::privateCompileSlowCases):
+ * jit/JIT.h:
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_resolve_global):
+ (JSC::JIT::emit_op_resolve_global_dynamic):
+ (JSC::JIT::emitSlow_op_resolve_global):
+ (JSC::JIT::emitSlow_op_resolve_global_dynamic):
+ Happily resolve_global_dynamic can share the slow case!
+ * jit/JITStubs.h:
+ (JSC::):
+ * runtime/JSActivation.cpp:
+ (JSC::JSActivation::isDynamicScope):
+ * runtime/JSActivation.h:
+ * runtime/JSGlobalObject.cpp:
+ (JSC::JSGlobalObject::isDynamicScope):
+ * runtime/JSGlobalObject.h:
+ * runtime/JSStaticScopeObject.cpp:
+ (JSC::JSStaticScopeObject::isDynamicScope):
+ * runtime/JSStaticScopeObject.h:
+ * runtime/JSVariableObject.h:
+
+2010-05-07 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Fixed Sputnik failure seen on buildbot.
+
+ * runtime/NumberPrototype.cpp:
+ (JSC::numberProtoFuncToString): Cast to unsigned before checking magnitude,
+ to efficiently exclude negative numbers, which require two characters
+ instead of one.
+
+2010-05-07 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Alexey Proskuryakov.
+
+ Slightly more effective way to guarantee a compile-time constant, at
+ least on gcc.
+
+ * runtime/NumberPrototype.cpp:
+ (JSC::numberProtoFuncToString): Use pointer notation instead of array
+ notation, so the compiler treats the string and its contents as constant.
+
+2010-05-07 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Alexey Proskuryakov.
+
+ [WTFURL] Add core URL parser
+ https://bugs.webkit.org/show_bug.cgi?id=38572
+
+ This patch adds the core of the URL parser. The URL parser uses a
+ templated notion of a code unit to support different string types.
+ Later we'll add some non-templated APIs with concrete types that
+ clients can use more conveniently.
+
+ The URLParser has a couple calls to ASSERT(), which I've commented out
+ for now. I'm not 100% sure how to handle the dependency issues there
+ yet, so I've punted on the issue for now.
+
+ Also, there are a number of methods that are declared public in this
+ patch that are only used by the canonicalizer. My plan is to make
+ those private or protected and make the canonicalizer a friend of the
+ parser. The details will be in a later patch.
+
+ * wtf/url/src/URLComponent.h:
+ (WTF::URLComponent::fromRange):
+ (WTF::URLComponent::isNonEmpty):
+ (WTF::URLComponent::isEmptyOrInvalid):
+ * wtf/url/src/URLParser.h: Added.
+ (WTF::URLParser::):
+ (WTF::URLParser::isPossibleAuthorityTerminator):
+ (WTF::URLParser::parseAuthority):
+ (WTF::URLParser::extractScheme):
+ (WTF::URLParser::parseAfterScheme):
+ (WTF::URLParser::parseStandardURL):
+ (WTF::URLParser::parsePath):
+ (WTF::URLParser::parsePathURL):
+ (WTF::URLParser::parseMailtoURL):
+ (WTF::URLParser::parsePort):
+ (WTF::URLParser::extractFileName):
+ (WTF::URLParser::extractQueryKeyValue):
+ (WTF::URLParser::isURLSlash):
+ (WTF::URLParser::shouldTrimFromURL):
+ (WTF::URLParser::trimURL):
+ (WTF::URLParser::consecutiveSlashes):
+ (WTF::URLParser::isPortDigit):
+ (WTF::URLParser::nextAuthorityTerminator):
+ (WTF::URLParser::parseUserInfo):
+ (WTF::URLParser::parseServerInfo):
+
+2010-05-07 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Added a fast path for number-to-character conversion via
+ Number.prototype.toString base 36.
+
+ 0.7% speedup on SunSpider.
+
+ * runtime/NumberPrototype.cpp:
+ (JSC::numberProtoFuncToString): Made radix interpretation a little more
+ efficient by keeping it in int space. Turned "const char" into
+ "static const char" just in case. Added a fast path for base 36
+ conversion of something that will turn into a character.
+
+2010-05-07 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Darin Fisher.
+
+ [WTFURL] Add a malloc-backed URLBuffer
+ https://bugs.webkit.org/show_bug.cgi?id=38694
+
+ This patch adds a URLBuffer that uses new/delete to manage the backing
+ store for the buffer.
+
+ * wtf/url/src/RawURLBuffer.h: Added.
+ (WTF::RawURLBuffer::RawURLBuffer):
+ (WTF::RawURLBuffer::~RawURLBuffer):
+ (WTF::RawURLBuffer::resize):
+
+2010-05-06 Fumitoshi Ukai <ukai@chromium.org>
+
+ Reviewed by Alexey Proskuryakov.
+
+ JavaScriptCore/wtf/RandomNumber.h should provide using WTF::*
+ https://bugs.webkit.org/show_bug.cgi?id=38719
+
+ * wtf/RandomNumber.h:
+ Add using directives.
+
+2010-05-06 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] Enable YARR_JIT for X86 Mac for QtWebKit
+ https://bugs.webkit.org/show_bug.cgi?id=38668
+
+ * wtf/Platform.h:
+
+2010-05-06 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Bug 38714 - Add result caching for Math.sin
+
+ Math.sin is frequently called with the same operand, caching the result should
+ improve performance. CachedTranscendentalFunction adds a generic mechanism to
+ cache results for pure functions with the signature "double func(double)", and
+ where NaN maps to NaN.
+
+ CachedTranscendentalFunction uses a very simple hash function designed to be
+ fast to execute since we cannot cache the result, and trivial to JIT generate,
+ should we wish to do so.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * runtime/CachedTranscendentalFunction.h: Added.
+ (JSC::CachedTranscendentalFunction::CachedTranscendentalFunction):
+ (JSC::CachedTranscendentalFunction::~CachedTranscendentalFunction):
+ (JSC::CachedTranscendentalFunction::operator()):
+ (JSC::CachedTranscendentalFunction::initialize):
+ (JSC::CachedTranscendentalFunction::hash):
+ * runtime/JSGlobalData.h:
+ * runtime/MathObject.cpp:
+ (JSC::mathProtoFuncSin):
+ * wtf/Platform.h:
+
+2010-05-06 Geoffrey Garen <ggaren@apple.com>
+
+ Windows build fix.
+
+ * bytecode/SamplingTool.cpp:
+ (JSC::SamplingFlags::sample): Use a cast, so Windows will be happy when
+ this code is enabled.
+ * wtf/Platform.h: Reverted last change to this file, which seems to have
+ been accidental.
+
+2010-05-06 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Add compile switch to make debugger keyword plant breakpoint instructions.
+
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::emitDebugHook):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_debug):
+ * wtf/Platform.h:
+
+2010-05-06 Oliver Hunt <oliver@apple.com>
+
+ Build fix
+
+ Fix ARM builds
+
+ * assembler/MacroAssemblerARM.h:
+ (JSC::MacroAssemblerARM::load16):
+ * assembler/MacroAssemblerARMv7.h:
+ (JSC::MacroAssemblerARMv7::load16):
+
+2010-05-06 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Geoffrey Garen.
+
+ Improve performance of single character string compares
+ https://bugs.webkit.org/show_bug.cgi?id=38659
+
+ Add logic to the jit to identify comparisons to single character string literals
+ and then just perform the comparison inline, rather than ignoring the evidence
+ and attempting to perform an integer comparison.
+
+ Multiple changes required -- add jnlesseq opcode, add helper function to identify
+ single character string constants, add a helper to load single character strings.
+ Then add the 32_64 and normal codepaths to the JIT.
+
+ * assembler/MacroAssemblerX86Common.h:
+ (JSC::MacroAssemblerX86Common::load16):
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dump):
+ * bytecode/Opcode.h:
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::emitJumpIfTrue):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::privateExecute):
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileMainPass):
+ (JSC::JIT::privateCompileSlowCases):
+ * jit/JIT.h:
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_jnless):
+ (JSC::JIT::emitSlow_op_jnless):
+ (JSC::JIT::emit_op_jless):
+ (JSC::JIT::emitSlow_op_jless):
+ (JSC::JIT::emit_op_jlesseq):
+ (JSC::JIT::emit_op_jnlesseq):
+ (JSC::JIT::emitSlow_op_jlesseq):
+ (JSC::JIT::emitSlow_op_jnlesseq):
+ * jit/JITArithmetic32_64.cpp:
+ (JSC::JIT::emit_op_jnless):
+ (JSC::JIT::emitSlow_op_jnless):
+ (JSC::JIT::emit_op_jless):
+ (JSC::JIT::emitSlow_op_jless):
+ (JSC::JIT::emit_op_jlesseq):
+ (JSC::JIT::emit_op_jnlesseq):
+ (JSC::JIT::emitSlow_op_jlesseq):
+ (JSC::JIT::emitSlow_op_jnlesseq):
+ (JSC::JIT::emitBinaryDoubleOp):
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::emitLoadCharacterString):
+ (JSC::JIT::isOperandConstantImmediateChar):
+ * jit/JSInterfaceJIT.h:
+ (JSC::ThunkHelpers::stringImplDataOffset):
+ (JSC::ThunkHelpers::jsStringLengthOffset):
+ (JSC::ThunkHelpers::jsStringValueOffset):
+ Moved from ThunkGenerators to make it possible to share.
+ * jit/ThunkGenerators.cpp:
+
+2010-05-06 Martin Robinson <mrobinson@webkit.org>
+
+ Reviewed by Gustavo Noronha Silva.
+
+ [GTK] Enable DOM clipboard and drag-and-drop access
+ https://bugs.webkit.org/show_bug.cgi?id=30623
+
+ Convert dragging portion of drag-and-drop to use DataObjectGtk.
+
+ * wtf/gobject/GRefPtr.h: Add forward declarations for GObject functions.
+
+2010-05-06 Steve Block <steveblock@google.com>
+
+ Reviewed by Eric Seidel.
+
+ MAC_JAVA_BRIDGE should be renamed JAVA_BRIDGE
+ https://bugs.webkit.org/show_bug.cgi?id=38544
+
+ * wtf/Platform.h:
+
+2010-05-06 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Maciej Stachowiak.
+
+ [WTFURL] Add a class to represent the segments of a URL
+ https://bugs.webkit.org/show_bug.cgi?id=38566
+
+ When paired with a string, this class represents a parsed URL.
+
+ * wtf/url/src/URLSegments.cpp: Added.
+ (WTF::URLSegments::length):
+ (WTF::URLSegments::charactersBefore):
+ * wtf/url/src/URLSegments.h: Added.
+ (WTF::URLSegments::):
+ (WTF::URLSegments::URLSegments):
+ * wtf/url/wtfurl.gyp:
+
+2010-05-05 Tony Gentilcore <tonyg@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Adding comment with link to RefPtr documentation.
+ https://bugs.webkit.org/show_bug.cgi?id=38601
+
+ * wtf/RefPtr.h:
+
+2010-05-05 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Bug 38604 - workers-gc2 crashing on Qt
+
+ This appears to be due to a couple of issues.
+ (1) When the atomic string table is deleted it does not clear the 'inTable' bit
+ on AtomicStrings - it implicitly assumes that all AtomicStrings have already
+ been deleted at this point (otherwise they will crash in their destructor when
+ they try to remove themselves from the atomic string table).
+ (2) We don't fix the ordering in which WTF::WTFThreadData and
+ WebCore::ThreadGlobalData are destructed.
+
+ We should make sure that ThreadGlobalData is cleaned up before worker threads
+ terminate and WTF::WTFThreadData is destroyed, and we should clear the inTable
+ bit of members on atomic string table destruction.
+
+ WTF changes (fix issue 1, above) - ensure inTable property is cleared when the
+ atomic string table is destroyed (also, rename InTable to IsAtomic, to make it
+ clear which table we are refering to!)
+
+ * wtf/text/AtomicString.cpp:
+ (WebCore::AtomicStringTable::destroy):
+ (WebCore::CStringTranslator::translate):
+ (WebCore::UCharBufferTranslator::translate):
+ (WebCore::HashAndCharactersTranslator::translate):
+ (WebCore::AtomicString::add):
+ * wtf/text/StringImpl.cpp:
+ (WebCore::StringImpl::~StringImpl):
+ * wtf/text/StringImpl.h:
+ (WebCore::StringImpl::isAtomic):
+ (WebCore::StringImpl::setIsAtomic):
+ * wtf/text/StringImplBase.h:
+
+2010-05-05 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Geoffrey Garen.
+
+ Make Array.join specialised for actual arrays
+ https://bugs.webkit.org/show_bug.cgi?id=38592
+
+ Bring Array.join in line with the other array methods by specialising for
+ this === an array.
+
+ * runtime/ArrayPrototype.cpp:
+ (JSC::arrayProtoFuncJoin):
+
+2010-05-04 Yongjun Zhang <yongjun_zhang@apple.com>
+
+ Reviewed by Darin Adler.
+
+ WebKit crashes at DebuggerCallFrame::functionName() if m_callFrame is the top global callframe.
+ https://bugs.webkit.org/show_bug.cgi?id=38535
+
+ Don't call asFunction if callee is not a FunctionType to prevent assertion failure
+ in JSCell::isObject().
+
+ * debugger/DebuggerCallFrame.cpp:
+ (JSC::DebuggerCallFrame::functionName):
+ (JSC::DebuggerCallFrame::calculatedFunctionName):
+
+2010-05-04 Steve Falkenburg <sfalken@apple.com>
+
+ Remove redundant exports to fix Windows build warnings.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-05-04 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
+
+ Reviewed by Holger Freyther.
+
+ Fix a memory leak inside the QScriptValue.
+
+ QSciptValuePrivate::toString should release all temporary variables.
+
+ [Qt] QScriptValue::toString have a memory leak.
+ https://bugs.webkit.org/show_bug.cgi?id=38112
+
+ * qt/api/qscriptvalue_p.h:
+ (QScriptValuePrivate::toString):
+
+2010-05-04 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk>
+
+ Reviewed by Darin Adler.
+
+ Does not work on SPARC because of alignment issues
+ https://bugs.webkit.org/show_bug.cgi?id=38455
+
+ Use AllocAlignmentInteger instead of void* on pageheap_memory to
+ avoid crashing at runtime in some architectures. Investigated by
+ Mike Hommey <mh@glandium.org>, change suggested by Darin Adler.
+
+ * wtf/FastMalloc.cpp:
+
+2010-05-04 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Maciej Stachowiak.
+
+ Add first WTFURL file
+ https://bugs.webkit.org/show_bug.cgi?id=38470
+
+ This class represents a component of a URL, such as the scheme or path.
+ Essentially, the class is an index into a string buffer.
+
+ * wtf/url: Added.
+ - There was some discussion about where to put the URL library.
+ There are a number of reasonable options, but putting the library
+ in the WTF directory seems like a reasonable alternative. This
+ location will make more sense once WTF is moved out of
+ JavaScriptCore and into a top-level directory.
+ * wtf/url/src: Added.
+ - I've added this extra directory to the usual structure because we
+ eventually want a "public" folder that defines the public
+ interface to this library that clients outside of svn.webkit.org
+ can rely upon, much like the various subfolders of the WebKit
+ directory often define a public API.
+ * wtf/url/src/URLComponent.h: Added.
+ - I've added this somewhat trivial class to get the ball rolling.
+ (WTF::URLComponent::URLComponent):
+ (WTF::URLComponent::isValid):
+ (WTF::URLComponent::isNonempty):
+ (WTF::URLComponent::reset):
+ (WTF::URLComponent::operator==):
+ (WTF::URLComponent::begin):
+ (WTF::URLComponent::setBegin):
+ (WTF::URLComponent::length):
+ (WTF::URLComponent::setLength):
+ (WTF::URLComponent::end):
+ * wtf/url/wtfurl.gyp: Added.
+ - WTFURL will be an independently buildable library, hence the
+ beginnings of a wtfurl.gyp file.
+
+2010-05-03 Stephanie Lewis <slewis@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ https://bugs.webkit.org/show_bug.cgi?id=38368
+ <rdar://problem/7834433> REGRESSSION: 1.5% PLT regression due to 56028
+ (return memory quicker).
+ Instead of returning everything but the smallest spans spread out
+ the spans kept over several size lists.
+
+ * wtf/FastMalloc.cpp:
+ (WTF::TCMalloc_PageHeap::scavenge):
+
+2010-05-03 James Robinson <jamesr@chromium.org>
+
+ Reviewed by Eric Seidel.
+
+ Clean up a few compiler warnings
+ https://bugs.webkit.org/show_bug.cgi?id=38073
+
+ * wtf/text/StringImpl.cpp:
+ (WebCore::StringImpl::ascii):
+
+2010-05-03 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (reverting previous commit).
+
+ Rolling out r58114 - this introduced memory leaks of
+ AtomicStrings then workers terminated.
+
+ * GNUmakefile.am:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.vcproj/WTF/WTF.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * jit/ThunkGenerators.cpp:
+ (JSC::ThunkHelpers::stringImplDataOffset):
+ * runtime/Identifier.cpp:
+ (JSC::IdentifierTable::~IdentifierTable):
+ (JSC::IdentifierTable::add):
+ (JSC::IdentifierCStringTranslator::hash):
+ (JSC::IdentifierCStringTranslator::equal):
+ (JSC::IdentifierCStringTranslator::translate):
+ (JSC::Identifier::add):
+ (JSC::IdentifierUCharBufferTranslator::hash):
+ (JSC::IdentifierUCharBufferTranslator::equal):
+ (JSC::IdentifierUCharBufferTranslator::translate):
+ (JSC::Identifier::addSlowCase):
+ * runtime/Identifier.h:
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData):
+ (JSC::JSGlobalData::~JSGlobalData):
+ * runtime/JSGlobalData.h:
+ * wtf/WTFThreadData.cpp:
+ (WTF::WTFThreadData::WTFThreadData):
+ (WTF::WTFThreadData::~WTFThreadData):
+ * wtf/WTFThreadData.h:
+ (JSC::IdentifierTable::remove):
+ (JSC::IdentifierTable::literalTable):
+ (WTF::WTFThreadData::atomicStringTable):
+ * wtf/text/AtomicString.cpp:
+ (WebCore::AtomicStringTable::create):
+ (WebCore::AtomicStringTable::table):
+ (WebCore::AtomicStringTable::destroy):
+ (WebCore::stringTable):
+ (WebCore::CStringTranslator::hash):
+ (WebCore::CStringTranslator::equal):
+ (WebCore::CStringTranslator::translate):
+ (WebCore::operator==):
+ (WebCore::AtomicString::add):
+ (WebCore::equal):
+ (WebCore::UCharBufferTranslator::hash):
+ (WebCore::UCharBufferTranslator::equal):
+ (WebCore::UCharBufferTranslator::translate):
+ (WebCore::HashAndCharactersTranslator::hash):
+ (WebCore::HashAndCharactersTranslator::equal):
+ (WebCore::HashAndCharactersTranslator::translate):
+ (WebCore::AtomicString::find):
+ (WebCore::AtomicString::remove):
+ * wtf/text/AtomicStringTable.h: Removed.
+ * wtf/text/StringImpl.cpp:
+ (WebCore::StringImpl::~StringImpl):
+ * wtf/text/StringImpl.h:
+ (WebCore::StringImpl::inTable):
+ (WebCore::StringImpl::setInTable):
+ (WebCore::equal):
+ * wtf/text/StringImplBase.h:
+ (WTF::StringImplBase::StringImplBase):
+
+2010-05-03 Kevin Watters <kevinwatters@gmail.com>
+
+ Reviewed by Kevin Ollivier.
+
+ [wx] Implement scheduleDispatchFunctionsOnMainThread for wx port.
+ https://bugs.webkit.org/show_bug.cgi?id=38480
+
+ * wtf/wx/MainThreadWx.cpp:
+ (wxCallAfter::wxCallAfter):
+ (wxCallAfter::OnCallback):
+ (WTF::scheduleDispatchFunctionsOnMainThread):
+
+2010-05-03 Kevin Watters <kevinwatters@gmail.com>
+
+ Reviewed by Kevin Ollivier.
+
+ [wx] Build and use Mac's ComplexTextController to support complex text in wx.
+ https://bugs.webkit.org/show_bug.cgi?id=38482
+
+ * wtf/Platform.h:
+
+2010-05-03 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Interpreter crashes due to incorrect refcounting of cached structures.
+ https://bugs.webkit.org/show_bug.cgi?id=38491
+ rdar://problem/7926160
+
+ Make sure we ref/deref structures used for cached custom property getters
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::derefStructures):
+ (JSC::CodeBlock::refStructures):
+
+2010-05-02 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Eric Seidel.
+
+ [Qt] Enable JIT for QtWebKit on Symbian
+ https://bugs.webkit.org/show_bug.cgi?id=38339
+
+ JIT on Symbian has been stable for quite some time, it
+ is time to turn it on by default.
+
+ * wtf/Platform.h:
+
+2010-04-29 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Add codegen support for unsigned right shift
+ https://bugs.webkit.org/show_bug.cgi?id=38375
+
+ Expose unsigned right shift in the macro assembler, and make use of it
+ from the jit. Currently if the result is outside the range 0..2^31-1
+ we simply fall back to the slow case, even in JSVALUE64 and JSVALUE32_64
+ where technically we could still return an immediate value.
+
+ * assembler/MacroAssemblerARM.h:
+ (JSC::MacroAssemblerARM::urshift32):
+ * assembler/MacroAssemblerARMv7.h:
+ (JSC::MacroAssemblerARMv7::urshift32):
+ * assembler/MacroAssemblerX86Common.h:
+ (JSC::MacroAssemblerX86Common::urshift32):
+ * assembler/X86Assembler.h:
+ (JSC::X86Assembler::):
+ (JSC::X86Assembler::shrl_i8r):
+ (JSC::X86Assembler::shrl_CLr):
+ Add unsigned right shift to the x86 assembler
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileMainPass):
+ (JSC::JIT::privateCompileSlowCases):
+ op_rshift no longer simply get thrown to a stub function
+ * jit/JIT.h:
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_urshift):
+ (JSC::JIT::emitSlow_op_urshift):
+ JSVALUE32 and JSVALUE64 implementation. Only supports
+ double lhs in JSVALUE64.
+ * jit/JITArithmetic32_64.cpp:
+ (JSC::JIT::emit_op_rshift):
+ (JSC::JIT::emitSlow_op_rshift):
+ (JSC::JIT::emit_op_urshift):
+ (JSC::JIT::emitSlow_op_urshift):
+ Refactor right shift code to have shared implementation between signed
+ and unsigned versions.
+
+2010-04-29 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Handle double on righthand side of a right shift
+ https://bugs.webkit.org/show_bug.cgi?id=38363
+
+ In 64-bit we support right shift of a double, and there's no
+ reason not to in 32-bit either. This is a 1.1% sunspider
+ improvement in 32bit.
+
+ Given high performance javascript code frequently makes
+ use of bit operators to perform double->int conversion i'll
+ follow this patch up with similar patches for bitwise 'and'
+ and 'or'.
+
+ * jit/JITArithmetic32_64.cpp:
+ (JSC::JIT::emit_op_rshift):
+ (JSC::JIT::emitSlow_op_rshift):
+
+2010-04-29 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Hoist JSVALUE32_64 arithmetic implementations into a separate file.
+
+ * GNUmakefile.am:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.pro:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emitSlow_op_jnless):
+ (JSC::JIT::emitSlow_op_jless):
+ (JSC::JIT::emitSlow_op_jnlesseq):
+ (JSC::JIT::emit_op_mod):
+ (JSC::JIT::compileBinaryArithOpSlowCase):
+ (JSC::JIT::emit_op_div):
+ (JSC::JIT::compileBinaryArithOp):
+ * jit/JITArithmetic32_64.cpp: Added.
+ (JSC::JIT::emit_op_negate):
+ (JSC::JIT::emitSlow_op_negate):
+ (JSC::JIT::emit_op_jnless):
+ (JSC::JIT::emitSlow_op_jnless):
+ (JSC::JIT::emit_op_jless):
+ (JSC::JIT::emitSlow_op_jless):
+ (JSC::JIT::emit_op_jnlesseq):
+ (JSC::JIT::emitSlow_op_jnlesseq):
+ (JSC::JIT::emit_op_lshift):
+ (JSC::JIT::emitSlow_op_lshift):
+ (JSC::JIT::emit_op_rshift):
+ (JSC::JIT::emitSlow_op_rshift):
+ (JSC::JIT::emit_op_bitand):
+ (JSC::JIT::emitSlow_op_bitand):
+ (JSC::JIT::emit_op_bitor):
+ (JSC::JIT::emitSlow_op_bitor):
+ (JSC::JIT::emit_op_bitxor):
+ (JSC::JIT::emitSlow_op_bitxor):
+ (JSC::JIT::emit_op_bitnot):
+ (JSC::JIT::emitSlow_op_bitnot):
+ (JSC::JIT::emit_op_post_inc):
+ (JSC::JIT::emitSlow_op_post_inc):
+ (JSC::JIT::emit_op_post_dec):
+ (JSC::JIT::emitSlow_op_post_dec):
+ (JSC::JIT::emit_op_pre_inc):
+ (JSC::JIT::emitSlow_op_pre_inc):
+ (JSC::JIT::emit_op_pre_dec):
+ (JSC::JIT::emitSlow_op_pre_dec):
+ (JSC::JIT::emit_op_add):
+ (JSC::JIT::emitAdd32Constant):
+ (JSC::JIT::emitSlow_op_add):
+ (JSC::JIT::emit_op_sub):
+ (JSC::JIT::emitSub32Constant):
+ (JSC::JIT::emitSlow_op_sub):
+ (JSC::JIT::emitBinaryDoubleOp):
+ (JSC::JIT::emit_op_mul):
+ (JSC::JIT::emitSlow_op_mul):
+ (JSC::JIT::emit_op_div):
+ (JSC::JIT::emitSlow_op_div):
+ (JSC::JIT::emit_op_mod):
+ (JSC::JIT::emitSlow_op_mod):
+
+2010-04-29 Zoltan Herczeg <zherczeg@webkit.org>
+
+ Reviewed by Oliver Hunt
+
+ Add sqrt() instruction support for ARM assembler (using VFP)
+ https://bugs.webkit.org/show_bug.cgi?id=38312
+
+ * assembler/ARMAssembler.h:
+ (JSC::ARMAssembler::):
+ (JSC::ARMAssembler::fsqrtd_r):
+ * assembler/MacroAssemblerARM.h:
+ (JSC::MacroAssemblerARM::supportsFloatingPointSqrt):
+ (JSC::MacroAssemblerARM::sqrtDouble):
+
+2010-04-29 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Refactor qtscriptglobal.h
+ https://bugs.webkit.org/show_bug.cgi?id=37953
+
+ Use the same pattern in qtscriptglobal.h as in
+ qwebkitglobal.h without checking for specific OSs.
+
+ * qt/api/qtscriptglobal.h:
+
+2010-04-29 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Small cleanup.
+
+ QScriptValuePrivate constructor shouldn't take QScriptEngine pointer
+ as a parameter, because it breaks a private / public separation rule.
+ QScriptEnginePrivate::get(QScriptEngine*) should return
+ a QScriptEnginePrivate pointer instead of a QScriptEnginePtr, it simplifies
+ implementation.
+
+ [Qt] QScriptValuePrivate class needs some cleanup.
+ https://bugs.webkit.org/show_bug.cgi?id=37729
+
+ * qt/api/qscriptengine_p.h:
+ (QScriptEnginePrivate::get):
+ * qt/api/qscriptvalue.cpp:
+ (QScriptValue::QScriptValue):
+ * qt/api/qscriptvalue_p.h:
+ (QScriptValuePrivate::QScriptValuePrivate):
+
+2010-04-29 Kwang Yul Seo <skyul@company100.net>
+
+ Reviewed by Simon Hausmann.
+
+ [WINCE] Export g_stackBase with JS_EXPORTDATA
+ https://bugs.webkit.org/show_bug.cgi?id=37437
+
+ Export g_stackBase with JS_EXPORTDATA as it is used by SharedTimerWince.cpp.
+
+ * runtime/Collector.cpp:
+
+2010-04-28 Oliver Hunt <oliver@apple.com>
+
+ Do an unordered compare so that we don't treat NaN incorrectly.
+
+ RS=Gavin Barraclough
+
+ * jit/ThunkGenerators.cpp:
+ (JSC::powThunkGenerator):
+
+2010-04-28 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Add fast paths for Math.pow and Math.sqrt
+ https://bugs.webkit.org/show_bug.cgi?id=38294
+
+ Add specialized thunks for Math.pow and Math.sqrt.
+ This requires adding a sqrtDouble function to the MacroAssembler
+ and sqrtsd to the x86 assembler.
+
+ Math.pow is slightly more complicated, in that we have
+ to implement exponentiation ourselves rather than relying
+ on hardware support. The inline exponentiation is restricted
+ to positive integer exponents on a numeric base. Exponentiation
+ is finally performed through the "Exponentiation by Squaring"
+ algorithm.
+
+ * assembler/AbstractMacroAssembler.h:
+ (JSC::AbstractMacroAssembler::ImmPtr::ImmPtr):
+ * assembler/MacroAssemblerARM.h:
+ (JSC::MacroAssemblerARM::supportsFloatingPointSqrt):
+ (JSC::MacroAssemblerARM::loadDouble):
+ (JSC::MacroAssemblerARM::sqrtDouble):
+ * assembler/MacroAssemblerARMv7.h:
+ (JSC::MacroAssemblerARMv7::supportsFloatingPointSqrt):
+ (JSC::MacroAssemblerARMv7::sqrtDouble):
+ * assembler/MacroAssemblerX86.h:
+ (JSC::MacroAssemblerX86::loadDouble):
+ (JSC::MacroAssemblerX86::supportsFloatingPointSqrt):
+ * assembler/MacroAssemblerX86Common.h:
+ (JSC::MacroAssemblerX86Common::sqrtDouble):
+ * assembler/MacroAssemblerX86_64.h:
+ (JSC::MacroAssemblerX86_64::loadDouble):
+ (JSC::MacroAssemblerX86_64::supportsFloatingPointSqrt):
+ * assembler/X86Assembler.h:
+ (JSC::X86Assembler::):
+ (JSC::X86Assembler::movsd_mr):
+ (JSC::X86Assembler::sqrtsd_rr):
+ (JSC::X86Assembler::X86InstructionFormatter::twoByteOp):
+ (JSC::X86Assembler::X86InstructionFormatter::memoryModRM):
+ * create_hash_table:
+ * jit/JIT.h:
+ * jit/JITInlineMethods.h:
+ * jit/JITOpcodes.cpp:
+ * jit/JITStubs.h:
+ (JSC::JITThunks::ctiNativeCallThunk):
+ * jit/JSInterfaceJIT.h:
+ (JSC::JSInterfaceJIT::emitLoadDouble):
+ (JSC::JSInterfaceJIT::emitJumpIfImmediateNumber):
+ (JSC::JSInterfaceJIT::emitJumpIfNotImmediateNumber):
+ (JSC::JSInterfaceJIT::emitLoadInt32):
+ * jit/SpecializedThunkJIT.h:
+ (JSC::SpecializedThunkJIT::loadDoubleArgument):
+ (JSC::SpecializedThunkJIT::loadInt32Argument):
+ (JSC::SpecializedThunkJIT::returnJSValue):
+ (JSC::SpecializedThunkJIT::returnDouble):
+ (JSC::SpecializedThunkJIT::finalize):
+ * jit/ThunkGenerators.cpp:
+ (JSC::sqrtThunkGenerator):
+ (JSC::powThunkGenerator):
+ * jit/ThunkGenerators.h:
+ * runtime/Executable.h:
+ (JSC::NativeExecutable::NativeExecutable):
+ * runtime/JSFunction.cpp:
+ (JSC::JSFunction::JSFunction):
+
+2010-04-28 Mike Thole <mthole@apple.com>
+
+ Reviewed by Mark Rowe.
+
+ Reenable WTF_USE_PROTECTION_SPACE_AUTH_CALLBACK now that an
+ exports file for it has been added.
+
+ * wtf/Platform.h:
+
+2010-04-28 Mike Thole <mthole@apple.com>
+
+ Build fix, not reviewed.
+
+ * wtf/Platform.h:
+ Disable WTF_USE_PROTECTION_SPACE_AUTH_CALLBACK until an exports file is created.
+
+2010-04-28 Mike Thole <mthole@apple.com>
+
+ Reviewed by David Kilzer.
+
+ Add canAuthenticateAgainstProtectionSpace() to frame loader so that a protection space
+ can be inspected before attempting to authenticate against it
+ https://bugs.webkit.org/show_bug.cgi?id=38271
+
+ * wtf/Platform.h: Add WTF_USE_PROTECTION_SPACE_AUTH_CALLBACK define.
+
+2010-04-28 Darin Adler <darin@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Don't use CFAbsoluteTimeGetCurrent on Mac OS X, since it's just a cover
+ for gettimeofday anyway.
+
+ * wtf/CurrentTime.cpp:
+ (WTF::currentTime): Remove the CF version of this. Change the "other POSIX"
+ version to pass 0 for the time zone instead of ignoring a return value.
+ Also get rid of unneeded type casts, since operations involving both
+ integers and doubles are always evaluated as doubles in C without explicit
+ type casting.
+
+2010-04-28 Darin Fisher <darin@chromium.org>
+
+ Reviewed by David Levin.
+
+ [Chromium] callOnMainThread should equate to MessageLoop::PostTask
+ https://bugs.webkit.org/show_bug.cgi?id=38276
+
+ * JavaScriptCore.gyp/JavaScriptCore.gyp:
+ * wtf/MainThread.cpp:
+ * wtf/chromium/ChromiumThreading.h:
+ * wtf/chromium/MainThreadChromium.cpp:
+ (WTF::initializeMainThread):
+ (WTF::callOnMainThread):
+ (WTF::callOnMainThreadAndWait):
+ (WTF::setMainThreadCallbacksPaused):
+ (WTF::isMainThread):
+
+2010-04-28 Simon Hausmann <simon.hausmann@nokia.com>, Kent Hansen <kent.hansen@nokia.com>
+
+ Reviewed by Darin Adler.
+
+ JSC's currentThreadStackBase is not reentrant on some platforms
+ https://bugs.webkit.org/show_bug.cgi?id=37195
+
+ This function needs to be reentrant to avoid memory corruption on platforms where
+ the implementation uses global variables.
+
+ This patch adds a mutex lock where necessary and makes the Symbian implementation
+ reentrant.
+
+ * runtime/Collector.cpp:
+ (JSC::currentThreadStackBaseMutex):
+ (JSC::currentThreadStackBase):
+
+2010-04-28 Thiago Macieira <thiago.macieira@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Fix compilation with gcc 3.4.
+
+ AtomicStringImpl.h:29: error: base `WebCore::StringImpl' with only
+ non-default constructor in class without a constructor
+
+ * wtf/text/AtomicStringImpl.h:
+ (WebCore::AtomicStringImpl::AtomicStringImpl): Provide a default constructor.
+ * wtf/text/StringImpl.h: Allow AtomicStringImpl to call a StringImpl constructor through a friend declaration.
+
+2010-04-27 Stephanie Lewis <slewis@apple.com>
+
+ Fix Tiger build.
+
+ * wtf/FastMalloc.cpp:
+ (WTF::TCMalloc_PageHeap::Carve):
+
+2010-04-26 Stephanie Lewis <slewis@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ https://bugs.webkit.org/show_bug.cgi?id=38154 FastMalloc calls madvise too often.
+ <rdar://problem/7834433> REGRESSSION: 1.5% PLT regression due to 56028 (return memory quicker).
+ To save on madvise calls when recommitting memory recommit the entire span and then carve it
+ instead of carving the span up and only committing the part that will be used immediately.
+
+ * wtf/FastMalloc.cpp:
+ (WTF::TCMalloc_PageHeap::New):
+ (WTF::TCMalloc_PageHeap::AllocLarge):
+ (WTF::TCMalloc_PageHeap::Carve):
+
+2010-04-26 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Add specialized thunks for a char code related string functions
+ https://bugs.webkit.org/show_bug.cgi?id=38177
+
+ This is a simple extension to my prior patch. Basically hoist the
+ existing character loading logic from the charCodeAt thunk and into
+ a helper function, then add a helper to load strings from the small
+ string cache. This allows trivial implementations of fromCharCode
+ and charAt.
+
+ * create_hash_table:
+ * jit/SpecializedThunkJIT.h:
+ (JSC::SpecializedThunkJIT::returnJSCell):
+ (JSC::SpecializedThunkJIT::tagReturnAsJSCell):
+ * jit/ThunkGenerators.cpp:
+ (JSC::stringCharLoad):
+ (JSC::charToString):
+ (JSC::charCodeAtThunkGenerator):
+ (JSC::charAtThunkGenerator):
+ (JSC::fromCharCodeThunkGenerator):
+ * jit/ThunkGenerators.h:
+ * runtime/SmallStrings.h:
+ (JSC::SmallStrings::singleCharacterStrings):
+ * runtime/StringConstructor.cpp:
+ (JSC::StringConstructor::StringConstructor):
+
+2010-04-27 Thomas Zander <t.zander@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Fix the build on Symbian on Linux using the Makefile based mkspec
+
+ * JavaScriptCore.pri: It is necessary to specify the library search path
+ when linking against JavaScriptCore.
+
+2010-04-21 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Compile fix for Visual Studio 2010
+ https://bugs.webkit.org/show_bug.cgi?id=37867
+
+ Patch by Prasanth Ullattil <prasanth.ullattil@nokia.com>
+
+ * runtime/Structure.cpp:
+ (JSC::Structure::transitionTableAdd):
+ * wtf/MathExtras.h:
+ * wtf/Platform.h:
+
+2010-04-27 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Rename COMPILER(MSVC7) to COMPILER(MSVC7_OR_LOWER)
+
+ * config.h:
+ (JSC::Structure::transitionTableAdd):
+ * wtf/Assertions.h:
+ * wtf/Atomics.h:
+ * wtf/CurrentTime.h:
+ (WTF::getLocalTime):
+ * wtf/Platform.h:
+ * wtf/StaticConstructors.h:
+ * wtf/StringExtras.h:
+ * wtf/Vector.h:
+ (WTF::::append):
+
+2010-04-15 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
+
+ Reviewed by Tor Arne Vestbø.
+
+ [Qt] Fix Mac build break.
+
+ https://bugs.webkit.org/show_bug.cgi?id=37867
+ - Make sure JavaScriptCore's debug_and_release config follows that
+ of WebCore.
+ - Use different name for JavaScriptCore target in debug and release
+ since they might be written in the same path at the same time on
+ parallel builds
+ - Consolidate the DESTDIR determination logic in JavaScriptCore.pri
+
+ * JavaScriptCore.pri:
+ * JavaScriptCore.pro:
+
+2010-04-21 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] Make sure WebKit is not compiled using C++0x.
+ https://bugs.webkit.org/show_bug.cgi?id=37867
+
+ As the rest of Qt compiles in the C++0x mode, people might start
+ compiling it in this mode. WebKit don't support this yet.
+
+ Patch by Thiago Macieira <thiago.macieira@nokia.com>
+
+ * JavaScriptCore.pro:
+
+2010-04-26 Oliver Hunt <oliver@apple.com>
+
+ Fix windows
+
+ * jit/SpecializedThunkJIT.h:
+ (JSC::SpecializedThunkJIT::argumentToVirtualRegister):
+
+2010-04-26 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Need to support more efficient dispatch of lightweight builtins
+ https://bugs.webkit.org/show_bug.cgi?id=38155
+
+ The problem with calling lightweight builtins is that marshalling
+ the call from the nitro calling convention to the system calling
+ convention is very expensive relative to the cost of the actually
+ evaluating the function. To work around this problem this patch
+ adds the ability to define a custom thunk for a builtin.
+
+ This allows us to use high performance custom implementations of
+ the common and sensible versions of simple builtins. This patch
+ includes a simple (use of which is currently hardcoded) thunk for
+ charCodeAt.
+
+ This adds a JSInterfaceJIT subclass called SpecializedThunkJIT
+ that has helper functions to remove (or at least reduce) the need
+ to have separate thunk implementations for each JSValue encoding.
+
+ * GNUmakefile.am:
+ * JavaScriptCore.pro:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ Many project file updates
+
+ * create_hash_table:
+ Add thunk generation callbacks to the hash tables, currently
+ we hardcode the script to only support charCodeAt
+
+ * jit/JITStubCall.h:
+ * jit/JITStubs.cpp:
+ (JSC::JITThunks::~JITThunks):
+ (JSC::JITThunks::specializedThunk):
+ * jit/JITStubs.h:
+ * jit/SpecializedThunkJIT.h: Added.
+ (JSC::SpecializedThunkJIT::SpecializedThunkJIT):
+ (JSC::SpecializedThunkJIT::loadCellArgument):
+ (JSC::SpecializedThunkJIT::loadJSStringArgument):
+ (JSC::SpecializedThunkJIT::loadInt32Argument):
+ (JSC::SpecializedThunkJIT::appendFailure):
+ (JSC::SpecializedThunkJIT::returnInt32):
+ (JSC::SpecializedThunkJIT::finalize):
+ (JSC::SpecializedThunkJIT::argumentToVirtualRegister):
+ (JSC::SpecializedThunkJIT::tagReturnAsInt32):
+ * jit/ThunkGenerators.cpp: Added.
+ (JSC::ThunkHelpers::stringImplDataOffset):
+ (JSC::ThunkHelpers::jsStringLengthOffset):
+ (JSC::ThunkHelpers::jsStringValueOffset):
+ (JSC::charCodeAtThunkGenerator):
+ * jit/ThunkGenerators.h: Added.
+ * runtime/Executable.h:
+ (JSC::NativeExecutable::NativeExecutable):
+ * runtime/JSFunction.cpp:
+ (JSC::JSFunction::JSFunction):
+ * runtime/JSFunction.h:
+ * runtime/JSGlobalData.h:
+ (JSC::JSGlobalData::getThunk):
+ * runtime/JSString.h:
+ (JSC::):
+ * runtime/JSValue.h:
+ Protect some of the JSVALUE32 and JSVALUE32_64 only constants
+ and function behind appropriate USE() guards to make it harder
+ to use the wrong flags for the target build.
+ * runtime/Lookup.cpp:
+ (JSC::HashTable::createTable):
+ (JSC::setUpStaticFunctionSlot):
+ * runtime/Lookup.h:
+ (JSC::HashEntry::initialize):
+ (JSC::HashEntry::generator):
+ (JSC::HashEntry::):
+ Make the lookup tables use a specialized thunkGenerator
+ if present
+ * wtf/text/StringImpl.h:
+
+2010-04-26 Oliver Hunt <oliver@apple.com>
+
+ Build fix
+
+ * runtime/JSImmediate.h:
+ * runtime/JSValue.h:
+
+2010-04-26 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Factor some basic JS interface logic out of JIT and into a superclass
+ https://bugs.webkit.org/show_bug.cgi?id=38163
+
+ Create JSInterfaceJIT to hold some common low level functions for
+ interacting with the JS RegisterFile. Doing this separately from
+ https://bugs.webkit.org/show_bug.cgi?id=38155 to ease reviewing.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * jit/JIT.h:
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::emitJumpSlowCaseIfNotJSCell):
+ * jit/JSInterfaceJIT.h: Added.
+ (JSC::JSInterfaceJIT::emitLoadJSCell):
+ (JSC::JSInterfaceJIT::emitJumpIfNotJSCell):
+ (JSC::JSInterfaceJIT::emitLoadInt32):
+ (JSC::JSInterfaceJIT::tagFor):
+ (JSC::JSInterfaceJIT::payloadFor):
+ (JSC::JSInterfaceJIT::addressFor):
+
+2010-04-26 Sam Weinig <sam@webkit.org>
+
+ Fix Tiger build.
+
+ * wtf/mac/MainThreadMac.mm:
+ (WTF::isMainThread):
+
+2010-04-26 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ <rdar://problem/7766413>
+
+ Fixed a crash seen when using the JavaScriptCore API with WebKit.
+
+ No layout test because DumpRenderTree doesn't use the JavaScriptCore API
+ in this way.
+
+ * interpreter/RegisterFile.cpp:
+ (JSC::RegisterFile::setGlobalObject):
+ (JSC::RegisterFile::clearGlobalObject):
+ (JSC::RegisterFile::globalObject):
+ * interpreter/RegisterFile.h:
+ (JSC::RegisterFile::RegisterFile): Use WeakGCPtr for managing m_globalObject,
+ since it's a weak pointer. (We never noticed this error before because,
+ in WebKit, global objects always have a self-reference in a global variable,
+ so marking the register file's global variables would keep m_globalObject
+ alive. In the JavaScriptCore API, you can allocate a global object with
+ no self-reference.)
+
+ * runtime/JSActivation.h: Removed unneeded #include.
+
+ * runtime/JSGlobalObject.cpp:
+ (JSC::JSGlobalObject::~JSGlobalObject): Don't use ==, since a weak
+ pointer is 0 when the object it points to runs its destructor.
+
+ * runtime/WeakGCPtr.h:
+ (JSC::WeakGCPtr::clear): Changed to return a bool indicating whether the
+ clear actually happened.
+ (JSC::WeakGCPtr::assign): Changed to forbid assignment of 0 as a shorthand
+ for calling clear(). A client should never clear by assigning 0, since
+ clear() should be conditional on whether the object doing the clearing
+ is still pointed to by the weak pointer. (Otherwise, a zombie object might
+ clear a pointer to a new, valid object.)
+
+2010-04-25 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Maciej Stachowiak.
+
+ Fix for https://bugs.webkit.org/show_bug.cgi?id=38097
+ Disentangle initializing the main thread from initializing threading
+
+ This is the first step in getting rid of the WEB_THREAD #define and
+ paving the way to allowing mac both WebKit and WebKit2 to use the same
+ WebCore.
+
+ * JavaScriptCore.exp: Export initializeMainThread and initializeMainThreadToProcessMainThread.
+ * JavaScriptCore.xcodeproj/project.pbxproj: Sort files.
+
+ * wtf/MainThread.cpp:
+ (WTF::mainThreadInitializationMutex):
+ (WTF::mainThreadFunctionQueueMutex):
+ (WTF::initializeMainThread):
+ (WTF::deprecatedInitializeMainThread):
+ * wtf/MainThread.h:
+ Added Mac only initializeMainThreadToProcessMainThread which sets up callOnMainThread
+ and isMainThead calls to assume that WebCore's main thread is also the
+ process's main thread. Since it is possible that both initializeMainThread
+ and initializeMainThreadToProcessMainThread could be called, the first one called
+ wins (either will work).
+
+ * wtf/Threading.h: Moved to top of file.
+
+ * wtf/ThreadingPthreads.cpp:
+ (WTF::initializeThreading): Remove call to initializeMainThread.
+ * wtf/ThreadingWin.cpp:
+ (WTF::initializeThreading): Ditto.
+ * wtf/gtk/ThreadingGtk.cpp:
+ (WTF::initializeThreading): Ditto.
+
+ * wtf/mac/MainThreadMac.mm:
+ (WTF::initializeMainThreadPlatform):
+ (WTF::initializeMainThreadToProcessMainThread):
+ (WTF::scheduleDispatchFunctionsOnMainThread):
+ (WTF::isMainThread):
+ Add runtime switch between the old behavior of using the system's main
+ thread and a stored pointer to the main thread. Tiger always uses the
+ system's main thread.
+
+ * wtf/qt/ThreadingQt.cpp:
+ (WTF::initializeThreading): Remove call to initializeMainThread.
+ * wtf/win/MainThreadWin.cpp:
+ (WTF::initializeMainThreadPlatform): Add call to initializeCurrentThreadInternal
+ removed from initializeThreading.
+
+2010-04-26 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ Fix a memory leak in the QScriptString.
+
+ QScriptStringPrivate's constructor shouldn't call JSStringRetain as
+ QScriptConverter implicitly pass a JSStringRef ownership.
+
+ [Qt] QScriptStringPrivate c'tor problem
+ https://bugs.webkit.org/show_bug.cgi?id=38110
+
+ * qt/api/qscriptstring_p.h:
+ (QScriptStringPrivate::QScriptStringPrivate):
+
+2010-04-24 Darin Adler <darin@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ REGRESSION (r56560): Crash in parseFloat if passed invalid UTF-16 data
+ https://bugs.webkit.org/show_bug.cgi?id=38083
+ rdar://problem/7901044
+
+ Tests: fast/js/ToNumber.html
+ fast/js/parseFloat.html
+
+ * runtime/JSGlobalObjectFunctions.cpp:
+ (JSC::parseInt): Added a FIXME comment about a problem I noticed.
+ (JSC::parseFloat): Added a FIXME comment about a problem I noticed;
+ covered by test cases in the test I added.
+ * runtime/UString.cpp:
+ (JSC::UString::toDouble): Added FIXME comments about two problems I
+ noticed; covered by test cases in the tests I added. Added a return
+ statement so we don't crash when illegal UTF-16 sequences are present.
+
+2010-04-24 Anton Muhin <antonm@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ Allow to construct HashTraits<WebCore::QualifiedName>::constructDeletedValue
+
+ Former implementation attempted to use AtomicString(HashTableDeletedValue)
+ however those values cannot be used that way: one cannot construct
+ QualifiedNameImpl out of such AtomicString as we'll try to lookup this string
+ in the table, for example.
+ https://bugs.webkit.org/show_bug.cgi?id=37722
+
+ * wtf/RefPtr.h: expose hash table deleted value
+
+2010-04-23 Sam Weinig <sam@webkit.org>
+
+ Reviewed by David Levin.
+
+ Fix for https://bugs.webkit.org/show_bug.cgi?id=38060
+ Split up Threading.h
+
+ Move bits for of Threading.h into 3 new files.
+ - Atomics.h for atomic operations.
+ - ThreadSafeShared.h for the ThreadSafeShared class.
+ - ThreadingPrimitives.h for the primitives and platform types.
+
+ Basic threading operations (creation, etc.) remain in Threading.h.
+
+ * GNUmakefile.am:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.vcproj/WTF/WTF.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * wtf/Atomics.h: Copied from wtf/Threading.h.
+ * wtf/ThreadSafeShared.h: Copied from wtf/Threading.h.
+ * wtf/Threading.h:
+ * wtf/ThreadingPrimitives.h: Copied from wtf/Threading.h.
+
+2010-04-23 Sam Weinig <sam@webkit.org>
+
+ Fix Qt build.
+
+ * wtf/qt/MainThreadQt.cpp: #include <QThread>
+
+2010-04-22 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Anders Carlsson.
+
+ Fix for https://bugs.webkit.org/show_bug.cgi?id=38022
+ Move isMainThread predicate function to MainThread.h
+
+ * wtf/MainThread.cpp:
+ (WTF::initializeMainThread):
+ (WTF::isMainThread):
+ * wtf/MainThread.h:
+ * wtf/Threading.h:
+ * wtf/ThreadingPthreads.cpp:
+ (WTF::initializeThreading):
+ * wtf/ThreadingWin.cpp:
+ (WTF::initializeThreading):
+ * wtf/gtk/ThreadingGtk.cpp:
+ (WTF::initializeThreading):
+ * wtf/mac/MainThreadMac.mm:
+ (WTF::initializeMainThreadPlatform):
+ (WTF::isMainThread):
+ * wtf/qt/MainThreadQt.cpp:
+ (WTF::isMainThread):
+ * wtf/qt/ThreadingQt.cpp:
+ (WTF::initializeThreading):
+ * wtf/text/AtomicString.cpp:
+
+2010-04-23 Gabor Rapcsanyi <rgabor@inf.u-szeged.hu>
+
+ Reviewed by Laszlo Gombos.
+
+ Add RVCT support for Linux
+
+ Developed in cooperation with Gabor Loki.
+
+ * API/JSStringRef.h:
+ * jit/ExecutableAllocator.h:
+ * jit/ExecutableAllocatorPosix.cpp:
+ (JSC::ExecutableAllocator::cacheFlush):
+ * jit/JITStubs.cpp:
+ * wtf/MathExtras.h:
+ * wtf/unicode/qt4/UnicodeQt4.h:
+
+2010-04-23 Patrick Gansterer <paroga@paroga.com>
+
+ Reviewed by Laszlo Gombos.
+
+ [WIN] Move OwnPtrWin.cpp into platform specific folder.
+ https://bugs.webkit.org/show_bug.cgi?id=38042
+
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.vcproj/WTF/WTF.vcproj:
+ * wtf/OwnPtrWin.cpp: Removed.
+ * wtf/win/OwnPtrWin.cpp: Copied from JavaScriptCore/wtf/OwnPtrWin.cpp.
+
+2010-04-23 Patrick Gansterer <paroga@paroga.com>
+
+ Reviewed by Laszlo Gombos.
+
+ [BREWMP] Move OwnPtrBrew.cpp into platform specific folder.
+ https://bugs.webkit.org/show_bug.cgi?id=38042
+
+ * wtf/OwnPtrBrew.cpp: Removed.
+ * wtf/brew/OwnPtrBrew.cpp: Copied from JavaScriptCore/wtf/OwnPtrBrew.cpp.
+
+2010-04-22 Steve Block <steveblock@google.com>
+
+ Reviewed by Adam Barth.
+
+ Update Android to use isfinite, isinf, isnan and signbit from namespace std.
+ https://bugs.webkit.org/show_bug.cgi?id=37948
+
+ * wtf/MathExtras.h:
+
+2010-04-22 Fumitoshi Ukai <ukai@chromium.org>
+
+ Unreviewed build fix.
+
+ * wtf/MD5.cpp: fix include path of CString.h
+
+2010-04-22 Fumitoshi Ukai <ukai@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ MD5 is required for WebSocket new protocol implementation
+ https://bugs.webkit.org/show_bug.cgi?id=37913
+
+ * GNUmakefile.am:
+ * JavaScriptCore.exp:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.pro:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/WTF/WTF.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * wtf/MD5.cpp: Added.
+ * wtf/MD5.h: Added.
+
+2010-04-22 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (build fix).
+ Errk, accidentally committed commenting out two ASSERTs! reverting.
+
+ * runtime/Collector.cpp:
+ (JSC::Heap::protect):
+ (JSC::Heap::unprotect):
+
+2010-04-22 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ https://bugs.webkit.org/show_bug.cgi?id=38006
+ Change lifetime of JSC::IdentifierTables used by WebCores to match AtomicStringTable
+
+ Presently JSC's IdentifierTables are owned by the JSGlobalData. For
+ JSGlobalData objects created via the API this should continue to be the case,
+ but for the JSGlobalData objects used by WebCore (the main thread's common
+ global data, and those for workers) use a IdentifierTable provided (and owned)
+ by wtfThreadData. This allow the lifetime of these IdentifierTable to match
+ those of the corresponding AtomicStringTables.
+
+ * API/APIShims.h:
+ (JSC::APIEntryShim::APIEntryShim):
+ * API/JSContextRef.cpp:
+ (JSContextGroupCreate):
+ * runtime/Collector.cpp:
+ (JSC::Heap::protect):
+ (JSC::Heap::unprotect):
+ (JSC::Heap::markRoots):
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData):
+ (JSC::JSGlobalData::~JSGlobalData):
+ (JSC::JSGlobalData::createContextGroup):
+ (JSC::JSGlobalData::create):
+ (JSC::JSGlobalData::sharedInstance):
+ * runtime/JSGlobalData.h:
+ (JSC::JSGlobalData::):
+ (JSC::JSGlobalData::isSharedInstance):
+ * runtime/JSLock.cpp:
+ (JSC::JSLock::JSLock):
+ (JSC::JSLock::lock):
+ (JSC::JSLock::unlock):
+ (JSC::JSLock::DropAllLocks::DropAllLocks):
+ * wtf/WTFThreadData.cpp:
+ (WTF::WTFThreadData::WTFThreadData):
+ (WTF::WTFThreadData::~WTFThreadData):
+
+2010-04-22 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r58110.
+ http://trac.webkit.org/changeset/58110
+ https://bugs.webkit.org/show_bug.cgi?id=38007
+
+ Caused an internal compiler error on Qt (Requested by abarth
+ on #webkit).
+
+ * wtf/MathExtras.h:
+
+2010-04-22 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (windows build fix).
+
+ * API/JSWeakObjectMapRefPrivate.cpp:
+
+2010-04-22 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (windows build fix).
+
+ * API/JSBase.cpp:
+ * API/JSCallbackObject.cpp:
+
+2010-04-22 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ https://bugs.webkit.org/show_bug.cgi?id=37978
+ Unify JSC::IdentifierTable and WebCore::AtomicStringTable implementations.
+
+ These two classes both implement a HashSet of uniqued StringImpls, with
+ translator classes to avoid unnecessary object creation. The only difference
+ between the classes is which flag (isIdentifier or inTable) is set.
+ Combine the two classes using a template predicated on which flag to use.
+
+ New class AtomicStringTable created, containing all the goodness from
+ IdentifierTable & AtomicStringTable, expect for Identifier's literalTable,
+ which has been moved onto JSGlobalData. Removed duplicate string translator
+ classes. Renamed StringImpl's inTable flag to more explicit 'isAtomic',
+ and set this on the empty string (which matches Identifier behaviour, and
+ removes a redundant check for zero-length).
+
+ * GNUmakefile.am:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.vcproj/WTF/WTF.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * runtime/Identifier.cpp:
+ (JSC::createLiteralTable):
+ (JSC::deleteLiteralTable):
+ (JSC::Identifier::add):
+ (JSC::Identifier::addSlowCase):
+ * runtime/Identifier.h:
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData):
+ (JSC::JSGlobalData::~JSGlobalData):
+ * runtime/JSGlobalData.h:
+ * wtf/WTFThreadData.cpp:
+ (WTF::WTFThreadData::WTFThreadData):
+ (WTF::WTFThreadData::~WTFThreadData):
+ * wtf/WTFThreadData.h:
+ (WTF::WTFThreadData::atomicStringTable):
+ * wtf/text/AtomicString.cpp:
+ (WebCore::table):
+ (WebCore::operator==):
+ (WebCore::AtomicString::add):
+ (WebCore::AtomicString::find):
+ (WebCore::AtomicString::remove):
+ * wtf/text/AtomicStringTable.h: Added.
+ (WTF::CStringTranslator::hash):
+ (WTF::CStringTranslator::equal):
+ (WTF::CStringTranslator::translate):
+ (WTF::UCharBufferTranslator::hash):
+ (WTF::UCharBufferTranslator::equal):
+ (WTF::UCharBufferTranslator::translate):
+ (WTF::HashAndCharactersTranslator::hash):
+ (WTF::HashAndCharactersTranslator::equal):
+ (WTF::HashAndCharactersTranslator::translate):
+ (WTF::IdentifierOrAtomicStringTable::remove):
+ (WTF::::~IdentifierOrAtomicStringTable):
+ (WTF::::add):
+ (WTF::::find):
+ * wtf/text/StringImpl.cpp:
+ (WebCore::StringImpl::~StringImpl):
+ * wtf/text/StringImpl.h:
+ (WebCore::StringImpl::isAtomic):
+ (WebCore::StringImpl::setIsAtomic):
+ (WebCore::equal):
+ * wtf/text/StringImplBase.h:
+ (WTF::StringImplBase::StringImplBase):
+
+2010-04-22 Steve Block <steveblock@google.com>
+
+ Reviewed by Adam Barth.
+
+ Update Android to use isfinite, isinf, isnan and signbit from namespace std.
+ https://bugs.webkit.org/show_bug.cgi?id=37948
+
+ * wtf/MathExtras.h:
+
+2010-04-22 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] Remove dependency of JSC to QtGui
+ https://bugs.webkit.org/show_bug.cgi?id=37867
+
+ The patch also make sure that hal.h is in the include path on Symbian.
+ The dependency to QtGui took care of that before.
+
+ Patch by Thiago Macieira <thiago.macieira@nokia.com>
+ and Rohan McGovern <rohan.mcgovern@nokia.com>
+
+ * JavaScriptCore.pri:
+ * JavaScriptCore.pro:
+
+2010-04-22 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
+
+ Reviewed by Tor Arne Vestbø.
+
+ [Qt] Corrects symbols visibility for JavaScriptCore.
+
+ https://bugs.webkit.org/show_bug.cgi?id=37867
+
+ * JavaScriptCore.pro:
+
+2010-04-22 Gabor Loki <loki@webkit.org>
+
+ Reviewed by Gavin Barraclough.
+
+ Use BLX and BX to keep happy the return stack predictor above ARMv4
+ https://bugs.webkit.org/show_bug.cgi?id=37862
+
+ Inspired by Jacob Bramley's patch from JaegerMonkey
+
+ * assembler/ARMAssembler.cpp:
+ (JSC::ARMAssembler::executableCopy):
+ * assembler/ARMAssembler.h:
+ (JSC::ARMAssembler::):
+ (JSC::ARMAssembler::bx):
+ (JSC::ARMAssembler::blx):
+ (JSC::ARMAssembler::loadBranchTarget):
+ (JSC::ARMAssembler::jmp):
+ (JSC::ARMAssembler::getLdrImmAddress):
+ * assembler/MacroAssemblerARM.h:
+ (JSC::MacroAssemblerARM::jump):
+ (JSC::MacroAssemblerARM::nearCall):
+ (JSC::MacroAssemblerARM::call):
+ (JSC::MacroAssemblerARM::ret):
+ (JSC::MacroAssemblerARM::prepareCall):
+ (JSC::MacroAssemblerARM::call32):
+
+2010-04-21 Andy Estes <aestes@apple.com>
+
+ Rubber stamped by Mark Rowe.
+
+ Export WTF::deleteOwnedPtr(HFONT).
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-04-21 Gavin Barraclough <barraclough@apple.com>
+
+ Rubber Stamped by Oliver Hunt.
+
+ Make SmallStrings store an array of RefPtr<StringImpl>,
+ instead of a direct array of StringImpls. This allows
+ us to remove a friend (and a layering violation) from
+ WTF::StringImpl, and makes it so that all StringImpls
+ are individually heap allocated.
+
+ * runtime/SmallStrings.cpp:
+ (JSC::SmallStringsStorage::rep):
+ (JSC::SmallStringsStorage::SmallStringsStorage):
+ * wtf/text/StringImpl.h:
+
+2010-04-21 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ Fix for https://bugs.webkit.org/show_bug.cgi?id=37937
+ Wean JavaScriptCore off calls to isMainThread()
+
+ - Replace use of isMainThread() for interpreter reentry checks
+ with a stored value on the JSGlobalData.
+ - Replace use of isMainThread() for useMainThread only check in the
+ collector with a stored exclusive thread.
+
+ * API/JSContextRef.cpp:
+ (JSContextGroupCreate):
+ Always default to a small stack type for uses of the JSC API. It is
+ unlikely that the interpreter reentry required on the web will be as
+ important for other uses of JavaScriptCore.
+
+ * JavaScriptCore.exp:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ Update exports.
+
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::execute):
+ (JSC::Interpreter::prepareForRepeatCall):
+ Use new stored JSGlobalData::maxReentryDepth instead of isMainThread().
+
+ * interpreter/Interpreter.h:
+ Rename MaxMainThreadReentryDepth to MaxLargeThreadReentryDepth and
+ MaxSecondaryThreadReentryDepth to MaxSmallThreadReentryDepth.
+
+ * jsc.cpp:
+ (main): Use the a large stack for jsc since it is always using the
+ main thread.
+
+ * runtime/ArrayPrototype.cpp:
+ (JSC::arrayProtoFuncToString):
+ (JSC::arrayProtoFuncToLocaleString):
+ (JSC::arrayProtoFuncJoin):
+ Use new stored JSGlobalData::maxReentryDepth instead of isMainThread().
+
+ * runtime/Collector.cpp:
+ (JSC::Heap::registerThread):
+ Use the concept of making JSC run on an exclusiveThread instead of
+ forcing a mainThreadOnly assertion.
+
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData):
+ (JSC::JSGlobalData::createNonDefault):
+ (JSC::JSGlobalData::create):
+ (JSC::JSGlobalData::createLeaked):
+ (JSC::JSGlobalData::sharedInstance):
+ * runtime/JSGlobalData.h:
+ Add ThreadStackType argument to JSGlobalData constructors and set
+ maxReentryDepth based on it.
+
+2010-04-21 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (windows build fix pt. 3).
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-04-21 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (windows build fix pt. 2).
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-04-21 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (Qt build fix).
+
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.pro:
+ * wtf/qt/StringQt.cpp: Copied from WebCore/platform/text/qt/StringQt.cpp.
+
+2010-04-21 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (windows build fix).
+
+ * API/JSValueRef.cpp:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * runtime/Identifier.cpp:
+ (JSC::IdentifierTable::~IdentifierTable):
+ (JSC::IdentifierTable::add):
+ * runtime/Identifier.h:
+ * wtf/WTFThreadData.h:
+ (JSC::IdentifierTable::remove):
+ (JSC::IdentifierTable::literalTable):
+ * wtf/text/StringImpl.cpp:
+ (WebCore::StringImpl::~StringImpl):
+
+2010-04-20 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt, Darin Adler.
+
+ Bug 37906 - Remove JSC::UStringImpl; unify with StringImpl.
+
+ JSC::UStringImpl and WebCore::StringImpl (soon to be renamed to
+ WTF::StringImpl) are almost identical. Remove duplication of code by unifying
+ the two, move missing features from UStringImpl into StringImpl & delete the
+ class UStringImpl.
+
+ * API/JSClassRef.cpp:
+ * API/JSContextRef.cpp:
+ * GNUmakefile.am:
+ * JavaScriptCore.exp:
+ * JavaScriptCore.pro:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * bytecode/EvalCodeCache.h:
+ * bytecode/JumpTable.cpp:
+ * profiler/ProfileNode.cpp:
+ * runtime/Identifier.cpp:
+ (JSC::Identifier::add):
+ * runtime/Identifier.h:
+ (JSC::Identifier::equal):
+ * runtime/UString.cpp:
+ * runtime/UString.h:
+ (WTF::):
+ * runtime/UStringImpl.cpp: Removed.
+ * runtime/UStringImpl.h:
+ * wtf/text/StringHash.h:
+ (WebCore::StringHash::equal):
+ (WebCore::CaseFoldingHash::equal):
+ * wtf/text/StringImpl.cpp:
+ (WebCore::StringImpl::~StringImpl):
+ (WebCore::StringImpl::empty):
+ (WebCore::StringImpl::sharedBuffer):
+ (WebCore::equal):
+ * wtf/text/StringImpl.h:
+ (WebCore::StringImpl::StringImpl):
+ (WebCore::StringImpl::create):
+ (WebCore::StringImpl::tryCreateUninitialized):
+ (WebCore::StringImpl::cost):
+ (WebCore::StringImpl::isIdentifier):
+ (WebCore::StringImpl::setIsIdentifier):
+ (WebCore::StringImpl::computeHash):
+ (WebCore::StringImpl::copyChars):
+ (WebCore::StringImpl::):
+
+2010-04-21 Patrick Gansterer <paroga@paroga.com>
+
+ Reviewed by Darin Adler.
+
+ Added missing #include "Lookup.h" in LUT source files.
+ https://bugs.webkit.org/show_bug.cgi?id=37903
+
+ * runtime/ArrayPrototype.cpp:
+ * runtime/DatePrototype.cpp:
+ * runtime/JSONObject.cpp:
+ * runtime/MathObject.cpp:
+ * runtime/NumberConstructor.cpp:
+ * runtime/RegExpConstructor.cpp:
+ * runtime/RegExpObject.cpp:
+ * runtime/StringPrototype.cpp:
+
+2010-04-21 Gustavo Sverzut Barbieri <barbieri@profusion.mobi>
+
+ Reviewed by Nikolas Zimmermann.
+
+ Add missing EFL JavaScriptCore file.
+ http://webkit.org/b/37854
+
+ * wtf/efl: Added.
+ * wtf/efl/MainThreadEfl.cpp: Added.
+ (WTF::initializeMainThreadPlatform):
+ (WTF::timeoutFired):
+ (WTF::scheduleDispatchFunctionsOnMainThread):
+
+2010-04-20 Xan Lopez <xlopez@igalia.com>
+
+ Another attempt to fix the build.
+
+ * GNUmakefile.am:
+
+2010-04-20 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ [ES5] RegExp literals are constants that should be persistent across multiple function calls.
+ https://bugs.webkit.org/show_bug.cgi?id=37908
+
+ Dump the separate RegExp constant pool, and just use the standard JS constant pool
+ in codeblock. This allows us to drop op_new_regexp and all associated code as well.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dump):
+ (JSC::CodeBlock::shrinkToFit):
+ * bytecode/CodeBlock.h:
+ * bytecode/Opcode.h:
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::emitLoad):
+ * bytecompiler/BytecodeGenerator.h:
+ * bytecompiler/NodesCodegen.cpp:
+ (JSC::RegExpNode::emitBytecode):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::privateExecute):
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileMainPass):
+ * jit/JIT.h:
+ * jit/JITOpcodes.cpp:
+ * jit/JITStubs.cpp:
+ * jit/JITStubs.h:
+ (JSC::):
+
+2010-04-20 Oliver Hunt <oliver@apple.com>
+
+ Fix license on create_regex_tables
+
+ * create_regex_tables:
+
+2010-04-20 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by NOBODY (Build fix).
+
+ Fix gtk
+
+ * GNUmakefile.am:
+ * make-generated-sources.sh:
+
+2010-04-20 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Bug 37895 - Share common code from UStringImplBase with StringImpl
+
+ The implementation of StringImpl & UStringImpl is very similar. Restructure
+ StringImpl to match UStringImpl, moving the flags and length into a base class,
+ so that this can be shared between both string types to increase code reuse.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * runtime/RopeImpl.h:
+ (JSC::RopeImpl::RopeImpl):
+ * runtime/UStringImpl.h:
+ (JSC::UStringImpl::UStringImpl):
+ * wtf/text/StringImpl.h:
+ (WebCore::StringImpl::StringImpl):
+ (WebCore::StringImpl::characters):
+ * wtf/text/StringImplBase.h: Copied from JavaScriptCore/runtime/UStringImpl.h.
+ (WTF::StringImplBase::length):
+ (WTF::StringImplBase::operator new):
+ (WTF::StringImplBase::StringImplBase):
+
+2010-04-20 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Autogenerate yarr character tables
+ https://bugs.webkit.org/show_bug.cgi?id=37877
+
+ Use a python script to automatically generate character tables
+ for the builtin YARR character classes. This allows us to generate
+ actual tables as well, by using these tables we can both increase
+ performance of the check (for complex builtins) and reduce the actual
+ code size.
+
+ 4-8% win on string-unpack-code, but lots of noise on other tests so
+ i'm only confident saying its a 1% win overall.
+
+ * DerivedSources.make:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * assembler/AbstractMacroAssembler.h:
+ (JSC::AbstractMacroAssembler::ExtendedAddress::ExtendedAddress):
+ * assembler/MacroAssembler.h:
+ (JSC::MacroAssembler::branchTest8):
+ * assembler/MacroAssemblerX86Common.h:
+ (JSC::MacroAssemblerX86Common::branchTest8):
+ * assembler/MacroAssemblerX86_64.h:
+ (JSC::MacroAssemblerX86_64::branchTest8):
+ * assembler/X86Assembler.h:
+ (JSC::X86Assembler::cmpb_im):
+ (JSC::X86Assembler::testb_im):
+ * bytecode/SamplingTool.cpp:
+ (JSC::SamplingTool::dump):
+ * create_regex_tables: Added.
+ * yarr/RegexCompiler.cpp:
+ (JSC::Yarr::CharacterClassConstructor::charClass):
+ * yarr/RegexJIT.cpp:
+ (JSC::Yarr::RegexGenerator::matchCharacterClass):
+ (JSC::Yarr::RegexGenerator::generatePatternCharacterGreedy):
+ (JSC::Yarr::RegexGenerator::generatePatternCharacterNonGreedy):
+ (JSC::Yarr::RegexGenerator::generateCharacterClassGreedy):
+ * yarr/RegexPattern.h:
+ (JSC::Yarr::CharacterClassTable::create):
+ (JSC::Yarr::CharacterClassTable::CharacterClassTable):
+ (JSC::Yarr::CharacterClass::CharacterClass):
+
+2010-04-20 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (speculative windows fix - missed a bit!).
+
+ * wtf/text/AtomicString.h:
+
+2010-04-20 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (speculative windows fix).
+
+ * wtf/text/AtomicString.h:
+
+2010-04-20 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (windows build fix).
+
+ Add missing .def file entries.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-04-20 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Bug 37869 - Move URopeImpl to its own .h/.cpp
+
+ Currently Ropes are implemented by the class URopeImpl, which is defined in
+ UStringImpl.h, and then typedefed to the name JSString::Rope. Remove the
+ typedef, and rename all uses of URopeImpl and JSString::Rope to just RopeImpl.
+
+ Move RopeImpl to its own header, and remove all remaining references to ropes
+ from UStringImpl (rename UStringOrRopeImpl to UStringImplBase, rename or move
+ the isRope & deref methods from UStringOrRopeImpl).
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * runtime/JSString.cpp:
+ (JSC::JSString::resolveRope):
+ * runtime/JSString.h:
+ (JSC::):
+ (JSC::RopeBuilder::JSString):
+ (JSC::RopeBuilder::~JSString):
+ (JSC::RopeBuilder::appendStringInConstruct):
+ (JSC::RopeBuilder::JSStringFinalizerStruct::):
+ * runtime/RopeImpl.cpp: Copied from JavaScriptCore/runtime/UStringImpl.cpp.
+ (JSC::RopeImpl::derefFibersNonRecursive):
+ (JSC::RopeImpl::destructNonRecursive):
+ * runtime/RopeImpl.h: Copied from JavaScriptCore/runtime/UStringImpl.h.
+ (JSC::RopeImpl::tryCreateUninitialized):
+ (JSC::RopeImpl::isRope):
+ (JSC::RopeImpl::deref):
+ (JSC::RopeImpl::RopeImpl):
+ * runtime/UStringImpl.cpp:
+ * runtime/UStringImpl.h:
+ (JSC::UStringImplBase::isInvalid):
+ (JSC::UStringImplBase::ref):
+ (JSC::UStringImplBase::UStringImplBase):
+ (JSC::UStringImplBase::):
+ (JSC::UStringImpl::UStringImpl):
+
+2010-04-20 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Bug 37828 - Move WebCore's String classes to WTF
+
+ Move these classes up to WTF so they are available to all clients of WTF (in
+ particular JSC).
+
+ As a first patch, making the most minimal change possible, since this patch
+ could easily grow rather large since we'll have to change every class forward
+ declaration ( e.g. every "namespace WebCore { class String; }" much change to
+ "namespace WTF { class String; }").
+
+ Moving the files, but leaving the classes logically in the WebCore namespace -
+ which is technically a layering violation - I'll come back and fix this up in a
+ subsequent patch.
+
+ * Android.mk:
+ * Android.v8.wtf.mk:
+ * GNUmakefile.am:
+ * JavaScriptCore.exp:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.pro:
+ * JavaScriptCore.vcproj/WTF/WTF.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * config.h:
+ * wtf/StaticConstructors.h: Copied from WebCore/platform/StaticConstructors.h.
+ * wtf/text/AtomicString.cpp: Copied from WebCore/platform/text/AtomicString.cpp.
+ * wtf/text/AtomicString.h: Copied from WebCore/platform/text/AtomicString.h.
+ * wtf/text/AtomicStringImpl.h: Copied from WebCore/platform/text/AtomicStringImpl.h.
+ * wtf/text/StringBuffer.h: Copied from WebCore/platform/text/StringBuffer.h.
+ * wtf/text/StringHash.h: Copied from WebCore/platform/text/StringHash.h.
+ * wtf/text/StringImpl.cpp: Copied from WebCore/platform/text/StringImpl.cpp.
+ * wtf/text/StringImpl.h: Copied from WebCore/platform/text/StringImpl.h.
+ * wtf/text/WTFString.cpp: Copied from WebCore/platform/text/String.cpp.
+ (WebCore::charactersToFloat):
+ * wtf/text/WTFString.h: Copied from WebCore/platform/text/PlatformString.h.
+
+2010-04-20 Csaba Osztrogonác <ossy@webkit.org>
+
+ [Qt] Unreviewed speculative buildfix for WinCE after r57882
+ https://bugs.webkit.org/show_bug.cgi?id=37701
+
+ * JavaScriptCore.pri: missing wince* case added.
+
+2010-04-20 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (build fix).
+ Speculative Chromium/Win build fix, attempt #2.
+
+ * config.h:
+
+2010-04-20 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (build fix).
+ Speculative Chromium/Win build fix.
+
+ * config.h: JS_EXPORTDATA should do nothing on !JSC builds.
+
+2010-04-20 Csaba Osztrogonác <ossy@webkit.org>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Target(WebCore,jsc,...) must depends on static library of JavaScriptCore
+ https://bugs.webkit.org/show_bug.cgi?id=37701
+
+ * JavaScriptCore.pri: dependency added.
+
+2010-04-20 Gavin Barraclough <barraclough@apple.com>
+
+ Rubber stamped by Maciej Stachowiak (relanding r57829).
+ Added missing JS_EXPORTDATA
+
+ * API/APIShims.h:
+ (JSC::APIEntryShimWithoutLock::APIEntryShimWithoutLock):
+ (JSC::APIEntryShimWithoutLock::~APIEntryShimWithoutLock):
+ (JSC::APICallbackShim::APICallbackShim):
+ (JSC::APICallbackShim::~APICallbackShim):
+ * API/JSContextRef.cpp:
+ * Android.mk:
+ * Android.v8.wtf.mk:
+ * GNUmakefile.am:
+ * JavaScriptCore.exp:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.pro:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/WTF/WTF.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * runtime/Completion.cpp:
+ (JSC::checkSyntax):
+ (JSC::evaluate):
+ * runtime/Identifier.cpp:
+ (JSC::Identifier::remove):
+ (JSC::Identifier::checkCurrentIdentifierTable):
+ * runtime/Identifier.h:
+ * runtime/InitializeThreading.cpp:
+ (JSC::initializeThreadingOnce):
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::create):
+ * wtf/WTFThreadData.cpp: Copied from JavaScriptCore/wtf/WTFThreadData.cpp.
+ * wtf/WTFThreadData.h: Copied from JavaScriptCore/wtf/WTFThreadData.h.
+
+2010-04-19 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (rolling out r57829).
+ This broke windows.
+
+ * API/APIShims.h:
+ (JSC::APIEntryShimWithoutLock::APIEntryShimWithoutLock):
+ (JSC::APIEntryShimWithoutLock::~APIEntryShimWithoutLock):
+ (JSC::APICallbackShim::APICallbackShim):
+ (JSC::APICallbackShim::~APICallbackShim):
+ * API/JSContextRef.cpp:
+ * Android.mk:
+ * Android.v8.wtf.mk:
+ * GNUmakefile.am:
+ * JavaScriptCore.exp:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.pro:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/WTF/WTF.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * runtime/Completion.cpp:
+ (JSC::checkSyntax):
+ (JSC::evaluate):
+ * runtime/Identifier.cpp:
+ (JSC::Identifier::remove):
+ (JSC::Identifier::checkCurrentIdentifierTable):
+ (JSC::createIdentifierTableSpecificCallback):
+ (JSC::createIdentifierTableSpecific):
+ * runtime/Identifier.h:
+ (JSC::ThreadIdentifierTableData::ThreadIdentifierTableData):
+ (JSC::defaultIdentifierTable):
+ (JSC::setDefaultIdentifierTable):
+ (JSC::currentIdentifierTable):
+ (JSC::setCurrentIdentifierTable):
+ (JSC::resetCurrentIdentifierTable):
+ * runtime/InitializeThreading.cpp:
+ (JSC::initializeThreadingOnce):
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::create):
+ * wtf/WTFThreadData.cpp: Removed.
+ * wtf/WTFThreadData.h: Removed.
+
+2010-04-19 Douglas Gregor <dgregor@apple.com>
+
+ Reviewed and landed by Anders Carlsson.
+
+ * runtime/UStringImpl.h:
+ Fix class/struct declaration mismatches.
+
+2010-04-19 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Beth Dakin.
+
+ Checked in these tests I wrote becuase Balazs Kelemen wanted to use them.
+
+ * tests/perf: Added.
+ * tests/perf/bench-allocate-nonretained.js: Added.
+ * tests/perf/bench-allocate-retained.js: Added.
+
+2010-04-19 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (windows build fix).
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-04-16 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ https://bugs.webkit.org/show_bug.cgi?id=37745
+ Move string uniquing tables to (new) WTFThreadData class.
+
+ Remove AtomicString's dependency on ThreadGlobalData so that we can move
+ WebCore's string classes up to WTF.
+
+ WTFThreadData.cpp/.h are based on ThreadGlobalData from WebCore.
+ Moved JSC & WebCore's string uniquing tables to this class.
+
+ This patch introduces a temporary layering violation in providing forward
+ declarations of classes from JSC and WTF; this will be resolved as we move
+ more string code up to WTF.
+
+ * API/APIShims.h:
+ (JSC::APIEntryShimWithoutLock::APIEntryShimWithoutLock):
+ (JSC::APIEntryShimWithoutLock::~APIEntryShimWithoutLock):
+ (JSC::APICallbackShim::APICallbackShim):
+ (JSC::APICallbackShim::~APICallbackShim):
+ * API/JSContextRef.cpp:
+ * JavaScriptCore.exp:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * runtime/Completion.cpp:
+ (JSC::checkSyntax):
+ (JSC::evaluate):
+ * runtime/Identifier.cpp:
+ (JSC::Identifier::remove):
+ (JSC::Identifier::checkCurrentIdentifierTable):
+ * runtime/Identifier.h:
+ * runtime/InitializeThreading.cpp:
+ (JSC::initializeThreadingOnce):
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::create):
+ * wtf/WTFThreadData.cpp: Copied from WebCore/platform/ThreadGlobalData.cpp.
+ (WTF::WTFThreadData::WTFThreadData):
+ (WTF::WTFThreadData::~WTFThreadData):
+ * wtf/WTFThreadData.h: Copied from WebCore/platform/ThreadGlobalData.h.
+ (WTF::WTFThreadData::atomicStringTable):
+ (WTF::WTFThreadData::initializeIdentifierTable):
+ (WTF::WTFThreadData::currentIdentifierTable):
+ (WTF::WTFThreadData::setCurrentIdentifierTable):
+ (WTF::WTFThreadData::resetCurrentIdentifierTable):
+ (WTF::wtfThreadData):
+
+2010-04-19 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Build fix for WinCE.
+
+ Moved the include of the non-existing errno.h header file inside
+ platform guard macros.
+
+ * jit/ExecutableAllocatorFixedVMPool.cpp:
+
+2010-04-18 Kwang Yul Seo <skyul@company100.net>
+
+ Reviewed by Laszlo Gombos.
+
+ [WINCE] Don't define WTF_CPU_MIDDLE_ENDIAN=1
+ https://bugs.webkit.org/show_bug.cgi?id=37434
+
+ Windows CE supports little-endian format only, so don't define
+ WTF_CPU_MIDDLE_ENDIAN=1.
+
+ * wtf/Platform.h:
+
+2010-04-18 Simon Hausmann <simon.hausmann@nokia.com>
+
+ Reviewed by Laszlo Gombos.
+
+ [Qt] Fix JavaScriptCore's include path for WinCE builds
+
+ https://bugs.webkit.org/show_bug.cgi?id=36751
+
+ * JavaScriptCore.pri:
+
+2010-04-16 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by nobody, build fix.
+
+2010-04-16 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by nobody, build fix.
+
+2010-04-16 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Bug 37730 - Remove JSC::UString dependencies from WebCore::StringImpl
+ (Following on from bug #37675).
+
+ Make the argument ordering for UStringImpl's constructor & create
+ methods match, when passed a shared buffer.
+
+ * JavaScriptCore.exp:
+ * runtime/UStringImpl.cpp:
+ (JSC::UStringImpl::create):
+ * runtime/UStringImpl.h:
+
+2010-04-15 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ Fix memory leak in QScriptEngine::evaluate().
+
+ QScriptEnginePrivate::evaluate should release temporary variables.
+
+ [Qt] QScriptEngine::evaluate has memory leak.
+ https://bugs.webkit.org/show_bug.cgi?id=37596
+
+ * qt/api/qscriptengine_p.cpp:
+ (QScriptEnginePrivate::evaluate):
+ * qt/api/qscriptengine_p.h:
+
+2010-04-14 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ Fix a memory leak in QScriptValue::inherits.
+
+ [Qt] QScriptValue::inherits has a memory leak.
+ https://bugs.webkit.org/show_bug.cgi?id=37617
+
+ * qt/api/qscriptvalue_p.h:
+ (QScriptValuePrivate::inherits):
+
+2010-04-14 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ Fix a few memory leaks in QScriptEngine.
+
+ Syntax checking caused memory leak, not all temporary variables were released.
+
+ [Qt] Syntax checking in the QtScript cause a memory leak.
+ https://bugs.webkit.org/show_bug.cgi?id=37610
+
+ * qt/api/qscriptengine_p.cpp:
+ (QScriptEnginePrivate::checkSyntax):
+ * qt/api/qscriptsyntaxcheckresult.cpp:
+ (QScriptSyntaxCheckResultPrivate::errorMessage):
+ (QScriptSyntaxCheckResultPrivate::errorLineNumber):
+
+2010-04-14 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ Fix memory leak inside QScriptEnginePrivate::makeJSValue.
+
+ QScriptEnginePrivate::makeJSValue should release temporary JSStringRef variable.
+
+ [Qt] tst_QScriptValue::toString has a memory leak.
+ https://bugs.webkit.org/show_bug.cgi?id=37598
+
+ * qt/api/qscriptengine_p.h:
+ (QScriptEnginePrivate::makeJSValue):
+
+2010-04-14 Peter Varga <pvarga@inf.u-szeged.hu>
+
+ Reviewed by Geoffrey Garen.
+
+ Move the YARR JIT fallback detection from RegexJIT.cpp to
+ RegexCompiler.cpp.
+
+ https://bugs.webkit.org/show_bug.cgi?id=37571
+
+ * yarr/RegexCompiler.cpp:
+ (JSC::Yarr::RegexPatternConstructor::atomBackReference):
+ (JSC::Yarr::RegexPatternConstructor::quantifyAtom):
+ * yarr/RegexJIT.cpp:
+ (JSC::Yarr::RegexGenerator::generateTerm):
+ (JSC::Yarr::RegexGenerator::RegexGenerator):
+ (JSC::Yarr::jitCompileRegex):
+ * yarr/RegexJIT.h:
+ (JSC::Yarr::RegexCodeBlock::operator!):
+ * yarr/RegexPattern.h:
+ (JSC::Yarr::RegexPattern::RegexPattern):
+ (JSC::Yarr::RegexPattern::reset):
+
+2010-04-14 Kent Hansen <kent.hansen@nokia.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Mac OS X: Use deployment target to determine whether memory tagging should be enabled
+ https://bugs.webkit.org/show_bug.cgi?id=34888
+
+ When building on (Snow) Leopard but targeting Tiger
+ (TARGETING_TIGER defined, BUILDING_ON_TIGER not defined),
+ WebKit would crash on Tiger because the tags passed to mmap
+ caused those function calls to fail.
+
+ Conversely, when building on Tiger but targeting Leopard
+ (BUILDING_ON_TIGER defined, TARGETING_LEOPARD defined), WebKit
+ would crash on Leopard because the tags passed to vm_map and
+ vm_allocate caused those function calls to fail.
+
+ Solution: Use TARGETING_TIGER rather than BUILDING_ON_TIGER to
+ govern the tag definitions. Use the same tags for vm_map and
+ vm_allocate regardless of target, since they work on
+ both. Fall back to the mmap tags that work on Tiger (that is,
+ "no tags") if targeting Tiger, since those tags also work on
+ Leopard.
+
+ * wtf/VMTags.h:
+
+2010-04-12 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
+
+ Reviewed by nobody, build fix.
+
+ [Qt] Build fix for Mac when building with build-webkit --qt
+
+ Specifying no configuration on Mac builds WebCore both in debug
+ and release. JavaScriptCore has to follow this rule as well.
+
+ * JavaScriptCore.pro:
+
+2010-04-11 Mark Rowe <mrowe@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ <rdar://problem/7851332> Fix the build.
+
+ * wtf/FastMalloc.cpp:
+ (WTF::TCMallocStats::): Initialize extra members of malloc_introspection_t to zero.
+
+2010-04-09 Mikhail Naganov <mnaganov@chromium.org>
+
+ Reviewed by Pavel Feldman.
+
+ Make CallIdentifier constructor to handle null urls.
+
+ https://bugs.webkit.org/show_bug.cgi?id=37341
+
+ * profiler/CallIdentifier.h:
+ (JSC::CallIdentifier::CallIdentifier):
+
+2010-04-09 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Fix crashes with package builds in release
+
+ Add NDEBUG to the defines for package build in JavaScriptCore.pri,
+ so that it's consistently used for JavaScriptCore, WebCore, jsc and all
+ other tools using wtf, etc. data structures directly. Mixing NDEBUG with
+ non-NDEBUG builds causes crashes due to differences in data structures when
+ assertions/checks are enabled.
+
+ * JavaScriptCore.pri:
+
+2010-04-09 Patrick Gansterer <paroga@paroga.com>
+
+ Reviewed by Darin Adler.
+
+ Implement NO_RETURN for COMPILER(MSVC).
+ https://bugs.webkit.org/show_bug.cgi?id=33056
+
+ Added NO_RETURN_WITH_VALUE for functions with non-void return type.
+
+ * jsc.cpp:
+ * wtf/AlwaysInline.h:
+ * wtf/FastMalloc.cpp:
+
+2010-04-08 Kwang Yul Seo <skyul@company100.net>
+
+ Reviewed by Simon Hausmann.
+
+ [WINCE] Check if ARM or _ARM_ is defined
+ https://bugs.webkit.org/show_bug.cgi?id=37200
+
+ MSVC defines ARM and _ARM_ for Windows CE ARM. Define WTF_CPU_ARM=1
+ when either ARM or _ARM_ is defined.
+
+ * wtf/Platform.h:
+
+2010-04-08 Csaba Osztrogonác <ossy@webkit.org>
+
+ Reviewed Oliver Hunt.
+
+ [Qt]r57240 broke Qt build (might be a gcc bug)
+ https://bugs.webkit.org/show_bug.cgi?id=37253
+
+ Workaround until fix. On PLATFORM(QT) use inline instead of ALWAYS_INLINE.
+
+ * wtf/PassRefPtr.h: Qt guards added.
+
+2010-04-07 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Anders Carlsson.
+
+ Vector<UString> makes many needless calls to UString::UString and UString::~UString
+
+ Add a VectorTrait<UString> specialisation to allow vector to simply memset/memcpy
+ data around. Only difference from the VectorTrait<RefPtr<T> > traits is the inability
+ to use memset to initialize data.
+
+ * runtime/UString.h:
+ (WTF::):
+
+2010-04-07 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Beat gcc with a clue bat -- force inlining of refIfNotNull and derefIfNotNull
+
+ * wtf/PassRefPtr.h:
+
+2010-04-07 Kwang Yul Seo <skyul@company100.net>
+
+ Reviewed by Darin Adler.
+
+ Replace isprint with isASCIIPrintable
+ https://bugs.webkit.org/show_bug.cgi?id=37223
+
+ WebKit does not use functions in <ctype.h> as they are dependent on the current
+ locale. Use the equivalent functions in <wtf/ASCIICType.h>. isASCIIPrintable
+ replaces isprint.
+
+ * pcre/pcre_exec.cpp:
+ (pchars):
+
+2010-04-07 Enrica Casucci <enrica@apple.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=37219
+
+ This change disables text caret for the iPhone platflorm.
+
+ * wtf/Platform.h: Disabled text caret for iPhone.
+
+2010-04-06 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ REGRESSION: Worker termination via JS timeout may cause worker tests like fast/workers/worker-terminate.html fail.
+ https://bugs.webkit.org/show_bug.cgi?id=36646
+
+ Add a new exception type for forcibly terminating a JavaScript stack.
+ The new exception functions similarly to the
+ InterruptedExecutionException but is conceptually different because
+ execution is terminated instead of just interrupted.
+
+ * GNUmakefile.am:
+ - Added new Terminator.h file.
+ * JavaScriptCore.gypi:
+ - Added new Terminator.h file.
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ - Added new Terminator.h file.
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ - Added new Terminator.h file.
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::throwException):
+ - Fully unwind the stack for TerminatedExecutionException.
+ (JSC::Interpreter::privateExecute):
+ - Check if we've been terminated at the same time we check if we've
+ timed out.
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ - Check if we've been terminated at the same time we check if we've
+ timed out.
+ * runtime/Completion.cpp:
+ - Some exceptions define special completion types so that calls can
+ see why we terminated evaluation.
+ (JSC::evaluate):
+ * runtime/Completion.h:
+ - Define a new completion type for termination.
+ (JSC::):
+ * runtime/ExceptionHelpers.cpp:
+ - Define TerminatedExecutionException and refactor pseudo-RTTI
+ virtual function to be more semantic.
+ (JSC::InterruptedExecutionError::exceptionType):
+ (JSC::TerminatedExecutionError::TerminatedExecutionError):
+ (JSC::TerminatedExecutionError::exceptionType):
+ (JSC::TerminatedExecutionError::toString):
+ (JSC::createTerminatedExecutionException):
+ * runtime/ExceptionHelpers.h:
+ - Entry point for generating a TerminatedExecutionException.
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData):
+ - Add a Terminator object that can be used to asynchronously
+ terminate a JavaScript execution stack.
+ * runtime/JSGlobalData.h:
+ * runtime/JSObject.h:
+ (JSC::JSObject::exceptionType):
+ - Define that, by default, thrown objects have a normal exception
+ type.
+ * runtime/Terminator.h: Added.
+ - Added a new controller object that can be used to terminate
+ execution asynchronously. This object is more or less a
+ glorified bool.
+ (JSC::Terminator::Terminator):
+ (JSC::Terminator::termianteSoon):
+ (JSC::Terminator::shouldTerminate):
+
+2010-04-05 Oliver Hunt <oliver@apple.com>
+
+ And another one.
+
+ * JavaScriptCore.vcproj/jsc/jscCommon.vsprops:
+
+2010-04-05 Oliver Hunt <oliver@apple.com>
+
+ And another build fix.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
+
+2010-04-05 Oliver Hunt <oliver@apple.com>
+
+ Build fix
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+
+2010-04-05 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Support weak maps in JSC
+ https://bugs.webkit.org/show_bug.cgi?id=37132
+
+ Expose an API to allow creation of a map for storing
+ weak JS references.
+
+ * API/JSWeakObjectMapRefInternal.h: Added.
+ (OpaqueJSWeakObjectMap::create):
+ (OpaqueJSWeakObjectMap::map):
+ (OpaqueJSWeakObjectMap::~OpaqueJSWeakObjectMap):
+ (OpaqueJSWeakObjectMap::OpaqueJSWeakObjectMap):
+ * API/JSWeakObjectMapRefPrivate.cpp: Added.
+ * API/JSWeakObjectMapRefPrivate.h: Added.
+ * JavaScriptCore.exp:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * runtime/JSGlobalObject.h:
+ (JSC::JSGlobalObject::registerWeakMap):
+ (JSC::JSGlobalObject::deregisterWeakMap):
+
+2010-04-05 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Symbian] Consolidate Symbian WINSCW environment configuration
+ https://bugs.webkit.org/show_bug.cgi?id=37100
+
+ Move the "undefinition" of WIN32 and _WIN32 from WebCore/config.h
+ to JavaScriptCore/wtf/Platform.h as it is not specific to WebCore.
+
+ PLATFORM(WIN) and OS(WIN) no longer needs to be undefined as
+ undefining WIN32 takes care of it.
+
+ * wtf/Platform.h:
+
+2010-04-03 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ https://bugs.webkit.org/show_bug.cgi?id=37068
+ Change UString to use a 0 rep for null strings instead of a null object.
+
+ No performance impact.
+
+ * JavaScriptCore.exp:
+ * runtime/InternalFunction.cpp:
+ (JSC::InternalFunction::InternalFunction):
+ * runtime/JSString.h:
+ (JSC::RopeBuilder::JSString):
+ * runtime/UString.cpp:
+ (JSC::initializeUString):
+ * runtime/UString.h:
+ (JSC::UString::UString):
+ (JSC::UString::data):
+ (JSC::UString::size):
+ (JSC::UString::isNull):
+ (JSC::UString::isEmpty):
+ (JSC::UString::cost):
+
+2010-04-03 Balazs Kelemen <kb@inf.u-szeged.hu>
+
+ Reviewed by Oliver Hunt.
+
+ Fix uninitalised members in CallLinkInfo and BytecodeGenerator.
+
+ https://bugs.webkit.org/show_bug.cgi?id=36816
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::CodeBlock):
+ * bytecode/CodeBlock.h:
+ (JSC::CallLinkInfo::CallLinkInfo):
+
+2010-04-03 yael aharon <yael.aharon@nokia.com>
+
+ Reviewed by Darin Adler.
+
+ Enable HTMLProgressElement for Safari on OSX
+ https://bugs.webkit.org/show_bug.cgi?id=36961
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2010-04-02 Ruben Van Boxem <vanboxem.ruben@gmail.com>
+
+ Reviewed by Eric Seidel.
+
+ Mingw-w64 fixes for JavaScriptCore
+ https://bugs.webkit.org/show_bug.cgi?id=35607
+
+ * runtime/Collector.cpp: use the msvc code for mingw-w64 (but not mingw-w32)
+ (JSC::Heap::allocateBlock):
+ (JSC::Heap::freeBlockPtr):
+ (JSC::currentThreadStackBase):
+ (JSC::currentThreadStackBase):
+ * wtf/Platform.h: added COMPILER(MINGW64) check to differentiate between mingw.org and mingw-w64 functions
+
+2010-04-02 Geoffrey Garen <ggaren@apple.com>
+
+ Build fix: updated the .def file.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-04-02 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Inlined toThisString and toThisJSString to avoid virtual function call overhead
+ https://bugs.webkit.org/show_bug.cgi?id=37039
+
+ Maybe a 1% speedup on iBench JS.
+
+ * JavaScriptCore.exp: New exports.
+
+ * runtime/JSCell.cpp:
+ * runtime/JSCell.h:
+ * runtime/JSNumberCell.cpp:
+ * runtime/JSNumberCell.h:
+ * runtime/JSString.cpp:
+ * runtime/JSString.h:
+ * runtime/JSValue.h:
+ * runtime/JSZombie.h:
+ (JSC::JSZombie::toThisObject): Nixed the old virtual-type implementation.
+
+ * runtime/JSObject.h:
+ (JSC::JSValue::toThisString):
+ (JSC::JSValue::toThisJSString): Added the inlined implementation.
+
+2010-04-02 Jeremy Moskovich <jeremy@chromium.org>
+
+ Reviewed by Geoffrey Garen.
+
+ Beef up documentation for ASSERT* and CRASH macros a bit.
+
+ https://bugs.webkit.org/show_bug.cgi?id=36527
+
+ * wtf/Assertions.h:
+
+2010-04-02 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Unreviewed, minor build fix.
+
+ Change the order of the member initialisation list
+ in constructor to match declaration order
+
+ * runtime/Collector.cpp:
+ (JSC::Heap::Heap):
+
+2010-04-01 Kinuko Yasuda <kinuko@chromium.org>
+
+ Reviewed by Dmitry Titov.
+
+ Add FileThread for async file operation support in FileReader and FileWriter
+ https://bugs.webkit.org/show_bug.cgi?id=36896
+
+ Add ENABLE_FILE_READER and ENABLE_FILE_WRITER flags.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2010-03-31 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (windows build fix pt II).
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-03-31 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (windows build fix).
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-03-31 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Bug 36871 - Remove JSC::CString
+ Use WTF::CString instead (which until recently was WebCore::CString).
+
+ * JavaScriptCore.exp:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * runtime/UString.cpp:
+ * runtime/UString.h:
+
+2010-03-31 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Unreviewed, fix after r56842.
+
+ Add UNUSED_PARAM a to silence warning.
+
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+
+2010-03-31 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Unreviewed, Symbian build fix.
+
+ Refactor JITStubs.cpp so that the list of STUB_FUNCTIONs
+ are not dependent on the JSVALUE32_64 guard.
+
+ * jit/JITStubs.cpp: Place the JSVALUE32_64 guard inside
+ the body of cti_op_eq_strings.
+ * jit/JITStubs.h: Remove JSVALUE32_64 guard from
+ cti_op_eq_strings stub.
+
+2010-03-30 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (windows build fix).
+
+ Fixing b0rked version of JavaScriptCore.vcproj - added lines were truncated.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+
+2010-03-30 Gavin Barraclough <barraclough@apple.com>
+
+ Rubber stamped by Sam Weinig.
+
+ https://bugs.webkit.org/show_bug.cgi?id=36866
+ Move CString to WTF
+
+ * Android.mk:
+ * GNUmakefile.am:
+ * JavaScriptCore.exp:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.pro:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.vcproj/WTF/WTF.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * wtf/text: Added.
+ * wtf/text/CString.cpp: Copied from WebCore/platform/text/CString.cpp.
+ * wtf/text/CString.h: Copied from WebCore/platform/text/CString.h.
+ (WTF::CStringBuffer::data):
+ (WTF::CStringBuffer::length):
+ (WTF::CStringBuffer::create):
+ (WTF::CStringBuffer::CStringBuffer):
+ (WTF::CStringBuffer::mutableData):
+ (WTF::CString::CString):
+ (WTF::CString::isNull):
+ (WTF::CString::buffer):
+ (WTF::operator!=):
+
+2010-03-30 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
+
+ Reviewed by nobody, build break.
+
+ [Qt] Fix build break on Qt Mac.
+
+ DESTDIR path on Mac do not include the configuration path by default
+ like on Windows. Have to force it.
+
+ * JavaScriptCore.pro:
+
+2010-03-29 Alice Liu <alice.liu@apple.com>
+
+ Reviewed by NOBODY (build fix).
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
+ add JSObjectRefPrivate.h
+
+2010-03-29 Chao-ying Fu <fu@mips.com>
+
+ Reviewed by Oliver Hunt.
+
+ MIPS JIT Supports
+ https://bugs.webkit.org/show_bug.cgi?id=30144
+
+ The following changes enable MIPS JIT.
+
+ * assembler/MIPSAssembler.h:
+ (JSC::MIPSAssembler::lbu):
+ (JSC::MIPSAssembler::linkWithOffset):
+ * assembler/MacroAssemblerMIPS.h:
+ (JSC::MacroAssemblerMIPS::load8):
+ (JSC::MacroAssemblerMIPS::branch8):
+ (JSC::MacroAssemblerMIPS::branchTest8):
+ (JSC::MacroAssemblerMIPS::setTest8):
+ (JSC::MacroAssemblerMIPS::setTest32):
+ * jit/JIT.h:
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::preserveReturnAddressAfterCall):
+ (JSC::JIT::restoreReturnAddressBeforeReturn):
+ * jit/JITOpcodes.cpp:
+ * jit/JITStubs.cpp:
+ (JSC::JITThunks::JITThunks):
+ * jit/JITStubs.h:
+ (JSC::JITStackFrame::returnAddressSlot):
+ * wtf/Platform.h:
+
+2010-02-26 Kenneth Rohde Christiansen <kenneth@webkit.org>
+
+ Reviewed by Simon Fraser.
+
+ Add support for Widgets 1.0: View Mode Media Feature
+ https://bugs.webkit.org/show_bug.cgi?id=35446
+
+ Add an enable flag for the Widgets (http://www.w3.org/TR/widgets-reqs/)
+ and turn it on for Qt only.
+
+ * wtf/Platform.h:
+
+2010-03-29 Patrick Gansterer <paroga@paroga.com>
+
+ Reviewed by Darin Adler.
+
+ Corrected name of (u)int64_t compile time assert.
+ https://bugs.webkit.org/show_bug.cgi?id=36739
+
+ int64_t_is_four_bytes -> int64_t_is_eight_bytes
+
+ * os-win32/stdint.h:
+
+2010-03-29 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Use the -l syntax for linking against JavaScriptCore on Windows.
+ This allow qmake to extract dependencies correctly when generating VS
+ solutions.
+
+ * JavaScriptCore.pri:
+
+2010-03-29 Thomas Zander <t.zander@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ https://bugs.webkit.org/show_bug.cgi?id=36742
+
+ gcc for Symbian doesn't support gcc extensions like atomicity.h - disable
+
+ * wtf/Threading.h: also detect os symbian
+
+2010-03-28 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Remove the definition of WTF_CHANGES guards from the build system
+ https://bugs.webkit.org/show_bug.cgi?id=31670
+
+ * JavaScriptCore.pro: Remove the definition of WTF_CHANGES
+ as it is already defined in config.h
+
+2010-03-28 Kent Hansen <kent.hansen@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Add API for reporting additional memory cost of JavaScript objects
+ https://bugs.webkit.org/show_bug.cgi?id=36650
+
+ * qt/api/qscriptengine.cpp:
+ (QScriptEngine::reportAdditionalMemoryCost):
+ * qt/api/qscriptengine.h:
+ * qt/api/qscriptengine_p.h:
+ (QScriptEnginePrivate::reportAdditionalMemoryCost):
+ * qt/tests/qscriptengine/tst_qscriptengine.cpp:
+ (tst_QScriptEngine::reportAdditionalMemoryCost):
+
+2010-03-28 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ QScriptEngine API was enriched by globalObject() method
+ which give an access to the global object.
+
+ [Qt] QScriptEngine doesn't give an access to global object
+ https://bugs.webkit.org/show_bug.cgi?id=36603
+
+ * qt/api/qscriptengine.cpp:
+ (QScriptEngine::globalObject):
+ * qt/api/qscriptengine.h:
+ * qt/api/qscriptengine_p.cpp:
+ (QScriptEnginePrivate::globalObject):
+ * qt/api/qscriptengine_p.h:
+ * qt/tests/qscriptengine/tst_qscriptengine.cpp:
+ (tst_QScriptEngine::globalObject):
+
+2010-03-26 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Build JavaScriptCore as a static library.
+ https://bugs.webkit.org/show_bug.cgi?id=36590
+
+ This patch takes what was left of the unused JavaScriptCore.pro
+ and moved the compilation logic from JavaScriptCore.pri to
+ JavaScriptCore.pro.
+
+ * JavaScriptCore.pri:
+ * JavaScriptCore.pro:
+ * jsc.pro:
+ * qt/api/QtScript.pro:
+
+2010-03-25 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (build fix).
+
+ * profiler/ProfileGenerator.cpp:
+ (JSC::ProfileGenerator::willExecute):
+ (JSC::ProfileGenerator::didExecute):
+
+2010-03-25 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Bug 36611 - Cleanup JSC::CString
+ Rename CString::c_str() -> CString::data(), CString::size() -> CString::length(),
+ remove UString::getCString() (all uses are wrong, should use UString::UTF8String()).
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::printUnaryOp):
+ (JSC::CodeBlock::printBinaryOp):
+ (JSC::CodeBlock::printConditionalJump):
+ (JSC::CodeBlock::printGetByIdOp):
+ (JSC::CodeBlock::printPutByIdOp):
+ (JSC::printGlobalResolveInfo):
+ (JSC::printStructureStubInfo):
+ (JSC::CodeBlock::printStructure):
+ (JSC::CodeBlock::printStructures):
+ (JSC::CodeBlock::dump):
+ * jsc.cpp:
+ (functionPrint):
+ (functionDebug):
+ (runInteractive):
+ (fillBufferWithContentsOfFile):
+ * profiler/CallIdentifier.h:
+ (JSC::CallIdentifier::c_str):
+ * profiler/Profile.cpp:
+ (JSC::Profile::debugPrintDataSampleStyle):
+ * profiler/ProfileNode.cpp:
+ (JSC::ProfileNode::debugPrintData):
+ (JSC::ProfileNode::debugPrintDataSampleStyle):
+ * runtime/DateConversion.cpp:
+ (JSC::parseDate):
+ * runtime/JSGlobalObjectFunctions.cpp:
+ (JSC::encode):
+ (JSC::globalFuncJSCPrint):
+ * runtime/UString.cpp:
+ (JSC::operator==):
+ (JSC::UString::toDouble):
+ * runtime/UString.h:
+ (JSC::CString::length):
+ (JSC::CString::data):
+
+2010-03-25 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
+
+ Reviewed by nobody, build fix.
+
+ [Qt] Build fix on MSVC. Reverts r55633 for stdint.h
+
+ This file gets included in generated moc files which don't
+ include the prefix header.
+
+ * os-win32/stdint.h:
+
+2010-03-24 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (windows build fix).
+
+2010-03-24 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Switch String::latin1, String::utf8, String::fromUTF8 to
+ use WTF's Unicode conversion methods rather than TextEncoder.
+ These methods only perform simple conversion, and don't need
+ really require TextEncoder's full capability (to look up arbitrary
+ encodings by name), switching to only be dependent on WTF will
+ make it easier if we chose to move WebCore::String to WTF.
+
+ * JavaScriptCore.exp:
+
+2010-03-24 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ * wtf/FastMalloc.h: Added a using directive for fastMallocSize, like we do for all public
+ WTF symbols. Also sorted the list alphabetically.
+
+2010-03-23 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (speculative windows build fix part II).
+
+2010-03-23 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (speculative windows build fix).
+
+2010-03-23 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Bug 36519 - JSGlobalContextRelease is unnecessarily slow
+
+ Since [ http://trac.webkit.org/changeset/35917 ], calling
+ JSGlobalContextRelease always triggers a GC heap collection
+ (if not a full destroy). As per 35917's changelog "This is
+ only really necessary when the (JSGlobalObject's) last
+ reference is released, but there is no way to determine that,
+ and no harm in collecting slightly more often."
+
+ Well, we now know of cases of API clients who are harmed by
+ the performance penalty of collecting too often, so it's time
+ to add a way to determine whether a call to JSGlobalContextRelease
+ is removing the last protect from it's global object. If further
+ protects are retaining the global object (likely from other
+ JSGlobalContextRefs), then don't trigger a GC collection.
+
+ * API/JSContextRef.cpp:
+ * runtime/Collector.cpp:
+ (JSC::Heap::unprotect): return a boolean indicating that the value is now unprotected.
+ * runtime/Collector.h:
+ * wtf/HashCountedSet.h:
+ (WTF::::remove): return a boolean indicating whether the value was removed from the set.
+
+2010-03-23 Mark Rowe <mrowe@apple.com>
+
+ Build fix.
+
+ * runtime/ArrayPrototype.cpp:
+ (JSC::arrayProtoFuncSplice): Some versions of GCC emit a warning about the implicit 64- to 32-bit truncation
+ that takes place here. An explicit cast is sufficient to silence it.
+
+2010-03-23 Alexey Proskuryakov <ap@apple.com>
+
+ Build fix.
+
+ * runtime/ArrayPrototype.cpp: (JSC::arrayProtoFuncSplice): Fixed a typo - length doesn't
+ need to be converted with toInteger().
+
+2010-03-23 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ https://bugs.webkit.org/show_bug.cgi?id=36511
+ <rdar://problem/7753498> Safari freezes when using SPUTNIK JavaScript conformance check
+
+ Test: fast/js/sputnik-S15.4.4.12_A3_T3.html
+
+ * runtime/ArrayPrototype.cpp: (JSC::arrayProtoFuncSplice): We were incorrectly computing
+ the start offset, and iterated over (almost) all integers. Note that this can be fixed
+ without using doubles, but the code would be much more complicated, and there is no important
+ reason to stick to integers here.
+
+2010-03-23 Kent Hansen <kent.hansen@nokia.com>
+
+ Reviewed by Darin Adler.
+
+ Fix compilation on Itanium in 32-bit mode
+ https://bugs.webkit.org/show_bug.cgi?id=36494
+
+ * wtf/Platform.h: Introduce CPU(IA64_32). Don't define
+ WTF_USE_JSVALUE64 if the CPU is in 32-bit mode.
+
+2010-03-23 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Mark Rowe.
+
+ Interpreter fix for <rdar://problem/7728196> REGRESSION (r46701): -(-2147483648)
+ evaluates to -2147483648 on 32 bit (35842)
+
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::privateExecute): Only take the fast negate path if
+ a bit other than bit 31 is set. If none of bits 0-30 are set, then the
+ value we're negating can only be 0 or -2147483648, and neither can be
+ negated in int space.
+
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_negate):
+ (JSC::JIT::emitSlow_op_negate): Updated the JIT implementation to match
+ the interpreter, since it's slightly simpler.
+
+2010-03-22 Siddharth Mathur <siddharth.mathur@nokia.com>
+
+ Reviewed by Laszlo Gombos.
+
+ [Symbian] More efficient aligned memory allocation for JSC Collector
+ https://bugs.webkit.org/show_bug.cgi?id=34350
+
+ * JavaScriptCore.pri: Added 2 new Symbian source files and HAL linkage
+
+ * runtime/Collector.cpp: Reduced port-specific code and added private data member
+ (JSC::Heap::Heap):
+ (JSC::Heap::~Heap):
+ (JSC::Heap::destroy):
+ (JSC::Heap::allocateBlock):
+ (JSC::Heap::freeBlockPtr):
+
+ * runtime/Collector.h: Added private data member
+
+ * wtf/symbian: Added.
+ * wtf/symbian/BlockAllocatorSymbian.cpp: Added.
+ (WTF::AlignedBlockAllocator::AlignedBlockAllocator): Helper class to allocate
+ aligned blocks more efficiently as required by Collector
+ (WTF::AlignedBlockAllocator::alloc):
+ (WTF::AlignedBlockAllocator::free):
+ (WTF::AlignedBlockAllocator::destroy):
+ (WTF::AlignedBlockAllocator::~AlignedBlockAllocator):
+ * wtf/symbian/BlockAllocatorSymbian.h: Added.
+
+2010-03-22 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Fixed <rdar://problem/7728196> REGRESSION (r46701): -(-2147483648)
+ evaluates to -2147483648 on 32 bit (35842)
+
+ Two ways to fix the same bug:
+
+ 1. Check for overflow when negating, since negating the largest negative
+ int causes overflow.
+
+ 2. Constant-fold even when negating a negative, since, like they say in
+ high school, "math works."
+
+ * assembler/MacroAssemblerARM.h:
+ (JSC::MacroAssemblerARM::branchNeg32):
+ * assembler/MacroAssemblerX86Common.h:
+ (JSC::MacroAssemblerX86Common::branchNeg32): Added a branching version
+ of the negate operator.
+
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_negate): Use the branching version of the negate
+ operator to check for overflow.
+
+ (JSC::JIT::emitSlow_op_negate): Link the check for overflow to a slow case.
+ (We could emit inline code for this, since we know what the result would
+ be, but that's probably just a waste of generated code.)
+
+ * parser/Grammar.y: Constant fold even when negating a negative.
+
+2010-03-22 David Kilzer <ddkilzer@apple.com>
+
+ <http://webkit.org/b/36431> Clean up 'int' use in UString.cpp after r54789
+
+ Reviewed by Darin Adler.
+
+ * runtime/UString.cpp:
+ (JSC::UString::from): Changed argument type from 'unsigned int'
+ to 'unsigned' to match WebKit coding style.
+ (JSC::UString::find): Changed static_cast<int>() to
+ static_cast<unsigned>() now that this method returns unsigned.
+ (JSC::UString::rfind): Ditto.
+ * runtime/UString.h:
+ (JSC::UString::from): Changed argument type from 'unsigned int'
+ to 'unsigned' to match WebKit coding style.
+
+2010-03-22 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ Add support for syntax checking in the QtScript API.
+
+ New class was created; the QScriptSyntaxCheckResult which main
+ responsibility is to provide results of the ECMA Script code
+ syntax check. The class is not fully functional as the JSC C API
+ doesn't expose an error column number, but it is a good start point
+ for a future development.
+
+ [Qt] QtScript functionality should be extended by syntax checking.
+ https://bugs.webkit.org/show_bug.cgi?id=36123
+
+ * qt/api/QtScript.pro:
+ * qt/api/qscriptengine.cpp:
+ (QScriptEngine::checkSyntax):
+ * qt/api/qscriptengine.h:
+ * qt/api/qscriptengine_p.cpp:
+ (QScriptEnginePrivate::checkSyntax):
+ * qt/api/qscriptengine_p.h:
+ * qt/api/qscriptsyntaxcheckresult.cpp: Added.
+ (QScriptSyntaxCheckResult::QScriptSyntaxCheckResult):
+ (QScriptSyntaxCheckResult::~QScriptSyntaxCheckResult):
+ (QScriptSyntaxCheckResult::operator=):
+ (QScriptSyntaxCheckResult::state):
+ (QScriptSyntaxCheckResult::errorLineNumber):
+ (QScriptSyntaxCheckResult::errorColumnNumber):
+ (QScriptSyntaxCheckResult::errorMessage):
+ * qt/api/qscriptsyntaxcheckresult.h: Added.
+ * qt/api/qscriptsyntaxcheckresult_p.cpp: Added.
+ (QScriptSyntaxCheckResultPrivate::~QScriptSyntaxCheckResultPrivate):
+ (QScriptSyntaxCheckResultPrivate::errorMessage):
+ (QScriptSyntaxCheckResultPrivate::errorLineNumber):
+ * qt/api/qscriptsyntaxcheckresult_p.h: Added.
+ (QScriptSyntaxCheckResultPrivate::get):
+ (QScriptSyntaxCheckResultPrivate::QScriptSyntaxCheckResultPrivate):
+ (QScriptSyntaxCheckResultPrivate::state):
+ (QScriptSyntaxCheckResultPrivate::errorColumnNumber):
+ * qt/tests/qscriptengine/tst_qscriptengine.cpp:
+ (tst_QScriptEngine::checkSyntax_data):
+ (tst_QScriptEngine::checkSyntax):
+
+2010-03-21 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ New class; QScriptProgram.
+
+ The class should be used to evaluate the same script multiple times
+ more efficiently.
+
+ [Qt] QtScript should have QScriptProgram class
+ https://bugs.webkit.org/show_bug.cgi?id=36008
+
+ * qt/api/QtScript.pro:
+ * qt/api/qscriptengine.cpp:
+ (QScriptEngine::evaluate):
+ * qt/api/qscriptengine.h:
+ * qt/api/qscriptengine_p.cpp:
+ (QScriptEnginePrivate::evaluate):
+ * qt/api/qscriptengine_p.h:
+ (QScriptEnginePrivate::evaluate):
+ * qt/api/qscriptprogram.cpp: Added.
+ (QScriptProgram::QScriptProgram):
+ (QScriptProgram::~QScriptProgram):
+ (QScriptProgram::operator=):
+ (QScriptProgram::isNull):
+ (QScriptProgram::sourceCode):
+ (QScriptProgram::fileName):
+ (QScriptProgram::firstLineNumber):
+ (QScriptProgram::operator==):
+ (QScriptProgram::operator!=):
+ * qt/api/qscriptprogram.h: Added.
+ * qt/api/qscriptprogram_p.h: Added.
+ (QScriptProgramPrivate::get):
+ (QScriptProgramPrivate::QScriptProgramPrivate):
+ (QScriptProgramPrivate::~QScriptProgramPrivate):
+ (QScriptProgramPrivate::isNull):
+ (QScriptProgramPrivate::sourceCode):
+ (QScriptProgramPrivate::fileName):
+ (QScriptProgramPrivate::firstLineNumber):
+ (QScriptProgramPrivate::operator==):
+ (QScriptProgramPrivate::operator!=):
+ (QScriptProgramPrivate::program):
+ (QScriptProgramPrivate::file):
+ (QScriptProgramPrivate::line):
+ * qt/tests/qscriptengine/tst_qscriptengine.cpp:
+ (tst_QScriptEngine::evaluateProgram):
+
+2010-03-21 David Kilzer <ddkilzer@apple.com>
+
+ Blind attempt #2 to fix the Windows build after r56314
+
+ * API/tests/testapi.c: Include JSObjectRefPrivate.h for the new
+ methods instead of declaring them locally (and non-extern).
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ Backed out previous change.
+
+2010-03-21 David Kilzer <ddkilzer@apple.com>
+
+ Blind attempt to fix the Windows build after r56314
+
+ Try to fix the following errors on the Windows buildbot:
+
+ Linking...
+ testapi.obj : error LNK2001: unresolved external symbol "bool __cdecl JSObjectSetPrivateProperty(struct OpaqueJSContext const *,struct OpaqueJSValue *,struct OpaqueJSString *,struct OpaqueJSValue const *)" (?JSObjectSetPrivateProperty@@YA_NPBUOpaqueJSContext@@PAUOpaqueJSValue@@PAUOpaqueJSString@@PBU2@@Z)
+ testapi.obj : error LNK2001: unresolved external symbol "struct OpaqueJSValue const * __cdecl JSObjectGetPrivateProperty(struct OpaqueJSContext const *,struct OpaqueJSValue *,struct OpaqueJSString *)" (?JSObjectGetPrivateProperty@@YAPBUOpaqueJSValue@@PBUOpaqueJSContext@@PAU1@PAUOpaqueJSString@@@Z)
+ C:\cygwin\home\buildbot\slave\win-release\build\WebKitBuild\bin\testapi.exe : fatal error LNK1120: 2 unresolved externals
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Added
+ missing symbols to be exported.
+
+2010-03-21 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Documentation fix for previous patch.
+
+ * API/JSObjectRefPrivate.h:
+
+2010-03-20 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ JSC needs an API to allow custom objects to have aprivate GC-accessible properties
+ https://bugs.webkit.org/show_bug.cgi?id=36420
+
+ Add new API methods to support "private" properties on custom
+ objects.
+
+ * API/JSCallbackObject.h:
+ (JSC::JSCallbackObjectData::JSCallbackObjectData):
+ (JSC::JSCallbackObjectData::~JSCallbackObjectData):
+ (JSC::JSCallbackObjectData::getPrivateProperty):
+ (JSC::JSCallbackObjectData::setPrivateProperty):
+ (JSC::JSCallbackObjectData::deletePrivateProperty):
+ (JSC::JSCallbackObjectData::markChildren):
+ (JSC::JSCallbackObjectData::JSPrivatePropertyMap::getPrivateProperty):
+ (JSC::JSCallbackObjectData::JSPrivatePropertyMap::setPrivateProperty):
+ (JSC::JSCallbackObjectData::JSPrivatePropertyMap::deletePrivateProperty):
+ (JSC::JSCallbackObjectData::JSPrivatePropertyMap::markChildren):
+ (JSC::JSCallbackObject::getPrivateProperty):
+ (JSC::JSCallbackObject::setPrivateProperty):
+ (JSC::JSCallbackObject::deletePrivateProperty):
+ (JSC::JSCallbackObject::markChildren):
+ * API/JSObjectRef.cpp:
+ (JSObjectGetPrivateProperty):
+ (JSObjectSetPrivateProperty):
+ (JSObjectDeletePrivateProperty):
+ * API/JSObjectRefPrivate.h: Added.
+ * API/tests/testapi.c:
+ (main):
+ * JavaScriptCore.exp:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2010-03-20 Kevin Ollivier <kevino@theolliviers.com>
+
+ [wx] Build fixes after introduction of Brew files.
+
+ * wscript:
+
+2010-03-18 Tom Callaway <tcallawa@redhat.com>
+
+ Reviewed by Darin Adler.
+
+ Bug 35429: Fix compile on SPARC64
+ https://bugs.webkit.org/show_bug.cgi?id=35429
+
+ * wtf/Platform.h: Set WTF_USE_JSVALUE64 for SPARC64
+
+2010-03-18 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Add API to directly expose JSON parsing
+ https://bugs.webkit.org/show_bug.cgi?id=34887
+
+ Add API to expose JSON parsing directly, and add tests to testapi
+
+ * API/JSValueRef.cpp:
+ (JSValueMakeFromJSONString):
+ (JSValueCreateJSONString):
+ * API/tests/testapi.c:
+ (main):
+ * JavaScriptCore.exp:
+ * runtime/JSONObject.cpp:
+ (JSC::JSONStringify):
+ * runtime/JSONObject.h:
+
+2010-03-16 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Darin Adler and Mark Rowe.
+
+ Update WebKit availability macros for release after 4.0.
+
+ * API/WebKitAvailability.h:
+
+2010-03-17 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ undefined, NaN, and Infinity should be ReadOnly
+ https://bugs.webkit.org/show_bug.cgi?id=36263
+
+ Simply add the ReadOnly flag to these properties.
+
+ * runtime/JSGlobalObject.cpp:
+ (JSC::JSGlobalObject::reset):
+
+2010-03-17 Darin Adler <darin@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Speed up Math.round a little by removing unneeded special case
+ https://bugs.webkit.org/show_bug.cgi?id=36107
+
+ Test: fast/js/math.html
+
+ * runtime/MathObject.cpp:
+ (JSC::mathProtoFuncRound): This function had a special case for numbers
+ between -0.5 and -0.0 to return -0.0. But the algorithm in the function
+ already yields -0.0 for those cases, so the extra checking and branching
+ is unneeded.
+
+2010-03-17 Mike Homey <glandium@debian.org>
+
+ Reviewed by Gustavo Noronha.
+
+ Build fix for SPARC. Fix missing macro value.
+
+ * wtf/Platform.h:
+
+2010-03-16 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt, Darin Adler.
+
+ Bug 36083 - REGRESSION (r55772-r55834): Crash in JavaScriptCore RegExp code on PowerPC
+
+ The problem is a bug in our port of PCRE - that a read may take place from the first character in an
+ empty string. For the time being, revert to using a valid pointer in the data segment rather than
+ an invalid non-null pointer into the zero-page for the empty string's data pointer. A better fix for
+ this will be to remove PCRE.
+
+ * runtime/UStringImpl.cpp:
+ (JSC::UStringImpl::empty):
+
+2010-03-16 Darin Adler <darin@apple.com>
+
+ Rolled out r56081 since it broke the Windows build.
+
+2010-03-16 Zoltan Horvath <zoltan@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ Remove extra <new> include and add guards to operator new/delete definitions
+ https://bugs.webkit.org/show_bug.cgi?id=35967
+
+ Remove extra <new> header include from FastAlloc.cpp since it is included in
+ FastAlloc.h. Add ENABLE(GLOBAL_FASTMALLOC_NEW) macro guard to operator
+ new/delete/new []/delete [] definitions.
+
+ * wtf/FastMalloc.cpp:
+
+2010-03-15 Kwang Yul Seo <skyul@company100.net>
+
+ Reviewed by Eric Seidel.
+
+ [BREWMP] Add a function to create a BREW instance without local variable declarations.
+ https://bugs.webkit.org/show_bug.cgi?id=34705
+
+ Add a template function to create a BREW instance in one line.
+
+ * wtf/brew/ShellBrew.h: Added.
+ (WTF::createInstance):
+
+2010-03-15 Geoffrey Garen <ggaren@apple.com>
+
+ Not reviewed.
+
+ Removed a now-incorrect comment I forgot to remove in my last check-in.
+
+ * wtf/FastMalloc.cpp:
+ (WTF::TCMalloc_PageHeap::scavenge):
+
+2010-03-15 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Fixed a portion of:
+ <rdar://problem/7165917> | https://bugs.webkit.org/show_bug.cgi?id=28676
+ Safari 4 does not release memory back to the operating system fast enough (28676)
+
+ Every few seconds, release a percentage of the minimum unused page count
+ during that time period.
+
+ SunSpider reports no change, command-line or in-browser, Mac or Windows.
+
+ * wtf/FastMalloc.cpp:
+ (WTF::TCMalloc_PageHeap::init):
+ (WTF::TCMalloc_PageHeap::signalScavenger):
+ (WTF::TCMalloc_PageHeap::initializeScavenger): Renamed shouldContinueScavenging
+ to shouldScavenge, since scavenging is no longer something that we interrupt.
+
+ (WTF::TCMalloc_PageHeap::scavenge): The new scavenging algorithm. Fixes
+ a bug where the old code would release only one item from each size class
+ per scavenge, potentially leaving large numbers of large-sized objects
+ unreleased for a long time.
+
+ (WTF::TCMalloc_PageHeap::shouldScavenge):
+ (WTF::TCMalloc_PageHeap::New):
+ (WTF::TCMalloc_PageHeap::AllocLarge):
+ (WTF::TCMalloc_PageHeap::Delete):
+ (WTF::TCMalloc_PageHeap::GrowHeap):
+ (WTF::TCMalloc_PageHeap::scavengerThread):
+ (WTF::TCMalloc_PageHeap::periodicScavenge): Updated to track the minimum
+ value of free_committed_pages_ during a given scavenge period.
+
+2010-03-15 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ https://bugs.webkit.org/show_bug.cgi?id=35843
+ Re-land reverted fix to JSString::getIndex()
+
+ Calling getIndex() on a JSString in rope form may result in a JSException being thrown
+ if there is insuficient memory so value(exec) returns UString() with length zero,
+ which will be passed to jsSingleCharacterSubstring.
+ Add a slow case function to trap the error & return a safe null value, until the
+ exception is handled.
+
+ * runtime/JSString.cpp:
+ (JSC::JSString::getIndexSlowCase):
+ (JSC::JSString::getStringPropertyDescriptor):
+ * runtime/JSString.h:
+ (JSC::jsSingleCharacterSubstring):
+ (JSC::JSString::getIndex):
+ (JSC::jsSingleCharacterString):
+ (JSC::JSString::getStringPropertySlot):
+
+2010-03-04 Kenneth Rohde Christiansen <kenneth@webkit.org>
+
+ Reviewed by Adam Roben.
+
+ Add a long long version of abs() for MSVC.
+
+ * wtf/MathExtras.h:
+ (abs):
+
+2010-03-15 Gabor Loki <loki@webkit.org>
+
+ Reviewed by Gavin Barraclough.
+
+ Combine ctiTrampolines on ARM and Thumb-2
+ https://bugs.webkit.org/show_bug.cgi?id=36014
+
+ * jit/JITStubs.cpp:
+ (JSC::JITThunks::JITThunks):
+
+2010-03-12 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (build fix).
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-03-12 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (build fix).
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-03-11 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Bug 36075 - Clean up screwyness re static string impls & Identifiers.
+
+ * API/JSClassRef.cpp:
+ (OpaqueJSClass::~OpaqueJSClass): Classname may be null/empty, and these are an identifer. This is okay, since the null/empty strings are shared across all threads.
+ * JavaScriptCore.exp:
+ * runtime/Identifier.cpp:
+ (JSC::Identifier::add): No need to explicitly hash null reps, this is done in the ststic UStringImpl constructor.
+ (JSC::Identifier::addSlowCase): UStringImpl::empty() handled & checkCurrentIdentifierTable now called in the header.
+ (JSC::Identifier::checkCurrentIdentifierTable): Replaces checkSameIdentifierTable (this no longer checked the rep since the identifierTable pointer was removed from UString::Rep long ago).
+ * runtime/Identifier.h:
+ (JSC::Identifier::add): Replace call to checkSameIdentifierTable with call to checkCurrentIdentifierTable at head of function.
+ * runtime/UStringImpl.cpp:
+ (JSC::UStringImpl::~UStringImpl): Remove call to checkConsistency - this function no longer checks anything interesting.
+ * runtime/UStringImpl.h:
+ (JSC::UStringOrRopeImpl::UStringOrRopeImpl): Set s_refCountFlagIsIdentifier in static constructor.
+ (JSC::UStringImpl::UStringImpl): remove calls to checkConsistency (see above), add new ASSERT to substring constructor.
+ (JSC::UStringImpl::setHash): ASSERT not static (static strings set the hash in their constructor, should not reach this code path).
+ (JSC::UStringImpl::create): Add missing ASSERT.
+ (JSC::UStringImpl::setIsIdentifier): ASSERT !isStatic() (static strings hash set in constructor).
+
+2010-03-12 Peter Varga <pvarga@inf.u-szeged.hu>
+
+ Reviewed by David Levin.
+
+ Two functions tryConsumeCharacter() and tryConsumeCharacterClass() are
+ removed from yarr/RegexInterpreter.cpp because they are never called.
+
+ * yarr/RegexInterpreter.cpp:
+
+2010-03-11 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ The JSNative state was renamed to JSPrimitive. The new name better
+ coresponds to the ECMAScript standard.
+
+ Enum QScriptValuePrivate::States was renamed to State to obey Qt
+ coding style rules ("States" name suggests that a state could
+ mixed together with an other state using bitwise logic operators.
+
+ [Qt] QScriptValuePrivate::States has naming issues
+ https://bugs.webkit.org/show_bug.cgi?id=35968
+
+ * qt/api/qscriptvalue_p.h:
+ (QScriptValuePrivate::):
+ (QScriptValuePrivate::QScriptValuePrivate):
+ (QScriptValuePrivate::isBool):
+ (QScriptValuePrivate::isNumber):
+ (QScriptValuePrivate::isNull):
+ (QScriptValuePrivate::isString):
+ (QScriptValuePrivate::isUndefined):
+ (QScriptValuePrivate::toString):
+ (QScriptValuePrivate::toNumber):
+ (QScriptValuePrivate::toBool):
+ (QScriptValuePrivate::assignEngine):
+ (QScriptValuePrivate::refinedJSValue):
+
+2010-03-11 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (Windows build fix).
+
+ Add export.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-03-11 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (Windows build fix).
+
+ Add export.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-03-11 Gavin Barraclough <barraclough@apple.com>
+
+ Rubber stamped by Oliver Hunt.
+
+ Remove nonsense comments used in development & commited in error.
+
+ * runtime/UStringImpl.h:
+
+2010-03-11 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (Windows build fix).
+
+ Remove export.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-03-11 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ https://bugs.webkit.org/show_bug.cgi?id=36041
+ Remove unnecessary differences in common code between WebCore::StringImpl & JSC::UStringImpl
+
+ Much of the code in WebCore::StringImpl and JSC::UStringImpl is now very similar,
+ but has trivial and unnecessary formatting differences, such as the exact wording
+ of comments, missing ASSERTs, functions implemented in the .h vs .cpp etc.
+
+ * runtime/Identifier.cpp:
+ (JSC::Identifier::add): UStringImpl::empty() now automatically hashes, uas per WebCore strings.
+ (JSC::Identifier::addSlowCase): UStringImpl::empty() now automatically hashes, uas per WebCore strings.
+ * runtime/UStringImpl.cpp:
+ (JSC::UStringImpl::~UStringImpl): Only call bufferOwnership() once, add missing ASSERTs.
+ (JSC::UStringImpl::createUninitialized): Move from .h, not commonly called, no need to inline.
+ (JSC::UStringImpl::create): Move from .h, not commonly called, no need to inline.
+ (JSC::UStringImpl::sharedBuffer): Rewritten to more closely match WebCore implementation, remove need for separate baseSharedBuffer() method.
+ * runtime/UStringImpl.h:
+ (JSC::UStringImpl::UStringImpl): Automatically hash static strings, ASSERT m_data & m_length are non-null/non-zero in non-static strings.
+ (JSC::UStringImpl::setHash): Add missing ASSERT.
+ (JSC::UStringImpl::create): Moved to .cpp / added missing check for empty string creation.
+ (JSC::UStringImpl::adopt): Vector.size() returns size_t, not unsigned.
+ (JSC::UStringImpl::cost): Renamed m_bufferSubstring -> m_substringBuffer
+ (JSC::UStringImpl::hash): Reordered in file.
+ (JSC::UStringImpl::existingHash): Reordered in file.
+ (JSC::UStringImpl::computeHash): Reordered in file, renamed parameter.
+ (JSC::UStringImpl::checkConsistency): rewrote ASSERT.
+ (JSC::UStringImpl::bufferOwnership): Return type should be BufferOwnership.
+ (JSC::UStringImpl::): Moved friends to head of class.
+
+2010-03-11 Mark Rowe <mrowe@apple.com>
+
+ Reviewed by David Kilzer.
+
+ <rdar://problem/7745082> Make it possible to build WebKit for older Mac OS X versions from the current Mac OS X version
+
+ Default to using the appropriate SDK if the target Mac OS X version is not the current Mac OS X version.
+
+ * Configurations/Base.xcconfig:
+
+2010-03-11 Mark Rowe <mrowe@apple.com>
+
+ Reviewed by Tim Hatcher.
+
+ <rdar://problem/7745082> Make it possible to build WebKit for older Mac OS X versions from the current Mac OS X version
+
+ Introduce TARGET_MAC_OS_X_VERSION_MAJOR to represent the Mac OS X version that is being targeted. It defaults to the
+ current Mac OS X version unless otherwise specified.
+
+ Key off TARGET_MAC_OS_X_VERSION_MAJOR where we'd previously been keying off MAC_OS_X_VERSION_MAJOR.
+
+ Explicitly map from the target Mac OS X version to the preferred compiler since Xcode's default compiler choice
+ may not be usable when targetting a different Mac OS X version.
+
+ Key off TARGET_GCC_VERSION rather than MAC_OS_X_VERSION_MAJOR in locations where we'd previously been keying off
+ MAC_OS_X_VERSION_MAJOR but the decision is really related to the compiler version being used.
+
+ * Configurations/Base.xcconfig:
+ * Configurations/DebugRelease.xcconfig:
+ * Configurations/FeatureDefines.xcconfig:
+ * Configurations/JavaScriptCore.xcconfig:
+ * Configurations/Version.xcconfig:
+
+2010-03-11 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Mark Rowe.
+
+ Sort the project file.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2010-03-11 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Mark Rowe.
+
+ Sort the project file .
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2010-03-11 Gabor Loki <loki@webkit.org>
+
+ Reviewed by Gavin Barraclough.
+
+ Buildfix for Thumb-2 after r55684. Add branch8 and branchTest8 functions.
+ https://bugs.webkit.org/show_bug.cgi?id=35892
+
+ * assembler/ARMv7Assembler.h:
+ (JSC::ARMv7Assembler::):
+ (JSC::ARMv7Assembler::ldrb):
+ * assembler/MacroAssemblerARMv7.h:
+ (JSC::MacroAssemblerARMv7::load8):
+ (JSC::MacroAssemblerARMv7::branch8):
+ (JSC::MacroAssemblerARMv7::branchTest8):
+ (JSC::MacroAssemblerARMv7::setTest8):
+
+2010-03-10 Gavin Barraclough <barraclough@apple.com>
+
+ Rubber stamped by Oliver Hunt.
+
+ Rename JSC::UStringImpl::data() to characters(), to match WebCore::StringImpl.
+
+ * API/JSClassRef.cpp:
+ (OpaqueJSClassContextData::OpaqueJSClassContextData):
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::keyForCharacterSwitch):
+ * bytecompiler/NodesCodegen.cpp:
+ (JSC::processClauseList):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::privateExecute):
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ * runtime/ArrayPrototype.cpp:
+ (JSC::arrayProtoFuncToString):
+ * runtime/Identifier.cpp:
+ (JSC::Identifier::equal):
+ (JSC::Identifier::addSlowCase):
+ * runtime/JSString.cpp:
+ (JSC::JSString::resolveRope):
+ * runtime/UString.cpp:
+ (JSC::UString::toStrictUInt32):
+ (JSC::equal):
+ * runtime/UString.h:
+ (JSC::UString::data):
+ * runtime/UStringImpl.h:
+ (JSC::UStringImpl::characters):
+ (JSC::UStringImpl::hash):
+ (JSC::UStringImpl::setHash):
+
+2010-03-10 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Darin Adler, Geoffrey Garen, Maciej Stachowiak.
+
+ https://bugs.webkit.org/show_bug.cgi?id=35991
+ Would be faster to not use a thread specific to implement StringImpl::empty()
+
+ Change JSC::UStringImpl's implementation of empty() match to match StringImpl's new implementation
+ (use a static defined within the empty() method), and change the interface to match too (return
+ a pointer not a reference).
+
+ ~0% performance impact (possible minor progression from moving empty() from .h to .cpp).
+
+ * JavaScriptCore.exp:
+ * runtime/Identifier.cpp:
+ (JSC::Identifier::add):
+ (JSC::Identifier::addSlowCase):
+ * runtime/PropertyNameArray.cpp:
+ (JSC::PropertyNameArray::add):
+ * runtime/UString.cpp:
+ (JSC::initializeUString):
+ (JSC::UString::UString):
+ * runtime/UStringImpl.cpp:
+ (JSC::UStringImpl::empty):
+ (JSC::UStringImpl::create):
+ * runtime/UStringImpl.h:
+ (JSC::UStringImpl::adopt):
+ (JSC::UStringImpl::createUninitialized):
+ (JSC::UStringImpl::tryCreateUninitialized):
+
+2010-03-10 Dmitry Titov <dimich@chromium.org>
+
+ Not reviewed, fixing Snow Leopard build.
+
+ * wtf/mac/MainThreadMac.mm: Forgot 'static' for a new local function.
+ (WTF::postTimer):
+
+2010-03-10 Dmitry Titov <dimich@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ Make Document::postTask to use a single queue of tasks, to fire them in order
+ https://bugs.webkit.org/show_bug.cgi?id=35943
+
+ The patch uses CFRunLoopTimer to schedule execution of tasks instead of performSelectorOnMainThread which apparently can starve other event sources.
+ The timer is used when the schedule request is coming on the main thread itself. This happens when the task is posted on the main thread or
+ when too many tasks are posted and the queue does 'stop and re-schedule' to make sure run loop has a chance to execute other events.
+
+ * wtf/mac/MainThreadMac.mm:
+ (WTF::timerFired):
+ (WTF::postTimer):
+ (WTF::scheduleDispatchFunctionsOnMainThread): Use timer posted to the current RunLoop if scheduling the task execution while on the main thread.
+
+2010-03-10 Geoffrey Garen <ggaren@apple.com>
+
+ Windows build fix: added new symbol.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-03-10 Geoffrey Garen <ggaren@apple.com>
+
+ Windows build fix: removed old symbol.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-03-09 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Alexey Proskuryakov, Darin Adler, and Sam Weinig.
+
+ Refactored fastCheckConsistency to match some review comments:
+ - renamed fastCheckConsistency to fastMallocSize, and changed ValueCheck
+ to ASSERT that a pointer's fastMallocSize is not 0.
+ - implemented a version of fastMallocSize for tcmalloc.
+
+ Also moved some pre-existing code around to avoid a problem related to
+ mismatched #define/#undef of malloc/free in this source file.
+
+ * JavaScriptCore.exp:
+ * wtf/FastMalloc.cpp:
+ (WTF::fastMallocSize): Renamed. Fixed indentation.
+
+ (WTF::TCMalloc_PageHeap::scavenge): Removed an incorrect ASSERT that
+ got in the way of testing the tcmalloc implementation. (More information
+ on why this ASSERT is incorrect is in <rdar://problem/7165917>.)
+
+ (WTF::TCMallocStats::fastMallocSize): Implemented for tcmalloc.
+
+ * wtf/FastMalloc.h: Updated for rename.
+
+ * wtf/ValueCheck.h:
+ (WTF::): Moved the ASSERT that used to be in fastCheckConsistency here.
+
+2010-03-10 Kevin Ollivier <kevino@theolliviers.com>
+
+ Reviewed by Eric Seidel.
+
+ Make global new/delete operators configurable for all ports and disable it
+ for the wx port for now.
+
+ * wtf/FastMalloc.h:
+ * wtf/Platform.h:
+
+2010-03-09 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (reverting r54510).
+
+ This caused a performance regression, by breaking the code
+ generator's logic to calculate the skip level for resolving
+ variables (traced by rdar:7683350) Reverting for now.
+
+ * parser/Grammar.y:
+ * parser/NodeConstructors.h:
+ (JSC::ContinueNode::ContinueNode):
+ (JSC::BreakNode::BreakNode):
+ (JSC::ForInNode::ForInNode):
+ * runtime/CommonIdentifiers.cpp:
+ (JSC::CommonIdentifiers::CommonIdentifiers):
+ * runtime/CommonIdentifiers.h:
+ * runtime/FunctionPrototype.cpp:
+ (JSC::FunctionPrototype::FunctionPrototype):
+ * runtime/Identifier.cpp:
+ (JSC::Identifier::add):
+ * runtime/PropertyNameArray.cpp:
+ (JSC::PropertyNameArray::add):
+
+2010-03-09 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Changed FastMalloc statistics reporting to be a bit clearer. We now
+ report:
+ - Reserved VM Bytes: the VM that has been mapped into the process.
+ - Committed VM Bytes: the subset of Reserved VM Bytes actually in use.
+ - Free List Bytes: the subset of Committed VM Bytes in a free list.
+
+ * wtf/FastMalloc.cpp:
+ (WTF::fastMallocStatistics):
+ (WTF::TCMallocStats::fastMallocStatistics): Updated to report the statistics
+ above. Standardized use of "ifdef WTF_CHANGES". Added a SpinLockHolder
+ around all statistics gathering, since it reads from the page heap.
+
+ * wtf/FastMalloc.h: Updated to report the statistics above.
+
+2010-03-09 Gabor Loki <loki@webkit.org>
+
+ Rubber-stamped by Maciej Stachowiak.
+
+ Buildfix for ARM after r55684. Add branch8 and branchTest8 functions.
+ https://bugs.webkit.org/show_bug.cgi?id=35892
+
+ * assembler/ARMAssembler.cpp:
+ (JSC::ARMAssembler::dataTransfer32):
+ * assembler/ARMAssembler.h:
+ (JSC::ARMAssembler::):
+ * assembler/MacroAssemblerARM.h:
+ (JSC::MacroAssemblerARM::load8):
+ (JSC::MacroAssemblerARM::branch8):
+ (JSC::MacroAssemblerARM::branchTest8):
+
+2010-03-08 Geoffrey Garen <ggaren@apple.com>
+
+ Windows build fix: 'P' is not a type. Luckily, 'void' is.
+
+ * wtf/FastMalloc.cpp:
+ (WTF::fastCheckConsistency):
+
+2010-03-08 Geoffrey Garen <ggaren@apple.com>
+
+ Windows build fix: export a new symbol.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-03-08 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Switching malloc implementations requires a world rebuild
+ https://bugs.webkit.org/show_bug.cgi?id=35899
+
+ * wtf/FastMalloc.cpp:
+ (WTF::fastCheckConsistency):
+ (WTF::TCMallocStats::fastCheckConsistency):
+ * wtf/FastMalloc.h:
+ * wtf/ValueCheck.h:
+ (WTF::): Moved pointer checking into a helper function in FastMalloc.cpp,
+ so you can switch malloc implementations without rebuilding the world.
+
+2010-03-07 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Darin Adler.
+
+ TypeInfo is unnecessarily large
+ https://bugs.webkit.org/show_bug.cgi?id=35850
+
+ Reduce the size of the type and flags members to a single
+ byte each, reducing the size of Structure by 8 bytes.
+
+ * assembler/MacroAssemblerX86Common.h:
+ (JSC::MacroAssemblerX86Common::branch8):
+ (JSC::MacroAssemblerX86Common::branchTest8):
+ (JSC::MacroAssemblerX86Common::setTest8):
+ Add single byte branches, and correct setTest8 to do a
+ single byte read from memory, and actually store the result
+ * assembler/X86Assembler.h:
+ (JSC::X86Assembler::):
+ (JSC::X86Assembler::cmpb_im):
+ (JSC::X86Assembler::testb_im):
+ * jit/JITCall.cpp:
+ (JSC::JIT::emit_op_construct_verify):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_instanceof):
+ (JSC::JIT::emit_op_jeq_null):
+ (JSC::JIT::emit_op_jneq_null):
+ (JSC::JIT::emit_op_get_pnames):
+ (JSC::JIT::emit_op_convert_this):
+ (JSC::JIT::emit_op_construct_verify):
+ (JSC::JIT::emit_op_to_jsnumber):
+ (JSC::JIT::emit_op_eq_null):
+ (JSC::JIT::emit_op_neq_null):
+ * runtime/JSTypeInfo.h:
+ (JSC::TypeInfo::TypeInfo):
+ (JSC::TypeInfo::type):
+
+2010-03-08 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (reverting regression).
+
+ Reverting 55035, this caused a regression.
+ (https://bugs.webkit.org/show_bug.cgi?id=35843)
+
+ * runtime/JSString.cpp:
+ (JSC::JSString::resolveRope):
+ (JSC::JSString::getStringPropertyDescriptor):
+ * runtime/JSString.h:
+ (JSC::jsSingleCharacterSubstring):
+ (JSC::JSString::getIndex):
+ (JSC::JSString::getStringPropertySlot):
+ * runtime/UStringImpl.cpp:
+ * runtime/UStringImpl.h:
+
+2010-03-08 Stuart Morgan <stuartmorgan@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ Added a new USE definition for secure text mode on the Mac.
+ https://bugs.webkit.org/show_bug.cgi?id=31265
+
+ * wtf/Platform.h:
+
+2010-03-08 Jian Li <jianli@chromium.org>
+
+ Reviewed by Dmitry Titov.
+
+ Blob.slice support.
+ https://bugs.webkit.org/show_bug.cgi?id=32993
+
+ Add ENABLE_BLOB_SLICE feature define.
+ Also fix a problem that JSValue.toInteger is not exposed on Windows.
+
+ * Configurations/FeatureDefines.xcconfig:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-03-07 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Small performance fix in the QScriptConverter::toString().
+
+ The QByteArray was replaced by the QVarLengthArray which doesn't
+ have to allocate any memory on heap.
+
+ [Qt] QScriptConverter::toString() should use QVarLengthArray instead of QByteArray
+ https://bugs.webkit.org/show_bug.cgi?id=35577
+
+ * qt/api/qscriptconverter_p.h:
+ (QScriptConverter::toString):
+
+2010-03-06 Mark Rowe <mrowe@apple.com>
+
+ Rubber-stamped by Sam Weinig.
+
+ Remove unnecessary includes of wtf/Platform.h. This is already pulled in by config.h.
+
+ * API/APICast.h:
+ * API/JSCallbackFunction.cpp:
+ * API/JSContextRef.cpp:
+ * API/JSObjectRef.cpp:
+ * API/JSValueRef.cpp:
+ * assembler/ARMAssembler.h:
+ * assembler/ARMv7Assembler.h:
+ * assembler/AbstractMacroAssembler.h:
+ * assembler/AssemblerBuffer.h:
+ * assembler/AssemblerBufferWithConstantPool.h:
+ * assembler/CodeLocation.h:
+ * assembler/LinkBuffer.h:
+ * assembler/MIPSAssembler.h:
+ * assembler/MacroAssembler.h:
+ * assembler/MacroAssemblerARM.h:
+ * assembler/MacroAssemblerARMv7.h:
+ * assembler/MacroAssemblerCodeRef.h:
+ * assembler/MacroAssemblerMIPS.h:
+ * assembler/MacroAssemblerX86.h:
+ * assembler/MacroAssemblerX86Common.h:
+ * assembler/MacroAssemblerX86_64.h:
+ * assembler/RepatchBuffer.h:
+ * assembler/X86Assembler.h:
+ * jit/JIT.h:
+ * jit/JITCode.h:
+ * jit/JITInlineMethods.h:
+ * jit/JITStubs.h:
+ * os-win32/stdint.h:
+ * runtime/JSAPIValueWrapper.h:
+ * runtime/JSImmediate.h:
+ * wtf/ASCIICType.h:
+ * wtf/StdLibExtras.h:
+ * wtf/VMTags.h:
+ * yarr/RegexCompiler.h:
+ * yarr/RegexInterpreter.h:
+ * yarr/RegexJIT.h:
+ * yarr/RegexParser.h:
+ * yarr/RegexPattern.h:
+
+2010-03-06 Kwang Yul Seo <skyul@company100.net>
+
+ Reviewed by Eric Seidel.
+
+ [BREWMP] Share OwnPtr.
+ https://bugs.webkit.org/show_bug.cgi?id=35776
+
+ Share OwnPtr implementation with BREW MP and remove OwnPtrBrew.
+
+ * wtf/OwnPtrBrew.cpp: Added.
+ (WTF::deleteOwnedPtr):
+ * wtf/OwnPtrCommon.h:
+ * wtf/brew/OwnPtrBrew.cpp: Removed.
+ * wtf/brew/OwnPtrBrew.h: Removed.
+
+2010-03-06 Patrick Gansterer <paroga@paroga.com>
+
+ Reviewed by Eric Seidel.
+
+ Implemented JIT_OPTIMIZE_NATIVE_CALL for WinCE
+ https://bugs.webkit.org/show_bug.cgi?id=33426
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::privateCompileCTIMachineTrampolines):
+
+2010-03-05 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by NOBODY (build fix).
+
+ Add enw exports to windows
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-03-05 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ JSC should cache int to Identifier conversion as it does for ordinary strings
+ https://bugs.webkit.org/show_bug.cgi?id=35814
+
+ Make the NumericStrings cache cache unsigned ints in addition to signed.
+ We keep them separate from the int cache as it both simplifies code, and
+ also because the unsigned path is exclusive to property access and therefore
+ seems to have different usage patterns.
+
+ The primary trigger for the unsigned to Identifier propertyName conversion
+ is the construction of array-like objects out of normal objects. Given these
+ tend to be relative small numbers, and the array-like behaviour lends itself
+ to sequential values this patch also adds a non-colliding cache for all small
+ numbers.
+
+ * JavaScriptCore.exp:
+ * runtime/Identifier.cpp:
+ (JSC::Identifier::from):
+ * runtime/Identifier.h:
+ * runtime/NumericStrings.h:
+ (JSC::NumericStrings::add):
+ (JSC::NumericStrings::lookup):
+ (JSC::NumericStrings::lookupSmallString):
+
+2010-03-03 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Allow static property getters to interact with JSCs caching
+ https://bugs.webkit.org/show_bug.cgi?id=35716
+
+ Add new opcodes for handling cached lookup of static value getters.
+ More or less the same as with JS getters, all that changes is that
+ instead of calling through a JSFunction we always know that we have
+ a C function to call.
+
+ For the patching routines in the JIT we now need to pass a few
+ new parameters to allow us to pass enough information to the stub
+ function to allow us to call the C function correctly. Logically
+ this shouldn't actually be necessary as all of these functions ignore
+ the identifier, but removing the ident parameter would require
+ somewhat involved changes to the way we implement getOwnPropertySlot,
+ etc.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dump):
+ (JSC::CodeBlock::derefStructures):
+ (JSC::CodeBlock::refStructures):
+ * bytecode/Instruction.h:
+ (JSC::Instruction::Instruction):
+ (JSC::Instruction::):
+ * bytecode/Opcode.h:
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::tryCacheGetByID):
+ (JSC::Interpreter::privateExecute):
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileMainPass):
+ * jit/JIT.h:
+ (JSC::JIT::compileGetByIdProto):
+ (JSC::JIT::compileGetByIdSelfList):
+ (JSC::JIT::compileGetByIdProtoList):
+ (JSC::JIT::compileGetByIdChainList):
+ (JSC::JIT::compileGetByIdChain):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::privateCompileGetByIdProto):
+ (JSC::JIT::privateCompileGetByIdSelfList):
+ (JSC::JIT::privateCompileGetByIdProtoList):
+ (JSC::JIT::privateCompileGetByIdChainList):
+ (JSC::JIT::privateCompileGetByIdChain):
+ * jit/JITPropertyAccess32_64.cpp:
+ (JSC::JIT::privateCompileGetByIdProto):
+ (JSC::JIT::privateCompileGetByIdSelfList):
+ (JSC::JIT::privateCompileGetByIdProtoList):
+ (JSC::JIT::privateCompileGetByIdChainList):
+ (JSC::JIT::privateCompileGetByIdChain):
+ * jit/JITStubs.cpp:
+ (JSC::JITThunks::tryCacheGetByID):
+ (JSC::DEFINE_STUB_FUNCTION):
+ * jit/JITStubs.h:
+ (JSC::):
+ * runtime/JSFunction.cpp:
+ (JSC::JSFunction::getOwnPropertySlot):
+ * runtime/Lookup.h:
+ (JSC::getStaticPropertySlot):
+ (JSC::getStaticValueSlot):
+ * runtime/PropertySlot.h:
+ (JSC::PropertySlot::):
+ (JSC::PropertySlot::PropertySlot):
+ (JSC::PropertySlot::cachedPropertyType):
+ (JSC::PropertySlot::isCacheable):
+ (JSC::PropertySlot::isCacheableValue):
+ (JSC::PropertySlot::setValueSlot):
+ (JSC::PropertySlot::setCacheableCustom):
+ (JSC::PropertySlot::setGetterSlot):
+ (JSC::PropertySlot::setCacheableGetterSlot):
+ (JSC::PropertySlot::clearOffset):
+ (JSC::PropertySlot::customGetter):
+
+2010-03-04 Shinichiro Hamaji <hamaji@chromium.org>
+
+ Unreviewed. Remove a non-ASCII character introduced in the following bug.
+
+ put_by_id does will incorrectly cache writes where a specific value exists, where at the point of caching the same value is being written.
+ https://bugs.webkit.org/show_bug.cgi?id=35537
+
+ * runtime/JSObject.h:
+ (JSC::JSObject::putDirectInternal):
+
+2010-03-04 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
+
+ Reviewed by Tor Arne Vestbø.
+
+ [Qt] Make the OUTPUT_DIR variable in qmake projects independent of build-webkit's logic.
+
+ This also allows shadow builds relying only on qmake to work properly.
+ * jsc.pro:
+ * qt/api/QtScript.pro:
+ * qt/tests/qscriptengine/qscriptengine.pro:
+ * qt/tests/qscriptvalue/qscriptvalue.pro:
+ * qt/tests/tests.pri:
+
+2010-03-03 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ QScriptValue::isObject fix.
+
+ Fix broken internal state evaluation from JSValue to JSNative / JSObject.
+ New function was introduced which should take care about promoting
+ JSValue state inside QScriptValuePrivate. It should be used instead of a
+ direct JSC C API call.
+
+ The bug exposed a weakness in autotest suite, as the QScriptValuePrivate
+ is based on state machine with lazy state evaluation, there is a possibility
+ that serial sequencial calls to the same public const function could return
+ different results. The patch fix the issue.
+
+ [Qt] Sometimes QScriptValue::isObject returns an incorrect value
+ https://bugs.webkit.org/show_bug.cgi?id=35387
+
+ * qt/api/qscriptvalue_p.h:
+ (QScriptValuePrivate::isBool):
+ (QScriptValuePrivate::isNumber):
+ (QScriptValuePrivate::isNull):
+ (QScriptValuePrivate::isString):
+ (QScriptValuePrivate::isUndefined):
+ (QScriptValuePrivate::isError):
+ (QScriptValuePrivate::isObject):
+ (QScriptValuePrivate::isFunction):
+ (QScriptValuePrivate::call):
+ (QScriptValuePrivate::refineJSValue):
+ * qt/tests/qscriptvalue/tst_qscriptvalue_generated.cpp:
+ (tst_QScriptValue::initScriptValues):
+ (tst_QScriptValue::isValid_makeData):
+ (tst_QScriptValue::isValid_test):
+ (tst_QScriptValue::isBool_makeData):
+ (tst_QScriptValue::isBool_test):
+ (tst_QScriptValue::isBoolean_makeData):
+ (tst_QScriptValue::isBoolean_test):
+ (tst_QScriptValue::isNumber_makeData):
+ (tst_QScriptValue::isNumber_test):
+ (tst_QScriptValue::isFunction_test):
+ (tst_QScriptValue::isNull_makeData):
+ (tst_QScriptValue::isNull_test):
+ (tst_QScriptValue::isString_makeData):
+ (tst_QScriptValue::isString_test):
+ (tst_QScriptValue::isUndefined_makeData):
+ (tst_QScriptValue::isUndefined_test):
+ (tst_QScriptValue::isObject_makeData):
+ (tst_QScriptValue::isObject_test):
+ (tst_QScriptValue::toString_makeData):
+ (tst_QScriptValue::toString_test):
+ (tst_QScriptValue::toNumber_makeData):
+ (tst_QScriptValue::toNumber_test):
+ (tst_QScriptValue::toBool_makeData):
+ (tst_QScriptValue::toBool_test):
+ (tst_QScriptValue::toBoolean_makeData):
+ (tst_QScriptValue::toBoolean_test):
+ (tst_QScriptValue::toInteger_makeData):
+ (tst_QScriptValue::toInteger_test):
+ (tst_QScriptValue::toInt32_makeData):
+ (tst_QScriptValue::toInt32_test):
+ (tst_QScriptValue::toUInt32_makeData):
+ (tst_QScriptValue::toUInt32_test):
+ (tst_QScriptValue::toUInt16_makeData):
+ (tst_QScriptValue::toUInt16_test):
+
+2010-03-03 Chao-ying Fu <fu@mips.com>
+
+ Reviewed by Gavin Barraclough.
+
+ MIPS JIT Supports
+ https://bugs.webkit.org/show_bug.cgi?id=30144
+
+ The following changes enable MIPS YARR and YARR_JIT.
+
+ * assembler/AbstractMacroAssembler.h:
+ (JSC::AbstractMacroAssembler::Imm32::Imm32):
+ * assembler/MIPSAssembler.h: Added.
+ (JSC::MIPSRegisters::):
+ (JSC::MIPSAssembler::MIPSAssembler):
+ (JSC::MIPSAssembler::):
+ (JSC::MIPSAssembler::JmpSrc::JmpSrc):
+ (JSC::MIPSAssembler::JmpDst::JmpDst):
+ (JSC::MIPSAssembler::JmpDst::isUsed):
+ (JSC::MIPSAssembler::JmpDst::used):
+ (JSC::MIPSAssembler::emitInst):
+ (JSC::MIPSAssembler::nop):
+ (JSC::MIPSAssembler::loadDelayNop):
+ (JSC::MIPSAssembler::copDelayNop):
+ (JSC::MIPSAssembler::move):
+ (JSC::MIPSAssembler::li):
+ (JSC::MIPSAssembler::lui):
+ (JSC::MIPSAssembler::addiu):
+ (JSC::MIPSAssembler::addu):
+ (JSC::MIPSAssembler::subu):
+ (JSC::MIPSAssembler::mult):
+ (JSC::MIPSAssembler::mfhi):
+ (JSC::MIPSAssembler::mflo):
+ (JSC::MIPSAssembler::mul):
+ (JSC::MIPSAssembler::andInsn):
+ (JSC::MIPSAssembler::andi):
+ (JSC::MIPSAssembler::nor):
+ (JSC::MIPSAssembler::orInsn):
+ (JSC::MIPSAssembler::ori):
+ (JSC::MIPSAssembler::xorInsn):
+ (JSC::MIPSAssembler::xori):
+ (JSC::MIPSAssembler::slt):
+ (JSC::MIPSAssembler::sltu):
+ (JSC::MIPSAssembler::sltiu):
+ (JSC::MIPSAssembler::sll):
+ (JSC::MIPSAssembler::sllv):
+ (JSC::MIPSAssembler::sra):
+ (JSC::MIPSAssembler::srav):
+ (JSC::MIPSAssembler::lw):
+ (JSC::MIPSAssembler::lwl):
+ (JSC::MIPSAssembler::lwr):
+ (JSC::MIPSAssembler::lhu):
+ (JSC::MIPSAssembler::sw):
+ (JSC::MIPSAssembler::jr):
+ (JSC::MIPSAssembler::jalr):
+ (JSC::MIPSAssembler::jal):
+ (JSC::MIPSAssembler::bkpt):
+ (JSC::MIPSAssembler::bgez):
+ (JSC::MIPSAssembler::bltz):
+ (JSC::MIPSAssembler::beq):
+ (JSC::MIPSAssembler::bne):
+ (JSC::MIPSAssembler::bc1t):
+ (JSC::MIPSAssembler::bc1f):
+ (JSC::MIPSAssembler::newJmpSrc):
+ (JSC::MIPSAssembler::appendJump):
+ (JSC::MIPSAssembler::addd):
+ (JSC::MIPSAssembler::subd):
+ (JSC::MIPSAssembler::muld):
+ (JSC::MIPSAssembler::lwc1):
+ (JSC::MIPSAssembler::ldc1):
+ (JSC::MIPSAssembler::swc1):
+ (JSC::MIPSAssembler::sdc1):
+ (JSC::MIPSAssembler::mtc1):
+ (JSC::MIPSAssembler::mfc1):
+ (JSC::MIPSAssembler::truncwd):
+ (JSC::MIPSAssembler::cvtdw):
+ (JSC::MIPSAssembler::ceqd):
+ (JSC::MIPSAssembler::cngtd):
+ (JSC::MIPSAssembler::cnged):
+ (JSC::MIPSAssembler::cltd):
+ (JSC::MIPSAssembler::cled):
+ (JSC::MIPSAssembler::cueqd):
+ (JSC::MIPSAssembler::coled):
+ (JSC::MIPSAssembler::coltd):
+ (JSC::MIPSAssembler::culed):
+ (JSC::MIPSAssembler::cultd):
+ (JSC::MIPSAssembler::label):
+ (JSC::MIPSAssembler::align):
+ (JSC::MIPSAssembler::getRelocatedAddress):
+ (JSC::MIPSAssembler::getDifferenceBetweenLabels):
+ (JSC::MIPSAssembler::size):
+ (JSC::MIPSAssembler::executableCopy):
+ (JSC::MIPSAssembler::getCallReturnOffset):
+ (JSC::MIPSAssembler::linkJump):
+ (JSC::MIPSAssembler::linkCall):
+ (JSC::MIPSAssembler::linkPointer):
+ (JSC::MIPSAssembler::relinkJump):
+ (JSC::MIPSAssembler::relinkCall):
+ (JSC::MIPSAssembler::repatchInt32):
+ (JSC::MIPSAssembler::repatchPointer):
+ (JSC::MIPSAssembler::repatchLoadPtrToLEA):
+ (JSC::MIPSAssembler::relocateJumps):
+ (JSC::MIPSAssembler::linkWithOffset):
+ (JSC::MIPSAssembler::linkCallInternal):
+ * assembler/MacroAssembler.h:
+ * assembler/MacroAssemblerMIPS.h: Added.
+ (JSC::MacroAssemblerMIPS::MacroAssemblerMIPS):
+ (JSC::MacroAssemblerMIPS::):
+ (JSC::MacroAssemblerMIPS::add32):
+ (JSC::MacroAssemblerMIPS::and32):
+ (JSC::MacroAssemblerMIPS::lshift32):
+ (JSC::MacroAssemblerMIPS::mul32):
+ (JSC::MacroAssemblerMIPS::not32):
+ (JSC::MacroAssemblerMIPS::or32):
+ (JSC::MacroAssemblerMIPS::rshift32):
+ (JSC::MacroAssemblerMIPS::sub32):
+ (JSC::MacroAssemblerMIPS::xor32):
+ (JSC::MacroAssemblerMIPS::load32):
+ (JSC::MacroAssemblerMIPS::load32WithUnalignedHalfWords):
+ (JSC::MacroAssemblerMIPS::load32WithAddressOffsetPatch):
+ (JSC::MacroAssemblerMIPS::loadPtrWithPatchToLEA):
+ (JSC::MacroAssemblerMIPS::loadPtrWithAddressOffsetPatch):
+ (JSC::MacroAssemblerMIPS::load16):
+ (JSC::MacroAssemblerMIPS::store32WithAddressOffsetPatch):
+ (JSC::MacroAssemblerMIPS::store32):
+ (JSC::MacroAssemblerMIPS::supportsFloatingPoint):
+ (JSC::MacroAssemblerMIPS::supportsFloatingPointTruncate):
+ (JSC::MacroAssemblerMIPS::pop):
+ (JSC::MacroAssemblerMIPS::push):
+ (JSC::MacroAssemblerMIPS::move):
+ (JSC::MacroAssemblerMIPS::swap):
+ (JSC::MacroAssemblerMIPS::signExtend32ToPtr):
+ (JSC::MacroAssemblerMIPS::zeroExtend32ToPtr):
+ (JSC::MacroAssemblerMIPS::branch32):
+ (JSC::MacroAssemblerMIPS::branch32WithUnalignedHalfWords):
+ (JSC::MacroAssemblerMIPS::branch16):
+ (JSC::MacroAssemblerMIPS::branchTest32):
+ (JSC::MacroAssemblerMIPS::jump):
+ (JSC::MacroAssemblerMIPS::branchAdd32):
+ (JSC::MacroAssemblerMIPS::branchMul32):
+ (JSC::MacroAssemblerMIPS::branchSub32):
+ (JSC::MacroAssemblerMIPS::breakpoint):
+ (JSC::MacroAssemblerMIPS::nearCall):
+ (JSC::MacroAssemblerMIPS::call):
+ (JSC::MacroAssemblerMIPS::ret):
+ (JSC::MacroAssemblerMIPS::set32):
+ (JSC::MacroAssemblerMIPS::setTest32):
+ (JSC::MacroAssemblerMIPS::moveWithPatch):
+ (JSC::MacroAssemblerMIPS::branchPtrWithPatch):
+ (JSC::MacroAssemblerMIPS::storePtrWithPatch):
+ (JSC::MacroAssemblerMIPS::tailRecursiveCall):
+ (JSC::MacroAssemblerMIPS::makeTailRecursiveCall):
+ (JSC::MacroAssemblerMIPS::loadDouble):
+ (JSC::MacroAssemblerMIPS::storeDouble):
+ (JSC::MacroAssemblerMIPS::addDouble):
+ (JSC::MacroAssemblerMIPS::subDouble):
+ (JSC::MacroAssemblerMIPS::mulDouble):
+ (JSC::MacroAssemblerMIPS::convertInt32ToDouble):
+ (JSC::MacroAssemblerMIPS::insertRelaxationWords):
+ (JSC::MacroAssemblerMIPS::branchTrue):
+ (JSC::MacroAssemblerMIPS::branchFalse):
+ (JSC::MacroAssemblerMIPS::branchEqual):
+ (JSC::MacroAssemblerMIPS::branchNotEqual):
+ (JSC::MacroAssemblerMIPS::branchDouble):
+ (JSC::MacroAssemblerMIPS::branchTruncateDoubleToInt32):
+ (JSC::MacroAssemblerMIPS::linkCall):
+ (JSC::MacroAssemblerMIPS::repatchCall):
+ * jit/ExecutableAllocator.h:
+ (JSC::ExecutableAllocator::cacheFlush):
+ * wtf/Platform.h:
+ * yarr/RegexJIT.cpp:
+ (JSC::Yarr::RegexGenerator::generateEnter):
+ (JSC::Yarr::RegexGenerator::generateReturn):
+
+2010-03-03 Steve Falkenburg <sfalken@apple.com>
+
+ Windows build fix.
+
+ * JavaScriptCore.vcproj/jsc/jsc.vcproj:
+ * JavaScriptCore.vcproj/jsc/jscCommon.vsprops:
+
+2010-03-03 Steve Falkenburg <sfalken@apple.com>
+
+ Windows build fix.
+
+ * JavaScriptCore.vcproj/jsc/jsc.vcproj:
+
+2010-03-03 Mark Rowe <mrowe@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Add virtual memory tags for TCMalloc and WebCore's purgeable buffers.
+
+ * wtf/TCSystemAlloc.cpp:
+ (TryMmap): Use the VM tag.
+ * wtf/VMTags.h: Make use of VM_MEMORY_TCMALLOC and VM_MEMORY_WEBCORE_PURGEABLE_BUFFERS.
+
+2010-03-03 Steve Falkenburg <sfalken@apple.com>
+
+ Rubber stamped by Adam Roben.
+
+ Fix bogus xcopy that was polluting source tree at build time.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
+
+2010-03-02 Fridrich Strba <fridrich.strba@bluewin.ch>
+
+ Reviewed by Oliver Hunt.
+
+ Allow building smoothly on win32 and win64 using GCC
+ https://bugs.webkit.org/show_bug.cgi?id=35607
+
+ * jit/JITStubs.h:
+ * runtime/Collector.cpp:
+ (JSC::Heap::allocateBlock):
+ (JSC::Heap::freeBlockPtr):
+ (JSC::currentThreadStackBase):
+
+2010-03-02 Jeremy Orlow <jorlow@chromium.org>
+
+ Reviewed by David Levin.
+
+ Revert database thread changes that are no longer required
+ https://bugs.webkit.org/show_bug.cgi?id=35519
+
+ Jochen Eisinger created 55214 and 55247 to track which database
+ owns which thread. Dmitry suggested that this could also
+ be done via TLS, though. After exploring the options, Jochen
+ chose to go the TLS route, so these patches are no longer needed.
+
+ * wtf/Threading.h:
+ * wtf/ThreadingNone.cpp:
+ (WTF::isMainThread):
+ * wtf/ThreadingPthreads.cpp:
+ (WTF::identifierByPthreadHandle):
+ (WTF::establishIdentifierForPthreadHandle):
+ (WTF::pthreadHandleForIdentifier):
+ (WTF::createThreadInternal):
+ (WTF::currentThread):
+ * wtf/ThreadingWin.cpp:
+ (WTF::threadMap):
+ (WTF::storeThreadHandleByIdentifier):
+ (WTF::threadHandleForIdentifier):
+ (WTF::createThreadInternal):
+
+2010-03-02 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Fix QScriptValue::toString().
+
+ More ECMA Script compliance, especially for values as NaN, Inifinite
+ and really big/small numbers.
+
+ [Qt] QScriptValue::toString() returns incorrect values
+ https://bugs.webkit.org/show_bug.cgi?id=34850
+
+ * qt/api/qscriptconverter_p.h:
+ (QScriptConverter::toString):
+ * qt/api/qscriptvalue_p.h:
+ (QScriptValuePrivate::toString):
+ * qt/tests/qscriptvalue/tst_qscriptvalue.cpp:
+ * qt/tests/qscriptvalue/tst_qscriptvalue.h:
+ * qt/tests/qscriptvalue/tst_qscriptvalue_generated.cpp:
+ (tst_QScriptValue::toString_initData):
+ (tst_QScriptValue::toString_makeData):
+ (tst_QScriptValue::toString_test):
+
+2010-03-02 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Introduce a new class; QScriptString.
+
+ The QScriptString class should act as a handle to "interned"
+ strings in a QScriptEngine.
+
+ [Qt] QtScript should provide QScriptString
+ https://bugs.webkit.org/show_bug.cgi?id=34843
+
+ * qt/api/QtScript.pro:
+ * qt/api/qscriptengine.cpp:
+ (QScriptEngine::toStringHandle):
+ * qt/api/qscriptengine.h:
+ * qt/api/qscriptengine_p.h:
+ (QScriptEnginePrivate::toStringHandle):
+ * qt/api/qscriptstring.cpp: Added.
+ (QScriptString::QScriptString):
+ (QScriptString::~QScriptString):
+ (QScriptString::operator=):
+ (QScriptString::isValid):
+ (QScriptString::operator==):
+ (QScriptString::operator!=):
+ (QScriptString::toArrayIndex):
+ (QScriptString::toString):
+ (QScriptString::operator QString):
+ (qHash):
+ * qt/api/qscriptstring.h: Added.
+ * qt/api/qscriptstring_p.h: Added.
+ (QScriptStringPrivate::QScriptStringPrivate):
+ (QScriptStringPrivate::~QScriptStringPrivate):
+ (QScriptStringPrivate::get):
+ (QScriptStringPrivate::isValid):
+ (QScriptStringPrivate::operator==):
+ (QScriptStringPrivate::operator!=):
+ (QScriptStringPrivate::toArrayIndex):
+ (QScriptStringPrivate::toString):
+ (QScriptStringPrivate::id):
+ * qt/tests/qscriptstring/qscriptstring.pro: Added.
+ * qt/tests/qscriptstring/tst_qscriptstring.cpp: Added.
+ (tst_QScriptString::tst_QScriptString):
+ (tst_QScriptString::~tst_QScriptString):
+ (tst_QScriptString::test):
+ (tst_QScriptString::hash):
+ (tst_QScriptString::toArrayIndex_data):
+ (tst_QScriptString::toArrayIndex):
+ * qt/tests/tests.pro:
+
+2010-03-02 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by NOBODY (Build fix).
+
+ Export function on windows.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-03-01 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Refactor named getter function signature to be in line with indexing getter signature
+ https://bugs.webkit.org/show_bug.cgi?id=35563
+
+ This removes the PropertySlot argument from getter functions, and makes them directly
+ pass the slot base. This makes the semantics for the functions match that of the
+ indexing getters.
+
+ On the down side, this means that we can no longer simply use a proxy function for
+ JS getters, so we now add another marker value to indicate that a getter is present
+ and branch accordingly.
+
+ Against all rationality sunspider reports this as a perf win, but i suspect it's just noise.
+
+ * API/JSCallbackObject.h:
+ * API/JSCallbackObjectFunctions.h:
+ (JSC::::staticValueGetter):
+ (JSC::::staticFunctionGetter):
+ (JSC::::callbackGetter):
+ * JavaScriptCore.exp:
+ * runtime/JSActivation.cpp:
+ (JSC::JSActivation::argumentsGetter):
+ * runtime/JSActivation.h:
+ * runtime/JSFunction.cpp:
+ (JSC::JSFunction::argumentsGetter):
+ (JSC::JSFunction::callerGetter):
+ (JSC::JSFunction::lengthGetter):
+ * runtime/JSFunction.h:
+ * runtime/NumberConstructor.cpp:
+ (JSC::numberConstructorNaNValue):
+ (JSC::numberConstructorNegInfinity):
+ (JSC::numberConstructorPosInfinity):
+ (JSC::numberConstructorMaxValue):
+ (JSC::numberConstructorMinValue):
+ * runtime/PropertySlot.cpp:
+ (JSC::PropertySlot::functionGetter):
+ * runtime/PropertySlot.h:
+ (JSC::PropertySlot::getValue):
+ (JSC::PropertySlot::setGetterSlot):
+ (JSC::PropertySlot::setCacheableGetterSlot):
+ * runtime/RegExpConstructor.cpp:
+ (JSC::regExpConstructorDollar1):
+ (JSC::regExpConstructorDollar2):
+ (JSC::regExpConstructorDollar3):
+ (JSC::regExpConstructorDollar4):
+ (JSC::regExpConstructorDollar5):
+ (JSC::regExpConstructorDollar6):
+ (JSC::regExpConstructorDollar7):
+ (JSC::regExpConstructorDollar8):
+ (JSC::regExpConstructorDollar9):
+ (JSC::regExpConstructorInput):
+ (JSC::regExpConstructorMultiline):
+ (JSC::regExpConstructorLastMatch):
+ (JSC::regExpConstructorLastParen):
+ (JSC::regExpConstructorLeftContext):
+ (JSC::regExpConstructorRightContext):
+ * runtime/RegExpObject.cpp:
+ (JSC::regExpObjectGlobal):
+ (JSC::regExpObjectIgnoreCase):
+ (JSC::regExpObjectMultiline):
+ (JSC::regExpObjectSource):
+ (JSC::regExpObjectLastIndex):
+
+2010-03-01 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ PropertySlot::getValue(ExecState, unsigned) unnecessarily converts index to an Identifier
+ https://bugs.webkit.org/show_bug.cgi?id=35561
+
+ Fix this by defining a separate property getter function for index getters. This allows
+ us to pass an unsigned number without the conversion to an Identifier. We then update
+ setCustomIndex to take this new getter type.
+
+ * runtime/PropertySlot.h:
+ (JSC::PropertySlot::getValue):
+ (JSC::PropertySlot::setCustom):
+ (JSC::PropertySlot::setCustomIndex):
+
+2010-03-01 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Bug 35537 - put_by_id does will incorrectly cache writes where a specific value exists,
+ where at the point of caching the same value is being written.
+
+ When performing a put_by_id that is replacing a property already present on the object,
+ there are three interesting cases regarding the state of the specific value:
+
+ (1) No specific value set - nothing to do, leave the structure in it's current state,
+ can cache.
+ (2) A specific value was set, the new put is not of a specified value (i.e. function),
+ or is of a different specific value - in these cases we need to perform a despecifying
+ transition to clear the specific value in the structure, but having done so this is a
+ normal property so as such we can again cache normally.
+ (3) A specific value was set, and we are overwriting with the same value - in these cases
+ leave the structure unchanged, but since a specific value is set we cannot cache this
+ put (we would need the JIT to dynamically check the value being written matched).
+
+ Unfortunately, the current behaviour does not match this. the checks for a specific value
+ being present & the value matching are combined in such a way that in case (2), above we
+ will unnecessarily prevent the transition being cached, but in case (3) we will incorrectly
+ fail to prevent caching.
+
+ The bug exposes itself if multiple puts of the same specific value are performed to a
+ property, and erroneously the put is allowed to be cached by the JIT. Method checks may be
+ generated caching calls of this structure. Subsequent puts performed from JIT code may
+ write different values without triggering a despecify transition, and as such cached method
+ checks will continue to pass, despite the value having changed.
+
+ * runtime/JSObject.h:
+ (JSC::JSObject::putDirectInternal):
+
+2010-03-01 Tor Arne Vestbø <tor.arne.vestbo@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Fix the Qt build on Mac OS X/Cocoa 64-bit
+
+ * JavaScriptCore.pri: Add missing implementation file to resolve JSC symbols
+
+2010-02-26 Gavin Barraclough <barraclough@apple.com>
+
+ Rubber Stamped by Geoff Garen.
+
+ Remove wrec. All builds should have switched to yarr by now.
+
+ * Android.mk:
+ * GNUmakefile.am:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.pri:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
+ * JavaScriptCore.vcproj/jsc/jscCommon.vsprops:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * runtime/RegExp.cpp:
+ (JSC::RegExp::match):
+ * runtime/RegExp.h:
+ * wrec: Removed.
+ * wrec/CharacterClass.cpp: Removed.
+ * wrec/CharacterClass.h: Removed.
+ * wrec/CharacterClassConstructor.cpp: Removed.
+ * wrec/CharacterClassConstructor.h: Removed.
+ * wrec/Escapes.h: Removed.
+ * wrec/Quantifier.h: Removed.
+ * wrec/WREC.cpp: Removed.
+ * wrec/WREC.h: Removed.
+ * wrec/WRECFunctors.cpp: Removed.
+ * wrec/WRECFunctors.h: Removed.
+ * wrec/WRECGenerator.cpp: Removed.
+ * wrec/WRECGenerator.h: Removed.
+ * wrec/WRECParser.cpp: Removed.
+ * wrec/WRECParser.h: Removed.
+ * wscript:
+
+2010-02-26 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Make the lookup table generator include an explicit cast to expected
+ type of the function. We do this because otherwise the blind intptr_t
+ cast that is subsequently applied allows incorrectly typed functions
+ to be inserted into the table, where they will only fail at runtime.
+ This change makes such errors produce a compile time failure.
+
+ * create_hash_table:
+
+2010-02-26 Janne Koskinen <janne.p.koskinen@digia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Symbian specific getCPUTime implemetation
+ https://bugs.webkit.org/show_bug.cgi?id=34742
+
+ Default implementation doesn't work on Symbian devices.
+ This change adds a proper implementation by
+ asking thread execution time from the current thread.
+
+ * runtime/TimeoutChecker.cpp:
+ (JSC::getCPUTime):
+
+2010-02-25 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Anders Carlsson.
+
+ https://bugs.webkit.org/show_bug.cgi?id=35406
+ <rdar://problem/6945502> Make generic array methods work with JavaArray
+
+ Renamed lazyCreationData to subclassData. This is extra data that can be used by JSArray
+ subclasses (you can't add new data members, because it wouldn't fit in JSCell otherwise).
+
+ * JavaScriptCore.exp:
+ * runtime/JSArray.cpp:
+ (JSC::JSArray::JSArray):
+ (JSC::JSArray::subclassData):
+ (JSC::JSArray::setSubclassData):
+ * runtime/JSArray.h:
+ * runtime/RegExpConstructor.cpp:
+ (JSC::RegExpMatchesArray::RegExpMatchesArray):
+ (JSC::RegExpMatchesArray::~RegExpMatchesArray):
+ (JSC::RegExpMatchesArray::fillArrayInstance):
+ * runtime/RegExpMatchesArray.h:
+ (JSC::RegExpMatchesArray::getOwnPropertySlot):
+ (JSC::RegExpMatchesArray::getOwnPropertyDescriptor):
+ (JSC::RegExpMatchesArray::put):
+ (JSC::RegExpMatchesArray::deleteProperty):
+ (JSC::RegExpMatchesArray::getOwnPropertyNames):
+
+2010-02-25 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ JSC crashes like crazy in the JSPropertyNameIterator destructor
+
+ Add back null check of m_cachedStructure. Curse last minute changes.
+
+ * runtime/JSPropertyNameIterator.cpp:
+ (JSC::JSPropertyNameIterator::~JSPropertyNameIterator):
+
+2010-02-25 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Race condition in JSPropertyNameIterator and Structure destruction
+ https://bugs.webkit.org/show_bug.cgi?id=35398
+
+ JSPropertyNameIterator and Structure have a cyclic dependency that they
+ manage by clearing the appropriate reference in each other during their
+ destruction. However if the Structure is destroyed while the
+ JSPropertyNameIterator is dead but not yet finalized the Structures
+ WeakGCPtr will return null, and so prevent Structure from clearing
+ the m_cachedStructure pointer of the iterator. When the iterator is
+ then finalised the m_cachedStructure is invalid, and the attempt to
+ clear the structures back reference fails.
+
+ To fix this we simply make JSPropertyNameIterator keep the Structure
+ alive, using the weak pointer to break the ref cycle.
+
+ * runtime/JSPropertyNameIterator.cpp:
+ (JSC::JSPropertyNameIterator::~JSPropertyNameIterator):
+ The iterator now keeps m_cachedStructure alive itself, so no longer needs
+ to check for it being cleared
+ * runtime/JSPropertyNameIterator.h:
+ (JSC::JSPropertyNameIterator::setCachedStructure):
+ Add an assertion to ensure correct usage
+ (JSC::JSPropertyNameIterator::cachedStructure):
+ Add .get()
+ * runtime/Structure.cpp:
+ (JSC::Structure::~Structure):
+ Add an assertion that our iterator isn't already dead, and remove
+ the now unnecessary attempt to clear the ref in the iterator
+ * runtime/WeakGCPtr.h:
+ (JSC::WeakGCPtr::hasDeadObject):
+ An assert-only function to allow us to assert correct behaviour
+ in the Structure destructor
+
+2010-02-25 Jochen Eisinger <jochen@chromium.org>
+
+ Reviewed by Jeremy Orlow.
+
+ Make the context that was passed to the ThreadFunction accessible.
+ https://bugs.webkit.org/show_bug.cgi?id=35379
+
+ When a database is opened, right now you
+ don't have any context from where it is opened. The problem is that
+ the actual calls that open a database go through the sqlite3 vfs
+ layer, so there's no easy way to pass this function down to to
+ platform/sql/chromium/SQLFileSystemChromium*.cpp
+
+ This patch will allow you to get from anywhere within webkit a pointer
+ to the Thread object that actually created the thread you're currently
+ on (in case of the database, this can be either a thread forked of
+ from the main thread or from a worker thread), and query the object
+ for context information.
+
+ * wtf/Threading.h:
+ * wtf/ThreadingNone.cpp:
+ (WTF::threadContext):
+ * wtf/ThreadingPthreads.cpp:
+ (WTF::):
+ (WTF::identifierByPthreadHandle):
+ (WTF::establishIdentifierForPthreadHandle):
+ (WTF::pthreadHandleForIdentifier):
+ (WTF::contextForIdentifier):
+ (WTF::createThreadInternal):
+ (WTF::currentThread):
+ (WTF::threadContext):
+ * wtf/ThreadingWin.cpp:
+ (WTF::):
+ (WTF::threadMap):
+ (WTF::storeThreadHandleByIdentifier):
+ (WTF::threadHandleForIdentifier):
+ (WTF::contextForIdentifier):
+ (WTF::createThreadInternal):
+ (WTF::threadContext):
+
+2010-02-25 Jeremy Orlow <jorlow@chromium.org>
+
+ Reverting to re-submit with better change log.
+
+ * wtf/Threading.h:
+ * wtf/ThreadingNone.cpp:
+ (WTF::isMainThread):
+ * wtf/ThreadingPthreads.cpp:
+ (WTF::identifierByPthreadHandle):
+ (WTF::establishIdentifierForPthreadHandle):
+ (WTF::pthreadHandleForIdentifier):
+ (WTF::createThreadInternal):
+ (WTF::currentThread):
+ * wtf/ThreadingWin.cpp:
+ (WTF::threadMap):
+ (WTF::storeThreadHandleByIdentifier):
+ (WTF::threadHandleForIdentifier):
+ (WTF::createThreadInternal):
+
+2010-02-25 Jochen Eisinger <jochen@chromium.org>
+
+ Reviewed by Jeremy Orlow.
+
+ Make the context that was passed to the ThreadFunction accessible.
+ https://bugs.webkit.org/show_bug.cgi?id=35379
+
+ * wtf/Threading.h:
+ * wtf/ThreadingNone.cpp:
+ (WTF::threadContext):
+ * wtf/ThreadingPthreads.cpp:
+ (WTF::):
+ (WTF::identifierByPthreadHandle):
+ (WTF::establishIdentifierForPthreadHandle):
+ (WTF::pthreadHandleForIdentifier):
+ (WTF::contextForIdentifier):
+ (WTF::createThreadInternal):
+ (WTF::currentThread):
+ (WTF::threadContext):
+ * wtf/ThreadingWin.cpp:
+ (WTF::):
+ (WTF::threadMap):
+ (WTF::storeThreadHandleByIdentifier):
+ (WTF::threadHandleForIdentifier):
+ (WTF::contextForIdentifier):
+ (WTF::createThreadInternal):
+ (WTF::threadContext):
+
+2010-02-24 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Geoffrey Garen.
+
+ [REGRESSION in r55185] EXC_BAD_ACCESS on opening inspector.
+ https://bugs.webkit.org/show_bug.cgi?id=35335
+
+ compileGetDirectOffset modifies the contents of the object register
+ when the object is not using the inline storage array. As the object
+ register contains our 'this' pointer we can't allow it to be clobbered.
+ The fix is simply to copy the register into a separate scratch register
+ when we're loading off an object that doesn't use inline storage.
+
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::privateCompileGetByIdSelfList):
+ * jit/JITPropertyAccess32_64.cpp:
+ (JSC::JIT::privateCompileGetByIdSelfList):
+
+2010-02-24 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Speed up getter performance in the jit
+ https://bugs.webkit.org/show_bug.cgi?id=35332
+
+ Implement getter lookup caching in the interpreter.
+ The getter stubs are generated through basically the
+ same code paths as the normal get_by_id caching.
+ Instead of simply loading a property and returning,
+ we load the getter slot, and pass the getter, base value
+ and return address to a shared stub used for getter
+ dispatch.
+
+ * jit/JIT.h:
+ (JSC::JIT::compileGetByIdProto):
+ (JSC::JIT::compileGetByIdSelfList):
+ (JSC::JIT::compileGetByIdProtoList):
+ (JSC::JIT::compileGetByIdChainList):
+ (JSC::JIT::compileGetByIdChain):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::privateCompileGetByIdProto):
+ (JSC::JIT::privateCompileGetByIdSelfList):
+ (JSC::JIT::privateCompileGetByIdProtoList):
+ (JSC::JIT::privateCompileGetByIdChainList):
+ (JSC::JIT::privateCompileGetByIdChain):
+ * jit/JITPropertyAccess32_64.cpp:
+ (JSC::JIT::privateCompileGetByIdProto):
+ (JSC::JIT::privateCompileGetByIdSelfList):
+ (JSC::JIT::privateCompileGetByIdProtoList):
+ (JSC::JIT::privateCompileGetByIdChainList):
+ (JSC::JIT::privateCompileGetByIdChain):
+ * jit/JITStubs.cpp:
+ (JSC::JITThunks::tryCacheGetByID):
+ (JSC::DEFINE_STUB_FUNCTION):
+ * jit/JITStubs.h:
+ (JSC::):
+ * runtime/GetterSetter.h:
+
+2010-02-23 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Web Inspector: Regression: r55027+: Inspector broken
+ https://bugs.webkit.org/show_bug.cgi?id=35253
+
+ op_get_by_id_getter_chain was not passing the correct this parameter.
+ The bug was caused by incorrect use of baseCell instead of baseValue,
+ baseValue contains the original object for the lookup (and hence the
+ correct this object), baseCell is clobbered as part of walking the
+ prototype chain.
+
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::privateExecute):
+
+2010-02-23 Gustavo Noronha Silva <gns@gnome.org>
+
+ Rubber-stamped by Dimitri Glazkov.
+
+ Chromium build fix.
+
+ * JavaScriptCore.gyp/JavaScriptCore.gyp:
+
+2010-02-23 Leandro Pereira <leandro@profusion.mobi>
+
+ Reviewed by Gustavo Noronha Silva.
+
+ Changes references of GOwnPtr to reflect their new place.
+ http://webkit.org/b/35084
+
+ * JavaScriptCore/JavaScriptCore.gypi:
+ * JavaScriptCore/wtf/Threading.h:
+ * JavaScriptCore/wtf/unicode/glib/UnicodeGLib.h:
+
+2010-02-23 Leandro Pereira <leandro@profusion.mobi>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ Adding the EFL implementation of JavaScriptCore.
+ See https://bugs.webkit.org/show_bug.cgi?id=35084 for details.
+
+ * GNUmakefile.am: Updated to reflect the new location of GOwnPtr and
+ GRefPtr.
+ * wtf/efl/MainThreadEfl.cpp: Added.
+ * wtf/gobject/GOwnPtr.cpp: Moved from wtf/gtk.
+ * wtf/gobject/GOwnPtr.h: Moved from wtf/gtk.
+ * wtf/gobject/GRefPtr.cpp: Moved from wtf/gtk.
+ * wtf/gobject/GRefPtr.h: Moved from wtf/gtk.
+
+2010-02-22 Julien Chaffraix <jchaffraix@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ Remove auto_ptr usage in JavaScriptCore.
+ https://bugs.webkit.org/show_bug.cgi?id=35221
+
+ * parser/Nodes.h: Removed now unneeded adopt method.
+ * parser/Parser.cpp: Removed <memory> include as it is not required anymore.
+ * wtf/OwnPtr.h: Removed the constructor from auto_ptr.
+ * wtf/VectorTraits.h: Removed a template specialization for auto_ptr.
+ * wtf/unicode/Collator.h: Made userDefault return a PassOwnPtr.
+ * wtf/unicode/CollatorDefault.cpp:
+ (WTF::Collator::userDefault): Changed the method to match the next signature.
+ * wtf/unicode/icu/CollatorICU.cpp:
+ (WTF::Collator::userDefault): Ditto.
+
+2010-02-22 Huahui Wu <hwu@google.com>
+
+ Reviewed by Eric Seidel.
+
+ Add code that enables SquirrelFish Extreme (a.k.a JSCX, JSC JIT)
+ in Android. It's disabled by default, but is enabled when the
+ enveronment variable ENABLE_JSC_JIT is set to true.
+ https://bugs.webkit.org/show_bug.cgi?id=34855
+
+ * Android.mk:
+ * wtf/Platform.h:
+
+2010-02-22 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ JSStringBuilder should not CRASH if allocation fails, it should throw a JSException.
+
+ * runtime/JSGlobalObjectFunctions.cpp:
+ * runtime/JSStringBuilder.h:
+ (JSC::JSStringBuilder::JSStringBuilder):
+ (JSC::JSStringBuilder::append):
+ (JSC::JSStringBuilder::build):
+ * runtime/StringBuilder.h:
+ (JSC::StringBuilder::build):
+ * wtf/Vector.h:
+ (WTF::VectorBufferBase::tryAllocateBuffer):
+ (WTF::):
+ (WTF::VectorBuffer::tryAllocateBuffer):
+ (WTF::::tryExpandCapacity):
+ (WTF::::tryReserveCapacity):
+ (WTF::::tryAppend):
+
+2010-02-22 Kwang Yul Seo <skyul@company100.net>
+
+ Reviewed by Eric Seidel.
+
+ [BREWMP] Map FastMalloc to BREW memory allocator
+ https://bugs.webkit.org/show_bug.cgi?id=33570
+
+ Use MALLOC macro instead of the standard malloc function.
+ Although RVCT provides malloc, we can't use it in BREW
+ because the loader does not initialize the base address properly.
+
+ * wtf/FastMalloc.cpp:
+ * wtf/brew/SystemMallocBrew.h: Added.
+ (mallocBrew):
+ (callocBrew):
+ (freeBrew):
+ (reallocBrew):
+
+2010-02-22 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk>
+
+ Build fix for make distcheck.
+
+ * GNUmakefile.am:
+
+2010-02-22 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Unreviewed build fix.
+
+ [Qt] Build fix for RVCT.
+
+ Fix after r55024. The "-i" option is for perl not for the
+ script.
+
+ * DerivedSources.pro:
+
+2010-02-21 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Make UString::m_data be const, and make the UChar owned/ref-counted by CrossThreadRefCounted be const too.
+
+ * runtime/UStringImpl.cpp:
+ (JSC::UStringImpl::baseSharedBuffer):
+ (JSC::UStringImpl::~UStringImpl):
+ * runtime/UStringImpl.h:
+ (JSC::UStringImpl::create):
+ (JSC::UStringImpl::data):
+ (JSC::UStringImpl::UStringImpl):
+ * wtf/OwnFastMallocPtr.h:
+ (WTF::OwnFastMallocPtr::~OwnFastMallocPtr):
+
+2010-02-21 Yuta Kitamura <yutak@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ HashMapTranslatorAdapter::translate() needs to set the mapped value.
+
+ HTTPHeaderMap::add(const char*, const String&) does not work
+ https://bugs.webkit.org/show_bug.cgi?id=35227
+
+ * wtf/HashMap.h:
+ (WTF::HashMapTranslatorAdapter::translate):
+
+2010-02-19 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by David Levin.
+
+ Add an ENABLE flag for sandboxed iframes to make it possible to disable it in releases
+ https://bugs.webkit.org/show_bug.cgi?id=35147
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2010-02-19 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ JSString::getIndex() calls value() to resolve the string value (is a rope)
+ to a UString, then passes the result to jsSingleCharacterSubstring without
+ checking for an exception. In case of out-of-memory the returned UString
+ is null(), which may result in an out-of-buounds substring being created.
+ This is bad.
+
+ Simple fix is to be able to get an index from a rope without resolving to
+ UString. This may be a useful optimization in some test cases.
+
+ The same bug exists in some other methods is JSString, these can be fixed
+ by changing them to call getIndex().
+
+ * runtime/JSString.cpp:
+ (JSC::JSString::resolveRope):
+ (JSC::JSString::getStringPropertyDescriptor):
+ * runtime/JSString.h:
+ (JSC::jsSingleCharacterSubstring):
+ (JSC::JSString::getIndex):
+ (JSC::jsSingleCharacterString):
+ (JSC::JSString::getStringPropertySlot):
+ * runtime/UStringImpl.cpp:
+ (JSC::singleCharacterSubstring):
+ * runtime/UStringImpl.h:
+ (JSC::UStringImpl::singleCharacterSubstring):
+
+2010-02-19 Oliver Hunt <oliver@apple.com>
+
+ RS = Gavin Barraclough.
+
+ Split the 32/64 version of JITPropertyAccess into a separate file.
+
+ * GNUmakefile.am:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.pri:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * jit/JITPropertyAccess.cpp:
+ * jit/JITPropertyAccess32_64.cpp: Added.
+ (JSC::JIT::emit_op_put_by_index):
+ (JSC::JIT::emit_op_put_getter):
+ (JSC::JIT::emit_op_put_setter):
+ (JSC::JIT::emit_op_del_by_id):
+ (JSC::JIT::emit_op_method_check):
+ (JSC::JIT::emitSlow_op_method_check):
+ (JSC::JIT::emit_op_get_by_val):
+ (JSC::JIT::emitSlow_op_get_by_val):
+ (JSC::JIT::emit_op_put_by_val):
+ (JSC::JIT::emitSlow_op_put_by_val):
+ (JSC::JIT::emit_op_get_by_id):
+ (JSC::JIT::emitSlow_op_get_by_id):
+ (JSC::JIT::emit_op_put_by_id):
+ (JSC::JIT::emitSlow_op_put_by_id):
+ (JSC::JIT::compileGetByIdHotPath):
+ (JSC::JIT::compileGetByIdSlowCase):
+ (JSC::JIT::compilePutDirectOffset):
+ (JSC::JIT::compileGetDirectOffset):
+ (JSC::JIT::testPrototype):
+ (JSC::JIT::privateCompilePutByIdTransition):
+ (JSC::JIT::patchGetByIdSelf):
+ (JSC::JIT::patchMethodCallProto):
+ (JSC::JIT::patchPutByIdReplace):
+ (JSC::JIT::privateCompilePatchGetArrayLength):
+ (JSC::JIT::privateCompileGetByIdProto):
+ (JSC::JIT::privateCompileGetByIdSelfList):
+ (JSC::JIT::privateCompileGetByIdProtoList):
+ (JSC::JIT::privateCompileGetByIdChainList):
+ (JSC::JIT::privateCompileGetByIdChain):
+ (JSC::JIT::emit_op_get_by_pname):
+ (JSC::JIT::emitSlow_op_get_by_pname):
+
+2010-02-19 Patrick Gansterer <paroga@paroga.com>
+
+ Reviewed by Laszlo Gombos.
+
+ Added additional parameter to create_rvct_stubs
+ for setting the regularexpression prefix.
+ Renamed it because it now works for other platforms too.
+ https://bugs.webkit.org/show_bug.cgi?id=34951
+
+ * DerivedSources.pro:
+ * create_jit_stubs: Copied from JavaScriptCore/create_rvct_stubs.
+ * create_rvct_stubs: Removed.
+
+2010-02-18 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Improve interpreter getter performance
+ https://bugs.webkit.org/show_bug.cgi?id=35138
+
+ Improve the performance of getter dispatch by making it possible
+ for the interpreter to cache the GetterSetter object lookup.
+
+ To do this we simply need to make PropertySlot aware of getters
+ as a potentially cacheable property, and record the base and this
+ objects for a getter access. This allows us to use more-or-less
+ identical code to that used by the normal get_by_id caching, with
+ the dispatch being the only actual difference.
+
+ I'm holding off of implementing this in the JIT until I do some
+ cleanup to try and making coding in the JIT not be as horrible
+ as it is currently.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dump):
+ (JSC::CodeBlock::derefStructures):
+ (JSC::CodeBlock::refStructures):
+ * bytecode/Opcode.h:
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::resolveGlobal):
+ (JSC::Interpreter::tryCacheGetByID):
+ (JSC::Interpreter::privateExecute):
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileMainPass):
+ * jit/JITStubs.cpp:
+ (JSC::JITThunks::tryCacheGetByID):
+ (JSC::DEFINE_STUB_FUNCTION):
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::fillGetterPropertySlot):
+ * runtime/PropertySlot.cpp:
+ (JSC::PropertySlot::functionGetter):
+ * runtime/PropertySlot.h:
+ (JSC::PropertySlot::isGetter):
+ (JSC::PropertySlot::isCacheable):
+ (JSC::PropertySlot::isCacheableValue):
+ (JSC::PropertySlot::setValueSlot):
+ (JSC::PropertySlot::setGetterSlot):
+ (JSC::PropertySlot::setCacheableGetterSlot):
+ (JSC::PropertySlot::clearOffset):
+ (JSC::PropertySlot::thisValue):
+
+2010-02-17 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Fixed a portion of:
+ <rdar://problem/7165917> | https://bugs.webkit.org/show_bug.cgi?id=28676
+ Safari 4 does not release memory back to the operating system fast enough (28676)
+
+ This patch fixes a surprisingly common edge case in which the page heap
+ would have only one free span, but that span would be larger than the
+ minimum free size, so we would decide not to free it, even though it
+ could be as large as 100MB or more!
+
+ SunSpider reports no change on Mac or Windows.
+
+ * wtf/FastMalloc.cpp:
+ (WTF::TCMalloc_PageHeap::scavenge): Call shouldContinueScavenging() instead
+ of doing the math ourselves. Don't keep a local value for pagesDecommitted
+ because that lets free_committed_pages_ be wrong temporarily. Instead,
+ update free_committed_pages_ as we go. ASSERT that we aren't releasing
+ a span that has already been released, because we think this is impossible.
+ Finally, don't be afraid to release all free memory in the page heap when
+ scavenging. We only scavenge after 5 seconds of the application's working
+ set not growing, and we keep both thread caches and a central cache on
+ top of the page heap, so the extra free pages in the page heap were just
+ overkill.
+
+2010-02-17 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ https://bugs.webkit.org/show_bug.cgi?id=35070
+ Addition of 2 strings of length 2^31 may result in a string of length 0.
+
+ Check for overflow when creating a new JSString as a result of an addition
+ or concatenation, throw an out of memory exception.
+
+ * runtime/JSString.h:
+ (JSC::):
+ * runtime/Operations.h:
+ (JSC::jsString):
+
+2010-02-17 Xan Lopez <xlopez@igalia.com>
+
+ Reviewed by Gustavo Noronha.
+
+ [Linux] Webkit incompatible with Java plugins
+ https://bugs.webkit.org/show_bug.cgi?id=24912
+
+ Add support for GFile to GOwnPtr.
+
+ Based on original work by Gustavo Noronha.
+
+ * wtf/gtk/GOwnPtr.cpp:
+ (WTF::GFile):
+ * wtf/gtk/GOwnPtr.h:
+
+2010-02-16 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Mark Rowe.
+
+ Fix a handful of other leaks seen on the buildbot.
+
+ * runtime/UStringImpl.h:
+ (JSC::UStringOrRopeImpl::deref): Delegate through to the subclass version of deref to ensure that
+ the correct cleanup takes place. This function previously featured some code that attempted to
+ skip deletion of static UStringImpl's. Closer inspection revealed that it was in fact equivalent
+ to "if (false)", meaning that UStringImpl's which had their final deref performed via this function
+ were leaked.
+
+2010-02-16 Mark Rowe <mrowe@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Fix a handful of leaks seen on the buildbot.
+
+ * runtime/UStringImpl.h:
+ (JSC::UStringOrRopeImpl::deref): Call URopeImpl::destructNonRecursive rather than delete
+ to ensure that the rope's fibers are also destroyed.
+
+2010-02-16 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ https://bugs.webkit.org/show_bug.cgi?id=34964
+ Leaks tool reports false memory leaks due to Rope implementation.
+
+ A rope is a recursive data structure where each node in the rope holds a set of
+ pointers, each of which may reference either a string (in UStringImpl form) or
+ another rope node. A low bit in each pointer is used to distinguish between
+ rope & string elements, in a fashion similar to the recently-removed
+ PtrAndFlags class (see https://bugs.webkit.org/show_bug.cgi?id=33731 ). Again,
+ this causes a problem for Leaks - refactor to remove the magic pointer
+ mangling.
+
+ Move Rope out from JSString.h and rename to URopeImpl, to match UStringImpl.
+ Give UStringImpl and URopeImpl a common parent class, UStringOrRopeImpl.
+ Repurpose an otherwise invalid permutation to flags (static & should report
+ memory cost) to identify ropes.
+
+ This allows us to change the rope's fibers to interrogate the object rather
+ than storing a bool within the low bits of the pointer (or in some cases the
+ use of a common parent class removes the need to determine the type at all -
+ there is a common interface to ref or get the length of either ropes or strings).
+
+ * API/JSClassRef.cpp:
+ (OpaqueJSClass::OpaqueJSClass):
+ (OpaqueJSClassContextData::OpaqueJSClassContextData):
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::keyForCharacterSwitch):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::privateExecute):
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ * runtime/ArrayPrototype.cpp:
+ (JSC::arrayProtoFuncToString):
+ * runtime/Identifier.cpp:
+ (JSC::Identifier::equal):
+ (JSC::Identifier::addSlowCase):
+ * runtime/JSString.cpp:
+ (JSC::JSString::resolveRope):
+ * runtime/JSString.h:
+ (JSC::):
+ (JSC::RopeBuilder::JSString):
+ (JSC::RopeBuilder::~JSString):
+ (JSC::RopeBuilder::appendStringInConstruct):
+ (JSC::RopeBuilder::appendValueInConstructAndIncrementLength):
+ (JSC::RopeBuilder::JSStringFinalizerStruct::JSStringFinalizerStruct):
+ (JSC::RopeBuilder::JSStringFinalizerStruct::):
+ * runtime/UString.cpp:
+ (JSC::UString::toStrictUInt32):
+ (JSC::equal):
+ * runtime/UString.h:
+ (JSC::UString::isEmpty):
+ (JSC::UString::size):
+ * runtime/UStringImpl.cpp:
+ (JSC::URopeImpl::derefFibersNonRecursive):
+ (JSC::URopeImpl::destructNonRecursive):
+ * runtime/UStringImpl.h:
+ (JSC::UStringOrRopeImpl::isRope):
+ (JSC::UStringOrRopeImpl::length):
+ (JSC::UStringOrRopeImpl::ref):
+ (JSC::UStringOrRopeImpl::):
+ (JSC::UStringOrRopeImpl::operator new):
+ (JSC::UStringOrRopeImpl::UStringOrRopeImpl):
+ (JSC::UStringImpl::adopt):
+ (JSC::UStringImpl::createUninitialized):
+ (JSC::UStringImpl::tryCreateUninitialized):
+ (JSC::UStringImpl::data):
+ (JSC::UStringImpl::cost):
+ (JSC::UStringImpl::deref):
+ (JSC::UStringImpl::UStringImpl):
+ (JSC::UStringImpl::):
+ (JSC::URopeImpl::tryCreateUninitialized):
+ (JSC::URopeImpl::initializeFiber):
+ (JSC::URopeImpl::fiberCount):
+ (JSC::URopeImpl::fibers):
+ (JSC::URopeImpl::deref):
+ (JSC::URopeImpl::URopeImpl):
+ (JSC::URopeImpl::hasOneRef):
+ (JSC::UStringOrRopeImpl::deref):
+
+2010-02-15 Gabor Loki <loki@webkit.org>
+
+ Reviewed by Gavin Barraclough.
+
+ Fix the SP at ctiOpThrowNotCaught on Thumb2 (JSVALUE32)
+ https://bugs.webkit.org/show_bug.cgi?id=34939
+
+ * jit/JITStubs.cpp:
+
+2010-02-15 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (Build Fix!).
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-02-15 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Some general Rope related refactoring.
+
+ Rename Rope::m_ropeLength to m_fiberCount, to be more descriptive.
+ Rename Rope::m_stringLength to simply m_length (since this is the
+ more conventional name for the length of a string). Move append
+ behaviour out into a new RopeBuilder class, so that Rope no longer
+ needs any knowledge of the JSString or UString implementation.
+
+ Make Rope no longer be nested within JSString.
+ (Rope now no-longer need reside within JSString.h, but leaving
+ the change of moving this out to a different header as a separate
+ change from these renames).
+
+ * JavaScriptCore.exp:
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::privateCompileCTIMachineTrampolines):
+ * runtime/JSString.cpp:
+ (JSC::Rope::destructNonRecursive):
+ (JSC::Rope::~Rope):
+ (JSC::JSString::resolveRope):
+ (JSC::JSString::toBoolean):
+ (JSC::JSString::getStringPropertyDescriptor):
+ * runtime/JSString.h:
+ (JSC::Rope::Fiber::Fiber):
+ (JSC::Rope::Fiber::deref):
+ (JSC::Rope::Fiber::ref):
+ (JSC::Rope::Fiber::refAndGetLength):
+ (JSC::Rope::Fiber::isRope):
+ (JSC::Rope::Fiber::rope):
+ (JSC::Rope::Fiber::isString):
+ (JSC::Rope::Fiber::string):
+ (JSC::Rope::Fiber::nonFiber):
+ (JSC::Rope::tryCreateUninitialized):
+ (JSC::Rope::append):
+ (JSC::Rope::fiberCount):
+ (JSC::Rope::length):
+ (JSC::Rope::fibers):
+ (JSC::Rope::Rope):
+ (JSC::Rope::operator new):
+ (JSC::):
+ (JSC::RopeBuilder::JSString):
+ (JSC::RopeBuilder::~JSString):
+ (JSC::RopeBuilder::length):
+ (JSC::RopeBuilder::canGetIndex):
+ (JSC::RopeBuilder::appendStringInConstruct):
+ (JSC::RopeBuilder::appendValueInConstructAndIncrementLength):
+ (JSC::RopeBuilder::isRope):
+ (JSC::RopeBuilder::fiberCount):
+ (JSC::JSString::getStringPropertySlot):
+ * runtime/Operations.h:
+ (JSC::jsString):
+
+2010-02-15 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (Build fix).
+
+ Add missing cast for !YARR (PPC) builds.
+
+ * runtime/RegExp.cpp:
+ (JSC::RegExp::match):
+
+2010-02-14 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=33731
+ Many false leaks in release builds due to PtrAndFlags
+
+ StructureTransitionTable was effectively a smart pointer type,
+ one machine word in size and wholly contained as a member of
+ of Structure. It either pointed to an actual table, or could
+ be used to describe a single transtion entry without use of a
+ table.
+
+ This, however, worked by using a PtrAndFlags, which is not
+ compatible with the leaks tool. Since there is no clear way to
+ obtain another bit for 'free' here, and since there are bits
+ available up in Structure, merge this functionality back up into
+ Structure. Having this in a separate class was quite clean
+ from an enacapsulation perspective, but this solution doesn't
+ seem to bad - all table access is now intermediated through the
+ Structure::structureTransitionTableFoo methods, keeping the
+ optimization fairly well contained.
+
+ This was the last use of PtrAndFlags, so removing the file too.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * bytecode/CodeBlock.h:
+ * runtime/Structure.cpp:
+ (JSC::Structure::Structure):
+ (JSC::Structure::~Structure):
+ (JSC::Structure::addPropertyTransitionToExistingStructure):
+ (JSC::Structure::addPropertyTransition):
+ (JSC::Structure::hasTransition):
+ * runtime/Structure.h:
+ (JSC::Structure::):
+ (JSC::Structure::structureTransitionTableContains):
+ (JSC::Structure::structureTransitionTableGet):
+ (JSC::Structure::structureTransitionTableHasTransition):
+ (JSC::Structure::structureTransitionTableRemove):
+ (JSC::Structure::structureTransitionTableAdd):
+ (JSC::Structure::structureTransitionTable):
+ (JSC::Structure::setStructureTransitionTable):
+ (JSC::Structure::singleTransition):
+ (JSC::Structure::setSingleTransition):
+ * runtime/StructureTransitionTable.h:
+ * wtf/PtrAndFlags.h: Removed.
+
+2010-02-15 Gavin Barraclough <barraclough@apple.com>
+
+ Rubber Stamped by Geoff Garen.
+
+ Bug 34948 - tryMakeString should fail on error in length calculation
+
+ Ooops! - "bool overflow" argument should have been "bool& overflow".
+
+ * runtime/UString.h:
+ (JSC::sumWithOverflow):
+ (JSC::tryMakeString):
+
+2010-02-15 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (Build Fix (pt 2!)).
+
+ Some symbol names have changed, remove, will readd if required.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-02-15 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (Build Fix (pt 1?)).
+
+ Some symbol names have changed, remove, will readd if required.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-02-15 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Removed some mistaken code added in http://trac.webkit.org/changeset/53860.
+
+ * API/APIShims.h:
+ (JSC::APICallbackShim::APICallbackShim):
+ (JSC::APICallbackShim::~APICallbackShim): No need to start/stop the
+ timeout checker when calling out from the API to the client; we want to
+ monitor the VM for timeouts, not the client. This mistake was harmless /
+ undetectable, since it's totally redundant with the APIEntryShim, which
+ also starts / stops the timeout checker.
+
+2010-02-15 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Bug 34952 - String lengths in UString should be unsigned.
+ This matches WebCore::StringImpl, and better unifies behaviour throughout JSC.
+
+ * JavaScriptCore.exp:
+ * bytecode/EvalCodeCache.h:
+ * runtime/Identifier.cpp:
+ (JSC::Identifier::equal):
+ * runtime/Identifier.h:
+ * runtime/JSGlobalObjectFunctions.cpp:
+ (JSC::globalFuncEscape):
+ * runtime/JSONObject.cpp:
+ (JSC::gap):
+ (JSC::Stringifier::indent):
+ * runtime/NumberPrototype.cpp:
+ (JSC::numberProtoFuncToFixed):
+ (JSC::numberProtoFuncToPrecision):
+ * runtime/RegExp.cpp:
+ (JSC::RegExp::match):
+ * runtime/StringPrototype.cpp:
+ (JSC::substituteBackreferencesSlow):
+ (JSC::stringProtoFuncReplace):
+ (JSC::stringProtoFuncSplit):
+ (JSC::trimString):
+ * runtime/UString.cpp:
+ (JSC::UString::UString):
+ (JSC::UString::from):
+ (JSC::UString::getCString):
+ (JSC::UString::ascii):
+ (JSC::UString::operator[]):
+ (JSC::UString::toStrictUInt32):
+ (JSC::UString::find):
+ (JSC::UString::rfind):
+ (JSC::UString::substr):
+ (JSC::operator<):
+ (JSC::operator>):
+ (JSC::compare):
+ (JSC::equal):
+ (JSC::UString::UTF8String):
+ * runtime/UString.h:
+ (JSC::UString::size):
+ (JSC::operator==):
+ * runtime/UStringImpl.cpp:
+ (JSC::UStringImpl::create):
+ * runtime/UStringImpl.h:
+ (JSC::UStringImpl::create):
+ (JSC::UStringImpl::size):
+ (JSC::UStringImpl::computeHash):
+ (JSC::UStringImpl::UStringImpl):
+
+2010-02-15 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Bug 34948 - tryMakeString should fail on error in length calculation
+
+ The sum of the length of substrings could overflow.
+
+ * runtime/UString.h:
+ (JSC::sumWithOverflow):
+ (JSC::tryMakeString):
+
+2010-02-15 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Fixed <rdar://problem/7628524> Crash beneath JSGlobalContextRelease when
+ typing in Google search field with GuardMalloc/full page heap enabled
+
+ * API/JSContextRef.cpp: Don't use APIEntryShim, since that requires
+ a JSGlobalData, which this function destroys. Do use setCurrentIdentifierTable
+ and JSLock instead, since those are the two features of APIEntryShim we
+ require.
+
+2010-02-15 Patrick Gansterer <paroga@paroga.com>
+
+ Reviewed by Laszlo Gombos.
+
+ Added additional parameter to create_rvct_stubs
+ for setting the offset of thunkReturnAddress.
+ https://bugs.webkit.org/show_bug.cgi?id=34657
+
+ * create_rvct_stubs:
+ * jit/JITStubs.cpp:
+
+2010-02-15 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Fix QScriptValue::toIntXX methods.
+
+ More ECMA Script compliance.
+
+ [Qt] QScriptValue::toIntXX returns incorrect values
+ https://bugs.webkit.org/show_bug.cgi?id=34847
+
+ * qt/api/qscriptvalue_p.h:
+ (QScriptValuePrivate::toInteger):
+ (QScriptValuePrivate::toInt32):
+ (QScriptValuePrivate::toUInt32):
+ (QScriptValuePrivate::toUInt16):
+ * qt/tests/qscriptvalue/tst_qscriptvalue.h:
+ * qt/tests/qscriptvalue/tst_qscriptvalue_generated.cpp:
+ (tst_QScriptValue::toInteger_initData):
+ (tst_QScriptValue::toInteger_makeData):
+ (tst_QScriptValue::toInteger_test):
+ (tst_QScriptValue::toInt32_initData):
+ (tst_QScriptValue::toInt32_makeData):
+ (tst_QScriptValue::toInt32_test):
+ (tst_QScriptValue::toUInt32_initData):
+ (tst_QScriptValue::toUInt32_makeData):
+ (tst_QScriptValue::toUInt32_test):
+ (tst_QScriptValue::toUInt16_initData):
+ (tst_QScriptValue::toUInt16_makeData):
+ (tst_QScriptValue::toUInt16_test):
+
+2010-02-14 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Adam Barth.
+
+ Implement NEVER_INLINE and NO_RETURN for RVCT
+ https://bugs.webkit.org/show_bug.cgi?id=34740
+
+ * wtf/AlwaysInline.h:
+
+2010-02-12 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ https://bugs.webkit.org/show_bug.cgi?id=33731
+ Remove uses of PtrAndFlags from JIT data stuctures.
+
+ These break the OS X Leaks tool. Free up a bit in CallLinkInfo, and invalid
+ permutation of pointer states in MethodCallLinkInfo to represent the removed bits.
+
+ * bytecode/CodeBlock.h:
+ (JSC::CallLinkInfo::seenOnce):
+ (JSC::CallLinkInfo::setSeen):
+ (JSC::MethodCallLinkInfo::MethodCallLinkInfo):
+ (JSC::MethodCallLinkInfo::seenOnce):
+ (JSC::MethodCallLinkInfo::setSeen):
+ * jit/JIT.cpp:
+ (JSC::JIT::unlinkCall):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::patchMethodCallProto):
+ * runtime/UString.h:
+
+2010-02-12 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=33731
+ Many false leaks in release builds due to PtrAndFlags
+
+ Remove UntypedPtrAndBitfield (similar to PtrAndFlags) in UStringImpl,
+ and steal bits from the refCount instead.
+
+ * runtime/UStringImpl.cpp:
+ (JSC::UStringImpl::baseSharedBuffer):
+ (JSC::UStringImpl::~UStringImpl):
+ * runtime/UStringImpl.h:
+ (JSC::UStringImpl::cost):
+ (JSC::UStringImpl::isIdentifier):
+ (JSC::UStringImpl::setIsIdentifier):
+ (JSC::UStringImpl::ref):
+ (JSC::UStringImpl::deref):
+ (JSC::UStringImpl::UStringImpl):
+ (JSC::UStringImpl::bufferOwnerString):
+ (JSC::UStringImpl::bufferOwnership):
+ (JSC::UStringImpl::isStatic):
+ (JSC::UStringImpl::):
+
+2010-02-12 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Removed an unnecessary data dependency from my last patch.
+
+ * runtime/SmallStrings.cpp:
+ (JSC::SmallStrings::markChildren): Since isAnyStringMarked being false
+ is a condition of entering the loop, we can just use '=' instead of '|='.
+
+2010-02-12 Janne Koskinen <janne.p.koskinen@digia.com>
+
+ Reviewed by Tor Arne Vestbø.
+
+ Additional refptr/passrefptr workarounds for WINSCW compiler
+ https://bugs.webkit.org/show_bug.cgi?id=28054
+
+ * wtf/PassRefPtr.h:
+ (WTF::refIfNotNull):
+ (WTF::PassRefPtr::PassRefPtr):
+ (WTF::PassRefPtr::~PassRefPtr):
+ (WTF::PassRefPtr::clear):
+ (WTF::::operator):
+ * wtf/RefPtr.h:
+ (WTF::RefPtr::RefPtr):
+ (WTF::::operator):
+
+2010-02-12 Janne Koskinen <janne.p.koskinen@digia.com>
+
+ Reviewed by Tor Arne Vestbø.
+
+ Additional refptr/passrefptr workarounds for WINSCW compiler
+ https://bugs.webkit.org/show_bug.cgi?id=28054
+
+ * wtf/PassRefPtr.h:
+ (WTF::refIfNotNull):
+ (WTF::PassRefPtr::PassRefPtr):
+ (WTF::PassRefPtr::~PassRefPtr):
+ (WTF::PassRefPtr::clear):
+ (WTF::::operator):
+ * wtf/RefPtr.h:
+ (WTF::RefPtr::RefPtr):
+ (WTF::::operator):
+
+2010-02-12 Janne Koskinen <janne.p.koskinen@digia.com>
+
+ Reviewed by Tor Arne Vestbø.
+
+ Additional refptr/passrefptr workarounds for WINSCW compiler
+ https://bugs.webkit.org/show_bug.cgi?id=28054
+
+ * wtf/PassRefPtr.h:
+ (WTF::refIfNotNull):
+ (WTF::PassRefPtr::PassRefPtr):
+ (WTF::PassRefPtr::~PassRefPtr):
+ (WTF::PassRefPtr::clear):
+ (WTF::::operator):
+ * wtf/RefPtr.h:
+ (WTF::RefPtr::RefPtr):
+ (WTF::::operator):
+
+2010-02-12 Janne Koskinen <janne.p.koskinen@digia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Don't import the cmath functions from std:: for WINSCW.
+
+ * wtf/MathExtras.h:
+
+2010-02-12 Kwang Yul Seo <skyul@company100.net>
+
+ Reviewed by Adam Barth.
+
+ Typedef both JSChar and UChar to wchar_t in RVCT.
+ https://bugs.webkit.org/show_bug.cgi?id=34560
+
+ Define both JSChar and UChar to wchar_t as the size
+ of wchar_t is 2 bytes in RVCT.
+
+ * API/JSStringRef.h:
+ * wtf/unicode/qt4/UnicodeQt4.h:
+
+2010-02-11 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt and Darin Adler.
+
+ The rest of the fix for
+ https://bugs.webkit.org/show_bug.cgi?id=34864 | <rdar://problem/7594198>
+ Many objects left uncollected after visiting mail.google.com and closing
+ window
+
+ Don't unconditionally hang onto small strings. Instead, hang onto all
+ small strings as long as any small string is still referenced.
+
+ SunSpider reports no change.
+
+ * runtime/Collector.cpp:
+ (JSC::Heap::markRoots): Mark the small strings cache last, so it can
+ check if anything else has kept any strings alive.
+
+ * runtime/SmallStrings.cpp:
+ (JSC::isMarked):
+ (JSC::SmallStrings::markChildren): Only keep our strings alive if some
+ other reference to at least one of them exists, too.
+
+2010-02-11 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Some progress toward fixing
+ https://bugs.webkit.org/show_bug.cgi?id=34864 | <rdar://problem/7594198>
+ Many objects left uncollected after visiting mail.google.com and closing
+ window
+
+ SunSpider reports no change.
+
+ Keep weak references, rather than protected references, to cached for-in
+ property name enumerators.
+
+ One problem with protected references is that a chain like
+ [ gc object 1 ] => [ non-gc object ] => [ gc object 2 ]
+ takes two GC passes to break, since the first pass collects [ gc object 1 ],
+ releasing [ non-gc object ] and unprotecting [ gc object 2 ], and only
+ then can a second pass collect [ gc object 2 ].
+
+ Another problem with protected references is that they can keep a bunch
+ of strings alive long after they're useful. In SunSpider and a few popular
+ websites, the size-speed tradeoff seems to favor weak references.
+
+ * runtime/JSPropertyNameIterator.cpp:
+ (JSC::JSPropertyNameIterator::JSPropertyNameIterator): Moved this constructor
+ into the .cpp file, since it's not used elsewhere.
+
+ (JSC::JSPropertyNameIterator::~JSPropertyNameIterator): Added a destructor
+ to support our weak reference.
+
+ * runtime/JSPropertyNameIterator.h:
+ (JSC::Structure::setEnumerationCache):
+ (JSC::Structure::clearEnumerationCache):
+ (JSC::Structure::enumerationCache): Added a function for clearing a
+ Structure's enumeration cache, used by our new destructor. Also fixed
+ indentation to match the rest of the file.
+
+ * runtime/Structure.h: Changed from protected pointer to weak pointer.
+
+2010-02-11 Chris Rogers <crogers@google.com>
+
+ Reviewed by David Levin.
+
+ audio engine: add Complex number class
+ https://bugs.webkit.org/show_bug.cgi?id=34538
+
+ * wtf/Complex.h: Added.
+ (WebCore::complexFromMagnitudePhase):
+
+2010-02-10 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Added an SPI for asking about all the different live objects on the heap.
+ Useful for memory debugging.
+
+ * JavaScriptCore.exp: Export the new SPI.
+
+ * runtime/Collector.cpp:
+ (JSC::typeName): Use a little capitalization. Don't crash in the case of
+ a non-object cell, since it might just be an uninitialized cell.
+
+ (JSC::Heap::objectTypeCounts): The new SPI.
+
+ * runtime/Collector.h:
+ * runtime/CollectorHeapIterator.h:
+ (JSC::CollectorHeapIterator::advance):
+ (JSC::LiveObjectIterator::operator++):
+ (JSC::DeadObjectIterator::operator++):
+ (JSC::ObjectIterator::operator++): Made 2 tweaks to these iterators:
+ (1) Skip the last cell in the block, since it's a dummy sentinel, and
+ we don't want it to confuse the object count; (2) Fixed a logic error
+ in LiveObjectIterator that could cause it to iterate dead objects if
+ m_block were equal to m_heap.nextBlock and m_cell were less than
+ m_heap.nextCell. No test for this since I can't think of a way that this
+ could make WebKit behave badly.
+
+2010-02-11 Steve Block <steveblock@google.com>
+
+ Reviewed by Darin Adler.
+
+ Guard cmath using declarations in MathExtras.h on Android
+ https://bugs.webkit.org/show_bug.cgi?id=34840
+
+ Android does not provide these functions.
+
+ * wtf/MathExtras.h:
+
+2010-02-08 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Cameron Zwarich.
+
+ Restore ENABLE_RUBY flag so vendors can ship with Ruby disabled if they choose.
+ https://bugs.webkit.org/show_bug.cgi?id=34698
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2010-02-10 Kevin Watters <kevinwatters@gmail.com>
+
+ Reviewed by Kevin Ollivier.
+
+ [wx] Add Windows complex text support and Mac support for containsCharacters.
+
+ https://bugs.webkit.org/show_bug.cgi?id=34759
+
+ * wscript:
+
+2010-02-10 Alexey Proskuryakov <ap@apple.com>
+
+ Addressing issues found by style bot.
+
+ * wtf/ValueCheck.h: Renamed header guard to match final file name.
+
+ * wtf/Vector.h: (WTF::::checkConsistency): Remove braces around a one-line clause.
+
+2010-02-09 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Geoffrey Garen.
+
+ https://bugs.webkit.org/show_bug.cgi?id=34490
+ WebCore::ImageEventSender::dispatchPendingEvents() crashes in certain conditions
+
+ * GNUmakefile.am:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.vcproj/WTF/WTF.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ Added ValueCheck.h.
+
+ * wtf/ValueCheck.h: Added. Moved code out of HashTraits, since it would be awkward to
+ include that from Vector.h.
+ (WTF::ValueCheck::checkConsistency): Allow null pointers, those are pretty consistent.
+
+ * wtf/HashTraits.h: Moved value checking code out of here.
+
+ * wtf/HashTable.h: (WTF::::checkTableConsistencyExceptSize): Updated for the above changes.
+
+ * wtf/Vector.h:
+ (WTF::::checkConsistency): Check all vector elements.
+ (WTF::ValueCheck): Support checking a Vector as an element in other containers. Currently
+ unused.
+
+2010-02-10 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Fix QScriptValue::toBool.
+
+ Fix ECMA compliance in the QScriptValue for values like 0, NaN and
+ empty strings.
+
+ [Qt] QScriptValue::toBool problem
+ https://bugs.webkit.org/show_bug.cgi?id=34793
+
+ * qt/api/qscriptvalue_p.h:
+ (QScriptValuePrivate::toBool):
+ * qt/tests/qscriptvalue/tst_qscriptvalue.h:
+ * qt/tests/qscriptvalue/tst_qscriptvalue_generated.cpp:
+ (tst_QScriptValue::toBool_initData):
+ (tst_QScriptValue::toBool_makeData):
+ (tst_QScriptValue::toBool_test):
+ (tst_QScriptValue::toBoolean_initData):
+ (tst_QScriptValue::toBoolean_makeData):
+ (tst_QScriptValue::toBoolean_test):
+
+2009-10-06 Yongjun Zhang <yongjun.zhang@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Use derefIfNotNull() to work around WINSCW compiler forward declaration bug
+
+ The compiler bug is reported at
+ https://xdabug001.ext.nokia.com/bugzilla/show_bug.cgi?id=9812.
+
+ The change should be reverted when the above bug is fixed in WINSCW compiler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=28054
+
+2009-10-06 Yongjun Zhang <yongjun.zhang@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Get rid of WINSCW hack for UnSpecifiedBoolType
+
+ Add parenthesis around (RefPtr::*UnspecifiedBoolType) to make the WINSCW
+ compiler work with the default UnSpecifiedBoolType() operator.
+
+ https://bugs.webkit.org/show_bug.cgi?id=28054
+
+ * wtf/RefPtr.h:
+
+2010-02-09 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ New functions nullValue() and undefinedValue().
+
+ [Qt] QScriptEngine should contain nullValue and undefinedValue methods
+ https://bugs.webkit.org/show_bug.cgi?id=34749
+
+ * qt/api/qscriptengine.cpp:
+ (QScriptEngine::nullValue):
+ (QScriptEngine::undefinedValue):
+ * qt/api/qscriptengine.h:
+ * qt/tests/qscriptengine/tst_qscriptengine.cpp:
+ (tst_QScriptEngine::nullValue):
+ (tst_QScriptEngine::undefinedValue):
+
+2010-02-09 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Fixes for QScriptValue::toNumber().
+
+ Fix ECMA compliance in QScriptValue for values unbound
+ to a QScriptEngine.
+
+ [Qt] QScriptValue::toNumber() is broken
+ https://bugs.webkit.org/show_bug.cgi?id=34592
+
+ * qt/api/qscriptvalue_p.h:
+ (QScriptValuePrivate::toNumber):
+ * qt/tests/qscriptvalue/tst_qscriptvalue.h:
+ * qt/tests/qscriptvalue/tst_qscriptvalue_generated.cpp:
+ (tst_QScriptValue::toNumber_initData):
+ (tst_QScriptValue::toNumber_makeData):
+ (tst_QScriptValue::toNumber_test):
+
+2010-02-09 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Fix QScriptValue::isNumber().
+
+ The isNumber() should return 'true' if the value is in the CNumber
+ state.
+
+ [Qt] QScriptValue::isNumber() returns an incorrect value
+ https://bugs.webkit.org/show_bug.cgi?id=34575
+
+ * qt/api/qscriptvalue_p.h:
+ (QScriptValuePrivate::isNumber):
+ * qt/tests/qscriptvalue/tst_qscriptvalue.h:
+ * qt/tests/qscriptvalue/tst_qscriptvalue_generated.cpp:
+ (tst_QScriptValue::isNumber_initData):
+ (tst_QScriptValue::isNumber_makeData):
+ (tst_QScriptValue::isNumber_test):
+
+2010-02-09 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Small refactoring to the small strings cache to allow it to be cleared
+ dynamically.
+
+ * runtime/SmallStrings.cpp:
+ (JSC::SmallStrings::SmallStrings):
+ (JSC::SmallStrings::clear):
+ * runtime/SmallStrings.h: Moved initialization code into a shared function,
+ and changed the constructor to call it.
+
+2010-02-09 Gavin Barraclough <barraclough@apple.com>
+
+ Rubber Stamped by Geoff Garen.
+
+ Rename StringBuilder::release && JSStringBuilder::releaseJSString
+ to 'build()'.
+
+ * runtime/ArrayPrototype.cpp:
+ (JSC::arrayProtoFuncToLocaleString):
+ (JSC::arrayProtoFuncJoin):
+ * runtime/Executable.cpp:
+ (JSC::FunctionExecutable::paramString):
+ * runtime/FunctionConstructor.cpp:
+ (JSC::constructFunction):
+ * runtime/JSGlobalObjectFunctions.cpp:
+ (JSC::encode):
+ (JSC::decode):
+ (JSC::globalFuncEscape):
+ (JSC::globalFuncUnescape):
+ * runtime/JSONObject.cpp:
+ (JSC::Stringifier::stringify):
+ * runtime/JSStringBuilder.h:
+ (JSC::JSStringBuilder::build):
+ * runtime/LiteralParser.cpp:
+ (JSC::LiteralParser::Lexer::lexString):
+ * runtime/NumberPrototype.cpp:
+ (JSC::integerPartNoExp):
+ (JSC::numberProtoFuncToFixed):
+ * runtime/StringBuilder.h:
+ (JSC::StringBuilder::build):
+
+2010-02-09 John Sullivan <sullivan@apple.com>
+
+ https://bugs.webkit.org/show_bug.cgi?id=34772
+ Overzealous new assertion in URStringImpl::adopt()
+
+ Reviewed by Adam Barth.
+
+ * runtime/UStringImpl.h:
+ (JSC::UStringImpl::adopt):
+ Only assert that vector.data() is non-zero if vector.size() is non-zero.
+
+2010-02-09 Nikolas Zimmermann <nzimmermann@rim.com>
+
+ Not reviewed. Try to fix build problem on SnowLeopard slaves to bring them back.
+
+ * API/JSClassRef.cpp:
+ (tryCreateStringFromUTF8): Mark method as 'static inline' to suppress "warning: no previous prototype for ..."
+
+2010-02-09 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Three small string fixes:
+ (1) StringBuilder::release should CRASH if the buffer allocation failed.
+ (2) Remove weird, dead code from JSString::tryGetValue, replace with an ASSERT.
+ (3) Move UString::createFromUTF8 out to the API, as tryCreateStringFromUTF8.
+ This is only used from the API, and (now) unlike other UString::create
+ methods may return UString::null() to indicate failure cases. Better
+ handle these in the API.
+
+ * API/JSClassRef.cpp:
+ (tryCreateStringFromUTF8):
+ (OpaqueJSClass::OpaqueJSClass):
+ (OpaqueJSClassContextData::OpaqueJSClassContextData):
+ * runtime/JSString.h:
+ (JSC::Fiber::tryGetValue):
+ * runtime/StringBuilder.h:
+ (JSC::StringBuilder::release):
+ * runtime/UString.cpp:
+ (JSC::UString::UString):
+ (JSC::UString::from):
+ (JSC::UString::find):
+ * runtime/UString.h:
+
+2010-02-09 Janne Koskinen <janne.p.koskinen@digia.com>
+
+ Reviewed by Laszlo Gombos.
+
+ [Qt] use nanval() for Symbian as nonInlineNaN
+ https://bugs.webkit.org/show_bug.cgi?id=34170
+
+ numeric_limits<double>::quiet_NaN is broken in Symbian
+ causing NaN to be evaluated as a number.
+
+ * runtime/JSValue.cpp:
+ (JSC::nonInlineNaN):
+
+2010-02-09 Tamas Szirbucz <szirbucz@inf.u-szeged.hu>
+
+ Reviewed by Gavin Barraclough.
+
+ Add a soft modulo operation to ARM JIT using a trampoline function.
+ The performance progression is about ~1.8% on ARMv7
+ https://bugs.webkit.org/show_bug.cgi?id=34424
+
+ Developed in cooperation with Gabor Loki.
+
+ * jit/JIT.h:
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_mod):
+ (JSC::JIT::emitSlow_op_mod):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::softModulo):
+ * jit/JITStubs.h:
+ (JSC::JITThunks::ctiSoftModulo):
+ * wtf/Platform.h:
+
+2010-02-08 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (SL/win build fixes).
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * runtime/StringPrototype.cpp:
+
+2010-02-08 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt
+
+ Make String.replace throw an exception on out-of-memory, rather than
+ returning a null (err, empty-ish) string. Move String::replaceRange
+ and String::spliceSubstringsWithSeparators out to StringPrototype -
+ these were fairly specific use anyway, and we can better integrate
+ throwing the JS expcetion this way.
+
+ Also removes redundant assignment operator from UString.
+
+ * JavaScriptCore.exp:
+ * runtime/StringPrototype.cpp:
+ (JSC::StringRange::StringRange):
+ (JSC::jsSpliceSubstringsWithSeparators):
+ (JSC::jsReplaceRange):
+ (JSC::stringProtoFuncReplace):
+ * runtime/UString.cpp:
+ * runtime/UString.h:
+
+2010-02-08 Kwang Yul Seo <skyul@company100.net>
+
+ Reviewed by Eric Seidel.
+
+ [BREWMP] Undefine WTF_OS_WINDOWS and WTF_PLATFORM_WIN
+ https://bugs.webkit.org/show_bug.cgi?id=34561
+
+ As the binary for simulator is built with MSVC 2005,
+ WTF_OS_WINDOWS and WTF_PLATFORM_WIN are defined.
+ Undefine them as we don't target Windows.
+
+ * wtf/Platform.h:
+
+2010-02-08 Chris Rogers <crogers@google.com>
+
+ Reviewed by Darin Adler.
+
+ audio engine: add Vector3 class
+ https://bugs.webkit.org/show_bug.cgi?id=34548
+
+ * wtf/Vector3.h: Added.
+ (WebCore::Vector3::Vector3):
+ (WebCore::Vector3::abs):
+ (WebCore::Vector3::isZero):
+ (WebCore::Vector3::normalize):
+ (WebCore::Vector3::x):
+ (WebCore::Vector3::y):
+ (WebCore::Vector3::z):
+ (WebCore::operator+):
+ (WebCore::operator-):
+ (WebCore::operator*):
+ (WebCore::dot):
+ (WebCore::cross):
+ (WebCore::distance):
+
+2010-02-08 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Fix warning in clang++
+
+ * runtime/Structure.h:
+ (JSC::Structure::propertyStorageSize):
+
+2010-02-08 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Make makeString CRASH if we fail to allocate a string.
+
+ (tryMakeString or jsMakeNontrivialString can be used where we
+ expect allocation may fail and want to handle the error).
+
+ * runtime/JSStringBuilder.h:
+ (JSC::jsMakeNontrivialString):
+ * runtime/UString.h:
+ (JSC::tryMakeString):
+ (JSC::makeString):
+
+2010-02-08 Gavin Barraclough <barraclough@apple.com>
+
+ Rubber Stamped by Oliver Hunt.
+
+ Remove a couple of unnecesary C-style casts spotted by Darin.
+
+ * runtime/JSGlobalObjectFunctions.cpp:
+ (JSC::encode):
+ (JSC::globalFuncEscape):
+
+2010-02-08 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Switch some more StringBuilder/jsNontrivialString code to use
+ JSStringBuilder/jsMakeNontrivialString - these methods will
+ throw an exception if we hit out-of-memory, rather than just
+ CRASHing.
+
+ * runtime/FunctionPrototype.cpp:
+ (JSC::functionProtoFuncToString):
+ * runtime/JSGlobalObjectFunctions.cpp:
+ (JSC::encode):
+ (JSC::decode):
+ (JSC::globalFuncEscape):
+
+2010-02-08 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Use an empty identifier instead of a null identifier for parse
+ tokens without an identifier.
+
+ This helps encapsulate the null UStringImpl within UString.
+
+ * parser/Grammar.y:
+ * parser/NodeConstructors.h:
+ (JSC::ContinueNode::ContinueNode):
+ (JSC::BreakNode::BreakNode):
+ (JSC::ForInNode::ForInNode):
+ * runtime/CommonIdentifiers.cpp:
+ (JSC::CommonIdentifiers::CommonIdentifiers):
+ * runtime/CommonIdentifiers.h:
+ * runtime/FunctionPrototype.cpp:
+ (JSC::FunctionPrototype::FunctionPrototype):
+
+2010-02-08 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk>
+
+ Build fix for make distcheck.
+
+ * GNUmakefile.am:
+
+2010-02-08 Simon Hausmann <simon.hausmann@nokia.com>
+
+ Unreviewed RVCT build fix.
+
+ Similar to r54391, don't import the cmath functions from std:: for RVCT.
+
+ * wtf/MathExtras.h:
+
+2010-02-05 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Change UStringImpl::create to CRASH if the string cannot be allocated,
+ rather than returning a null string (which will behave like a zero-length
+ string if used).
+
+ Also move createRep function from UString to become new overloaded
+ UStringImpl::create methods. In doing so, bring their behaviour closer to
+ being in line with WebCore::StringImpl, in removing the behaviour that they
+ can be used to produce null UStrings (ASSERT the char* provided is non-null).
+ This behaviour of converting null C-strings to null UStrings is inefficient
+ (cmompared to just using UString::null()), incompatible with WebCore::StringImpl's
+ behaviour, and may generate unexpected behaviour, since in many cases a null
+ UString can be used like an empty string.
+
+ With these changes UStringImpl need not have a concept of null impls, we can
+ start transitioning this to become an implementation detail of UString, that
+ internally it chooses to use a null-object rather than an actually zero impl
+ pointer.
+
+ * JavaScriptCore.exp:
+ * debugger/Debugger.cpp:
+ (JSC::Debugger::recompileAllJSFunctions):
+ * debugger/DebuggerCallFrame.cpp:
+ (JSC::DebuggerCallFrame::calculatedFunctionName):
+ * parser/Parser.cpp:
+ (JSC::Parser::parse):
+ * profiler/Profile.cpp:
+ (JSC::Profile::Profile):
+ * profiler/ProfileGenerator.cpp:
+ (JSC::ProfileGenerator::stopProfiling):
+ * runtime/Error.cpp:
+ (JSC::Error::create):
+ (JSC::throwError):
+ * runtime/ExceptionHelpers.cpp:
+ (JSC::createError):
+ * runtime/Identifier.cpp:
+ (JSC::Identifier::add):
+ * runtime/PropertyNameArray.cpp:
+ (JSC::PropertyNameArray::add):
+ * runtime/UString.cpp:
+ (JSC::initializeUString):
+ (JSC::UString::UString):
+ (JSC::UString::operator=):
+ * runtime/UString.h:
+ (JSC::UString::isNull):
+ (JSC::UString::null):
+ (JSC::UString::rep):
+ (JSC::UString::UString):
+ * runtime/UStringImpl.cpp:
+ (JSC::UStringImpl::create):
+ * runtime/UStringImpl.h:
+
+2010-02-05 Kwang Yul Seo <skyul@company100.net>
+
+ Reviewed by Eric Seidel.
+
+ [BREWMP] Define SYSTEM_MALLOC 1
+ https://bugs.webkit.org/show_bug.cgi?id=34640
+
+ Make BREWMP use system malloc because FastMalloc is not ported.
+
+ * wtf/Platform.h:
+
+2010-02-05 Kwang Yul Seo <skyul@company100.net>
+
+ Reviewed by Alexey Proskuryakov.
+
+ Don't call CRASH() in fastMalloc and fastCalloc when the requested memory size is 0
+ https://bugs.webkit.org/show_bug.cgi?id=34569
+
+ With USE_SYSTEM_MALLOC=1, fastMalloc and fastCalloc call CRASH()
+ if the return value of malloc and calloc is 0.
+
+ However, these functions can return 0 when the request size is 0.
+ Libc manual says, "If size is 0, then malloc() returns either NULL,
+ or a unique pointer value that can later be successfully passed to free()."
+ Though malloc returns a unique pointer in most systems,
+ 0 can be returned in some systems. For instance, BREW's MALLOC returns 0
+ when size is 0.
+
+ If malloc or calloc returns 0 due to allocation size, increase the size
+ to 1 and try again.
+
+ * wtf/FastMalloc.cpp:
+ (WTF::fastMalloc):
+ (WTF::fastCalloc):
+
+2010-02-04 Mark Rowe <mrowe@apple.com>
+
+ Reviewed by Timothy Hatcher.
+
+ Build fix. Remove a symbol corresponding to an inline function from the linker export
+ file to prevent a weak external failure.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj: Accommodate rename of script.
+
+2010-02-04 Daniel Bates <dbates@webkit.org>
+
+ [Qt] Unreviewed, build fix for Qt bot.
+
+ * runtime/JSStringBuilder.h: Changed #include <X.h> notation #include "X.h".
+
+2010-02-04 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Clearing a WeakGCPtr is weird
+ https://bugs.webkit.org/show_bug.cgi?id=34627
+
+ Added a WeakGCPtr::clear interface.
+
+ As discussed in https://bugs.webkit.org/show_bug.cgi?id=33383, the old
+ interface made it pretty weird for a client to conditionally clear a
+ WeakGCPtr, which is exactly what clients want to do when objects are
+ finalized.
+
+ * API/JSClassRef.cpp:
+ (clearReferenceToPrototype): Use the new WeakGCPtr::clear() interface.
+
+ * runtime/WeakGCPtr.h:
+ (JSC::WeakGCPtr::clear): Added an interface for clearing a WeakGCPtr,
+ iff its current value is the value passed in. It's cumbersome for the
+ client to do this test, since WeakGCPtr sometimes pretends to be null.
+
+2010-02-04 Geoffrey Garen <ggaren@apple.com>
+
+ Build fix: export a header.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2010-02-04 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Add a JSStringBuilder class (similar-to, and derived-from StringBuilder) to
+ construct JSStrings, throwing a JS exception should we run out of memory whilst
+ allocating storage for the string.
+
+ Similarly, add jsMakeNontrivialString methods to use in cases where previously
+ we were calling makeString & passing the result to jsNontrivialString. Again,
+ these new methods throw if we hit an out of memory condition.
+
+ Move throwOutOfMemoryError into ExceptionHelpers, to make it more widely available.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * runtime/ArrayPrototype.cpp:
+ (JSC::arrayProtoFuncToString):
+ (JSC::arrayProtoFuncToLocaleString):
+ (JSC::arrayProtoFuncJoin):
+ * runtime/DateConstructor.cpp:
+ (JSC::callDate):
+ * runtime/DatePrototype.cpp:
+ (JSC::dateProtoFuncToString):
+ (JSC::dateProtoFuncToUTCString):
+ (JSC::dateProtoFuncToGMTString):
+ * runtime/ErrorPrototype.cpp:
+ (JSC::errorProtoFuncToString):
+ * runtime/ExceptionHelpers.cpp:
+ (JSC::throwOutOfMemoryError):
+ * runtime/ExceptionHelpers.h:
+ * runtime/JSStringBuilder.h: Added.
+ (JSC::JSStringBuilder::releaseJSString):
+ (JSC::jsMakeNontrivialString):
+ * runtime/NumberPrototype.cpp:
+ (JSC::numberProtoFuncToPrecision):
+ * runtime/ObjectPrototype.cpp:
+ (JSC::objectProtoFuncToString):
+ * runtime/Operations.cpp:
+ * runtime/Operations.h:
+ * runtime/RegExpPrototype.cpp:
+ (JSC::regExpProtoFuncToString):
+ * runtime/StringBuilder.h:
+ (JSC::StringBuilder::append):
+ * runtime/StringPrototype.cpp:
+ (JSC::stringProtoFuncBig):
+ (JSC::stringProtoFuncSmall):
+ (JSC::stringProtoFuncBlink):
+ (JSC::stringProtoFuncBold):
+ (JSC::stringProtoFuncFixed):
+ (JSC::stringProtoFuncItalics):
+ (JSC::stringProtoFuncStrike):
+ (JSC::stringProtoFuncSub):
+ (JSC::stringProtoFuncSup):
+ (JSC::stringProtoFuncFontcolor):
+ (JSC::stringProtoFuncFontsize):
+ (JSC::stringProtoFuncAnchor):
+
+2010-02-04 Steve Falkenburg <sfalken@apple.com>
+
+ Windows build fix.
+
+ * wtf/MathExtras.h:
+
+2010-02-04 Darin Adler <darin@apple.com>
+
+ Reviewed by David Levin.
+
+ Make MathExtras.h compatible with <cmath>
+ https://bugs.webkit.org/show_bug.cgi?id=34618
+
+ * wtf/MathExtras.h: Include <cmath> instead of <math.h>.
+ Use "using" as we do elsewhere in WTF for the four functions from <cmath>
+ we want to use without the prefix. Later we could consider making the std
+ explicit at call sites instead.
+
+2010-02-04 Tamas Szirbucz <szirbucz@inf.u-szeged.hu>
+
+ Reviewed by Gavin Barraclough.
+
+ Use an easily appendable structure for trampolines instead of pointer parameters.
+ https://bugs.webkit.org/show_bug.cgi?id=34424
+
+ * assembler/ARMAssembler.cpp:
+ (JSC::ARMAssembler::executableCopy):
+ * jit/JIT.h:
+ (JSC::JIT::compileCTIMachineTrampolines):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::privateCompileCTIMachineTrampolines):
+ * jit/JITStubs.cpp:
+ (JSC::JITThunks::JITThunks):
+ * jit/JITStubs.h:
+ (JSC::JITThunks::ctiStringLengthTrampoline):
+ (JSC::JITThunks::ctiVirtualCallLink):
+ (JSC::JITThunks::ctiVirtualCall):
+ (JSC::JITThunks::ctiNativeCallThunk):
+
+2010-02-04 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Increase test coverage for the QScriptValue.
+
+ https://bugs.webkit.org/show_bug.cgi?id=34533
+
+ * qt/tests/qscriptvalue/qscriptvalue.pro:
+ * qt/tests/qscriptvalue/tst_qscriptvalue.cpp:
+ (tst_QScriptValue::tst_QScriptValue):
+ (tst_QScriptValue::~tst_QScriptValue):
+ (tst_QScriptValue::dataHelper):
+ (tst_QScriptValue::newRow):
+ (tst_QScriptValue::testHelper):
+ (tst_QScriptValue::ctor):
+ * qt/tests/qscriptvalue/tst_qscriptvalue.h: Added.
+ * qt/tests/qscriptvalue/tst_qscriptvalue_generated.cpp: Added.
+ (tst_QScriptValue::initScriptValues):
+ (tst_QScriptValue::isValid_initData):
+ (tst_QScriptValue::isValid_makeData):
+ (tst_QScriptValue::isValid_test):
+ (tst_QScriptValue::isBool_initData):
+ (tst_QScriptValue::isBool_makeData):
+ (tst_QScriptValue::isBool_test):
+ (tst_QScriptValue::isBoolean_initData):
+ (tst_QScriptValue::isBoolean_makeData):
+ (tst_QScriptValue::isBoolean_test):
+ (tst_QScriptValue::isFunction_initData):
+ (tst_QScriptValue::isFunction_makeData):
+ (tst_QScriptValue::isFunction_test):
+ (tst_QScriptValue::isNull_initData):
+ (tst_QScriptValue::isNull_makeData):
+ (tst_QScriptValue::isNull_test):
+ (tst_QScriptValue::isString_initData):
+ (tst_QScriptValue::isString_makeData):
+ (tst_QScriptValue::isString_test):
+ (tst_QScriptValue::isUndefined_initData):
+ (tst_QScriptValue::isUndefined_makeData):
+ (tst_QScriptValue::isUndefined_test):
+ (tst_QScriptValue::isObject_initData):
+ (tst_QScriptValue::isObject_makeData):
+ (tst_QScriptValue::isObject_test):
+
+2010-02-03 Kwang Yul Seo <skyul@company100.net>
+
+ Reviewed by Eric Seidel.
+
+ [BREWMP] Define WTF_PLATFORM_BREWMP_SIMULATOR when AEE_SIMULATOR is defined
+ https://bugs.webkit.org/show_bug.cgi?id=34514
+
+ PLATFORM(BREWMP_SIMULATOR) guard is needed to make distinction between BREWMP
+ and BREWMP simulator.
+
+ * wtf/Platform.h:
+
+2010-02-03 Kwang Yul Seo <skyul@company100.net>
+
+ Reviewed by Eric Seidel.
+
+ [BREWMP] Remove COMPILE_ASSERT conflict with the underlying PLATFORM
+ https://bugs.webkit.org/show_bug.cgi?id=34190
+
+ COMPILE_ASSERT conflicts with the underlying PLATFORM because it is defined
+ both in WTF's Assertions.h and BREWMP's AEEClassIDs.h. Include AEEClassIDs.h
+ in Assertions.h and undef COMPILE_ASSERT to avoid redefining COMPILE_ASSERT.
+
+ * wtf/Assertions.h:
+
+2010-02-03 Kwang Yul Seo <skyul@company100.net>
+
+ Reviewed by Eric Seidel.
+
+ [BREWMP] Implement OwnPtrBrew to make sure BREW instances are freed.
+ https://bugs.webkit.org/show_bug.cgi?id=34518
+
+ Add OwnPtrBrew to release IFile, IFileMgr and IBitmap instances.
+
+ * wtf/brew/OwnPtrBrew.cpp: Added.
+ (WTF::IFileMgr):
+ (WTF::IFile):
+ (WTF::IBitmap):
+ (WTF::freeOwnedPtrBrew):
+ * wtf/brew/OwnPtrBrew.h: Added.
+ (WTF::OwnPtrBrew::OwnPtrBrew):
+ (WTF::OwnPtrBrew::~OwnPtrBrew):
+ (WTF::OwnPtrBrew::get):
+ (WTF::OwnPtrBrew::release):
+ (WTF::OwnPtrBrew::outPtr):
+ (WTF::OwnPtrBrew::set):
+ (WTF::OwnPtrBrew::clear):
+ (WTF::OwnPtrBrew::operator*):
+ (WTF::OwnPtrBrew::operator->):
+ (WTF::OwnPtrBrew::operator!):
+ (WTF::OwnPtrBrew::operator UnspecifiedBoolType):
+ (WTF::OwnPtrBrew::swap):
+ (WTF::swap):
+ (WTF::operator==):
+ (WTF::operator!=):
+ (WTF::getPtr):
+
+2010-02-03 Kwang Yul Seo <skyul@company100.net>
+
+ Reviewed by Darin Adler.
+
+ Export WTF::fastStrDup symbol
+ https://bugs.webkit.org/show_bug.cgi?id=34526
+
+ * JavaScriptCore.exp:
+
+2010-02-03 Kevin Watters <kevinwatters@gmail.com>
+
+ Reviewed by Kevin Ollivier.
+
+ [wx] Enable JIT compilation for wx.
+
+ https://bugs.webkit.org/show_bug.cgi?id=34536
+
+ * wtf/Platform.h:
+
+2010-02-02 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Geoffrey Garen.
+
+ Crash in CollectorBitmap::get at nbcolympics.com
+ https://bugs.webkit.org/show_bug.cgi?id=34504
+
+ This was caused by the use of m_offset to determine the offset of
+ a new property into the property storage. This patch corrects
+ the effected cases by incorporating the anonymous slot count. It
+ also removes the duplicate copy of anonymous slot count from the
+ property table as keeping this up to date merely increased the
+ chance of a mismatch. Finally I've added a large number of
+ assertions in an attempt to prevent such a bug from happening
+ again.
+
+ With the new assertions in place the existing anonymous slot tests
+ all fail without the m_offset fixes.
+
+ * runtime/PropertyMapHashTable.h:
+ * runtime/Structure.cpp:
+ (JSC::Structure::materializePropertyMap):
+ (JSC::Structure::addPropertyTransitionToExistingStructure):
+ (JSC::Structure::addPropertyTransition):
+ (JSC::Structure::removePropertyTransition):
+ (JSC::Structure::flattenDictionaryStructure):
+ (JSC::Structure::addPropertyWithoutTransition):
+ (JSC::Structure::removePropertyWithoutTransition):
+ (JSC::Structure::copyPropertyTable):
+ (JSC::Structure::get):
+ (JSC::Structure::put):
+ (JSC::Structure::remove):
+ (JSC::Structure::insertIntoPropertyMapHashTable):
+ (JSC::Structure::createPropertyMapHashTable):
+ (JSC::Structure::rehashPropertyMapHashTable):
+ (JSC::Structure::checkConsistency):
+
+2010-02-02 Steve Falkenburg <sfalken@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Copyright year updating for Windows version resources should be automatic
+ https://bugs.webkit.org/show_bug.cgi?id=34503
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.rc:
+
+2010-02-02 Kwang Yul Seo <skyul@company100.net>
+
+ Reviewed by Eric Seidel.
+
+ [BREWMP] Add dummy main thread functions
+ https://bugs.webkit.org/show_bug.cgi?id=33569
+
+ Add dummy initializeMainThreadPlatform and
+ scheduleDispatchFunctionsOnMainThread.
+
+ * wtf/brew/MainThreadBrew.cpp: Added.
+ (WTF::initializeMainThreadPlatform):
+ (WTF::scheduleDispatchFunctionsOnMainThread):
+
+2010-02-02 Kwang Yul Seo <skyul@company100.net>
+
+ Reviewed by Darin Adler.
+
+ Add using WTF::getLocalTime to CurrentTime.h
+ https://bugs.webkit.org/show_bug.cgi?id=34493
+
+ * wtf/CurrentTime.h:
+
+2010-02-02 Kwang Yul Seo <skyul@company100.net>
+
+ Reviewed by Eric Seidel.
+
+ [BREWMP] Add HAVE_XXX definitions
+ https://bugs.webkit.org/show_bug.cgi?id=34414
+
+ Add HAVE_ERRNO_H=1
+
+ * wtf/Platform.h:
+
+2010-02-02 Kwang Yul Seo <skyul@company100.net>
+
+ Reviewed by Eric Seidel.
+
+ [BREWMP] Don't define HAVE_TM_GMTOFF, HAVE_TM_ZONE and HAVE_TIMEGM
+ https://bugs.webkit.org/show_bug.cgi?id=34388
+
+ BREWMP does not have these features.
+
+ * wtf/Platform.h:
+
+2010-02-02 Kwang Yul Seo <skyul@company100.net>
+
+ Reviewed by Eric Seidel.
+
+ [BREWMP] Define WTF_PLATFORM_BREWMP=1 when BUILDING_BREWMP is defined
+ https://bugs.webkit.org/show_bug.cgi?id=34386
+
+ Define WTF_PLATFORM_BREWMP=1 so that PLATFORM(BREWMP) guard can be used.
+
+ * wtf/Platform.h:
+
+2010-02-01 Kent Tamura <tkent@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ Date.UTC() should apply TimeClip operation.
+ https://bugs.webkit.org/show_bug.cgi?id=34461
+
+ ECMAScript 5 15.9.4.3:
+ > 9 Return TimeClip(MakeDate(MakeDay(yr, m, dt), MakeTime(h, min, s, milli))).
+
+ * runtime/DateConstructor.cpp:
+ (JSC::dateUTC): Calls WTF::timeClip().
+
+2010-02-01 Kent Tamura <tkent@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ Fix a bug that Math.round() retunrs incorrect results for huge integers
+ https://bugs.webkit.org/show_bug.cgi?id=34462
+
+ * runtime/MathObject.cpp:
+ (JSC::mathProtoFuncRound): Avoid "arg + 0.5".
+
+2010-02-01 Kwang Yul Seo <skyul@company100.net>
+
+ Reviewed by Eric Seidel.
+
+ [BREWMP] Port WTF's currentTime
+ https://bugs.webkit.org/show_bug.cgi?id=33567
+
+ Combine GETUTCSECONDS and GETTIMEMS to calculate the number
+ of milliseconds since 1970/01/01 00:00:00 UTC.
+
+ * wtf/CurrentTime.cpp:
+ (WTF::currentTime):
+
+2010-02-01 Patrick Gansterer <paroga@paroga.com>
+
+ Reviewed by Darin Adler.
+
+ [Qt] WinCE buildfix after r52729 and fix for Q_BIG_ENDIAN typo.
+ https://bugs.webkit.org/show_bug.cgi?id=34378
+
+ * wtf/Platform.h:
+
+2010-02-01 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Structure not accounting for anonymous slots when computing property storage size
+ https://bugs.webkit.org/show_bug.cgi?id=34441
+
+ Previously any Structure with anonymous storage would have a property map, so we
+ were only including anonymous slot size if there was a property map. Given this
+ is no longer the case we should always include the anonymous slot count in the
+ property storage size.
+
+ * runtime/Structure.h:
+ (JSC::Structure::propertyStorageSize):
+
+2010-02-01 Oliver Hunt <oliver@apple.com>
+
+ Windows build fix, update exports file (again)
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-02-01 Oliver Hunt <oliver@apple.com>
+
+ Windows build fix, update exports file
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-01-31 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ JSC is failing to propagate anonymous slot count on some transitions
+ https://bugs.webkit.org/show_bug.cgi?id=34321
+
+ Remove secondary Structure constructor, and make Structure store a copy
+ of the number of anonymous slots directly so saving an immediate allocation
+ of a property map for all structures with anonymous storage, which also
+ avoids the leaked property map on new property transition in the original
+ version of this patch.
+
+ We need to propagate the the anonymous slot count otherwise we can end up
+ with a structure recording incorrect information about the available and
+ needed space for property storage, or alternatively incorrectly reusing
+ some slots.
+
+ * JavaScriptCore.exp:
+ * runtime/Structure.cpp:
+ (JSC::Structure::Structure):
+ (JSC::Structure::materializePropertyMap):
+ (JSC::Structure::addPropertyTransition):
+ (JSC::Structure::changePrototypeTransition):
+ (JSC::Structure::despecifyFunctionTransition):
+ (JSC::Structure::getterSetterTransition):
+ (JSC::Structure::toDictionaryTransition):
+ (JSC::Structure::flattenDictionaryStructure):
+ (JSC::Structure::copyPropertyTable):
+ (JSC::Structure::put):
+ (JSC::Structure::remove):
+ (JSC::Structure::insertIntoPropertyMapHashTable):
+ (JSC::Structure::createPropertyMapHashTable):
+ * runtime/Structure.h:
+ (JSC::Structure::create):
+ (JSC::Structure::hasAnonymousSlots):
+ (JSC::Structure::anonymousSlotCount):
+
+2010-01-31 Patrick Gansterer <paroga@paroga.com>
+
+ Reviewed by Darin Adler.
+
+ Buildfix for WinCE + style fixes (TLS_OUT_OF_INDEXES is not defined).
+ https://bugs.webkit.org/show_bug.cgi?id=34380
+
+ * wtf/ThreadSpecific.h:
+
+2010-01-31 Kent Tamura <tkent@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ [Windows] Fix a bug of round() with huge integral numbers
+ https://bugs.webkit.org/show_bug.cgi?id=34297
+
+ Fix a bug that round() for huge integral numbers returns incorrect
+ results. For example, round(8639999913600001) returns
+ 8639999913600002 without this change though the double type can
+ represent 8639999913600001 precisely.
+
+ Math.round() of JavaScript has a similar problem. But this change
+ doesn't fix it because Math.round() doesn't use round() of
+ MathExtra.h.
+
+ * wtf/MathExtras.h:
+ (round): Avoid to do "num + 0.5" or "num - 0.5".
+ (roundf): Fixed similarly.
+ (llround): Calls round().
+ (llroundf): Calls roundf().
+ (lround): Calls round().
+ (lroundf): Calls roundf().
+
+2010-01-29 Mark Rowe <mrowe@apple.com>
+
+ Sort Xcode projects.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2010-01-29 Mark Rowe <mrowe@apple.com>
+
+ Fix the Mac build.
+
+ Disable ENABLE_INDEXED_DATABASE since it is "completely non-functional".
+
+ As the comment in FeatureDefines.xcconfig notes, the list of feature defines
+ needs to be kept in sync across the various files. The default values also
+ need to be kept in sync between these files and build-webkit.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2010-01-29 Simon Hausmann <simon.hausmann@nokia.com>
+
+ Rubber-stamped by Maciej Stachowiak.
+
+ Fix the ARM build.
+
+ * runtime/JSNumberCell.h:
+ (JSC::JSNumberCell::createStructure): Call the right Structure::create overload.
+
+2010-01-28 Kevin Ollivier <kevino@theolliviers.com>
+
+ [wx] Build fix for MSW, use ThreadingWin.cpp as the Windows pthreads implementation
+ implements pthread_t in a way that makes it impossible to check its validity,
+ which is needed by ThreadingPthreads.cpp.
+
+ * wscript:
+
+2010-01-28 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ DOM Objects shouldn't all require custom mark functions
+ https://bugs.webkit.org/show_bug.cgi?id=34291
+
+ Make getAnonymousValue const-friendly
+
+ * runtime/JSObject.h:
+ (JSC::JSObject::getAnonymousValue):
+
+2010-01-28 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Simplify anonymous slot implementation
+ https://bugs.webkit.org/show_bug.cgi?id=34282
+
+ A class must now specify the number of slots it needs at construction time
+ rather than later on with a transition. This makes many things simpler,
+ we no longer need to need an additional transition on object creation to
+ add the anonymous slots, and we remove the need for a number of transition
+ type checks.
+
+ * API/JSCallbackConstructor.h:
+ (JSC::JSCallbackConstructor::createStructure):
+ * API/JSCallbackFunction.h:
+ (JSC::JSCallbackFunction::createStructure):
+ * API/JSCallbackObject.h:
+ (JSC::JSCallbackObject::createStructure):
+ * JavaScriptCore.exp:
+ * debugger/DebuggerActivation.h:
+ (JSC::DebuggerActivation::createStructure):
+ * runtime/Arguments.h:
+ (JSC::Arguments::createStructure):
+ * runtime/BooleanObject.h:
+ (JSC::BooleanObject::createStructure):
+ * runtime/DateInstance.h:
+ (JSC::DateInstance::createStructure):
+ * runtime/DatePrototype.h:
+ (JSC::DatePrototype::createStructure):
+ * runtime/FunctionPrototype.h:
+ (JSC::FunctionPrototype::createStructure):
+ * runtime/GetterSetter.h:
+ (JSC::GetterSetter::createStructure):
+ * runtime/GlobalEvalFunction.h:
+ (JSC::GlobalEvalFunction::createStructure):
+ * runtime/InternalFunction.h:
+ (JSC::InternalFunction::createStructure):
+ * runtime/JSAPIValueWrapper.h:
+ (JSC::JSAPIValueWrapper::createStructure):
+ * runtime/JSActivation.h:
+ (JSC::JSActivation::createStructure):
+ * runtime/JSArray.h:
+ (JSC::JSArray::createStructure):
+ * runtime/JSByteArray.cpp:
+ (JSC::JSByteArray::createStructure):
+ * runtime/JSCell.h:
+ (JSC::JSCell::createDummyStructure):
+ * runtime/JSFunction.h:
+ (JSC::JSFunction::createStructure):
+ * runtime/JSGlobalObject.h:
+ (JSC::JSGlobalObject::createStructure):
+ * runtime/JSNotAnObject.h:
+ (JSC::JSNotAnObject::createStructure):
+ * runtime/JSONObject.h:
+ (JSC::JSONObject::createStructure):
+ * runtime/JSObject.h:
+ (JSC::JSObject::createStructure):
+ (JSC::JSObject::putAnonymousValue):
+ (JSC::JSObject::getAnonymousValue):
+ * runtime/JSPropertyNameIterator.h:
+ (JSC::JSPropertyNameIterator::createStructure):
+ * runtime/JSStaticScopeObject.h:
+ (JSC::JSStaticScopeObject::createStructure):
+ * runtime/JSString.h:
+ (JSC::Fiber::createStructure):
+ * runtime/JSVariableObject.h:
+ (JSC::JSVariableObject::createStructure):
+ * runtime/JSWrapperObject.h:
+ (JSC::JSWrapperObject::createStructure):
+ (JSC::JSWrapperObject::JSWrapperObject):
+ * runtime/MathObject.h:
+ (JSC::MathObject::createStructure):
+ * runtime/NumberConstructor.h:
+ (JSC::NumberConstructor::createStructure):
+ * runtime/NumberObject.h:
+ (JSC::NumberObject::createStructure):
+ * runtime/RegExpConstructor.h:
+ (JSC::RegExpConstructor::createStructure):
+ * runtime/RegExpObject.h:
+ (JSC::RegExpObject::createStructure):
+ * runtime/StringObject.h:
+ (JSC::StringObject::createStructure):
+ * runtime/StringObjectThatMasqueradesAsUndefined.h:
+ (JSC::StringObjectThatMasqueradesAsUndefined::createStructure):
+ * runtime/Structure.cpp:
+ (JSC::Structure::~Structure):
+ (JSC::Structure::materializePropertyMap):
+ * runtime/Structure.h:
+ (JSC::Structure::create):
+ (JSC::Structure::anonymousSlotCount):
+ * runtime/StructureTransitionTable.h:
+
+2010-01-27 Oliver Hunt <oliver@apple.com>
+
+ Windows build fix.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-01-27 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ MessageEvent.data should deserialize in the context of the MessageEvent's global object
+ https://bugs.webkit.org/show_bug.cgi?id=34227
+
+ Add logic to allow us to create an Object, Array, or Date instance
+ so we can create them in the context of a specific global object,
+ rather than just using the current lexical global object.
+
+ * JavaScriptCore.exp:
+ * runtime/DateInstance.cpp:
+ (JSC::DateInstance::DateInstance):
+ * runtime/DateInstance.h:
+ * runtime/JSGlobalObject.h:
+ (JSC::constructEmptyObject):
+ (JSC::constructEmptyArray):
+
+2010-01-27 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=34150
+ WebKit needs a mechanism to catch stale HashMap entries
+
+ It is very difficult to catch stale pointers that are HashMap keys - since a pointer's hash
+ is just its value, it is very unlikely that any observable problem is reproducible.
+
+ This extends hash table consistency checks to check that pointers are referencing allocated
+ memory blocks, and makes it possible to invoke the checks explicitly (it is not feasible
+ to enable CHECK_HASHTABLE_CONSISTENCY by default, because that affects performance too much).
+
+ * wtf/HashMap.h: (WTF::::checkConsistency): Call through to HashTable implementation. We can
+ add similar calls to HashSet and HashCountedSet, but I haven't seen hard to debug problems
+ with those yet.
+
+ * wtf/HashSet.h: (WTF::::remove): The version of checkTableConsistency that's guarded by
+ CHECK_HASHTABLE_CONSISTENCY is now called internalCheckTableConsistency().
+
+ * wtf/HashTable.h:
+ (WTF::HashTable::internalCheckTableConsistency):
+ (WTF::HashTable::internalCheckTableConsistencyExceptSize):
+ (WTF::HashTable::checkTableConsistencyExceptSize):
+ Expose checkTableConsistency() even if CHECK_HASHTABLE_CONSISTENCY is off.
+ (WTF::::add): Updated for checkTableConsistency renaming.
+ (WTF::::addPassingHashCode): Ditto.
+ (WTF::::removeAndInvalidate): Ditto.
+ (WTF::::remove): Ditto.
+ (WTF::::rehash): Ditto.
+ (WTF::::checkTableConsistency): The assertion for !shouldExpand() was not correct - this
+ function returns true for tables with m_table == 0.
+ (WTF::::checkTableConsistencyExceptSize): Call checkValueConsistency for key. Potentially,
+ we could do the same for values.
+
+ * wtf/HashTraits.h:
+ (WTF::GenericHashTraits::checkValueConsistency): An empty function that can be overridden
+ to add checks. Currently, the only override is for pointer hashes.
+
+ * wtf/RefPtrHashMap.h: (WTF::::remove): Updated for checkTableConsistency renaming.
+
+2010-01-27 Anton Muhin <antonm@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ Remove trailing \ from inline function code
+ https://bugs.webkit.org/show_bug.cgi?id=34223
+
+ * assembler/ARMv7Assembler.h:
+ (JSC::ARMThumbImmediate::countLeadingZerosPartial):
+
+2010-01-27 Kwang Yul Seo <skyul@company100.net>
+
+ Reviewed by Eric Seidel.
+
+ [BREWMP] Port WTF's randomNumber
+ https://bugs.webkit.org/show_bug.cgi?id=33566
+
+ Use GETRAND to generate 4 byte random byte sequence to implement
+ weakRandomNumber. Create a secure random number generator with
+ AEECLSID_RANDOM to implement randomNumber.
+
+ * wtf/RandomNumber.cpp:
+ (WTF::weakRandomNumber):
+ (WTF::randomNumber):
+
+2010-01-27 Kwang Yul Seo <skyul@company100.net>
+
+ Reviewed by Eric Seidel.
+
+ [BREWMP] Port getCPUTime
+ https://bugs.webkit.org/show_bug.cgi?id=33572
+
+ Use GETUPTIMEMS which returns a continuously and
+ linearly increasing millisecond timer from the time the device
+ was powered on. This function is enough to implement getCPUTime.
+
+ * runtime/TimeoutChecker.cpp:
+ (JSC::getCPUTime):
+
+2010-01-27 Kwang Yul Seo <skyul@company100.net>
+
+ Reviewed by Oliver Hunt.
+
+ [BREWMP] Add MarkStack fastMalloc implementation for platforms without VirtualAlloc or mmap.
+ https://bugs.webkit.org/show_bug.cgi?id=33582
+
+ Use fastMalloc and fastFree to implement MarkStack::allocateStack and
+ MarkStack::releaseStack for platforms without page level allocation.
+
+ * runtime/MarkStack.h:
+ (JSC::MarkStack::MarkStackArray::shrinkAllocation):
+ * runtime/MarkStackNone.cpp: Added.
+ (JSC::MarkStack::initializePagesize):
+ (JSC::MarkStack::allocateStack):
+ (JSC::MarkStack::releaseStack):
+
+2010-01-27 Kwang Yul Seo <skyul@company100.net>
+
+ Reviewed by Eric Seidel.
+
+ [BREWMP] Don't use time function
+ https://bugs.webkit.org/show_bug.cgi?id=33577
+
+ Calling time(0) in BREW devices causes a crash because time
+ is not properly ported in most devices. Cast currentTime() to
+ time_t to get the same result as time(0).
+
+ * wtf/DateMath.cpp:
+ (WTF::calculateUTCOffset):
+
+2010-01-27 Alexey Proskuryakov <ap@apple.com>
+
+ Revert r53899 (HashMap<AtomicStringImpl*, Value> key checks) and subsequent build fixes,
+ because they make SVG tests crash in release builds.
+
+ * wtf/HashMap.h:
+ (WTF::::remove):
+ * wtf/HashSet.h:
+ (WTF::::remove):
+ * wtf/HashTable.h:
+ (WTF::::add):
+ (WTF::::addPassingHashCode):
+ (WTF::::removeAndInvalidate):
+ (WTF::::remove):
+ (WTF::::rehash):
+ (WTF::::checkTableConsistency):
+ (WTF::::checkTableConsistencyExceptSize):
+ * wtf/HashTraits.h:
+ (WTF::GenericHashTraits::emptyValue):
+ (WTF::):
+ * wtf/RefPtrHashMap.h:
+ (WTF::::remove):
+
+2010-01-26 Alexey Proskuryakov <ap@apple.com>
+
+ More Windows build fixing.
+
+ * wtf/HashTraits.h: _msize takes void*, remove const qualifier from type.
+
+2010-01-26 Alexey Proskuryakov <ap@apple.com>
+
+ Windows build fix.
+
+ * wtf/HashTraits.h: Include malloc.h for _msize().
+
+2010-01-26 Alexey Proskuryakov <ap@apple.com>
+
+ Build fix.
+
+ * wtf/HashTable.h: (WTF::HashTable::checkTableConsistencyExceptSize): Remove const from a
+ static (empty) version of this function.
+
+2010-01-26 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=34150
+ WebKit needs a mechanism to catch stale HashMap entries
+
+ It is very difficult to catch stale pointers that are HashMap keys - since a pointer's hash
+ is just its value, it is very unlikely that any observable problem is reproducible.
+
+ This extends hash table consistency checks to check that pointers are referencing allocated
+ memory blocks, and makes it possible to invoke the checks explicitly (it is not feasible
+ to enable CHECK_HASHTABLE_CONSISTENCY by default, because that affects performance too much).
+
+ * wtf/HashMap.h: (WTF::::checkConsistency): Call through to HashTable implementation. We can
+ add similar calls to HashSet and HashCountedSet, but I haven't seen hard to debug problems
+ with those yet.
+
+ * wtf/HashSet.h: (WTF::::remove): The version of checkTableConsistency that's guarded by
+ CHECK_HASHTABLE_CONSISTENCY is now called internalCheckTableConsistency().
+
+ * wtf/HashTable.h:
+ (WTF::HashTable::internalCheckTableConsistency):
+ (WTF::HashTable::internalCheckTableConsistencyExceptSize):
+ (WTF::HashTable::checkTableConsistencyExceptSize):
+ Expose checkTableConsistency() even if CHECK_HASHTABLE_CONSISTENCY is off.
+ (WTF::::add): Updated for checkTableConsistency renaming.
+ (WTF::::addPassingHashCode): Ditto.
+ (WTF::::removeAndInvalidate): Ditto.
+ (WTF::::remove): Ditto.
+ (WTF::::rehash): Ditto.
+ (WTF::::checkTableConsistency): The assertion for !shouldExpand() was not correct - this
+ function returns true for tables with m_table == 0.
+ (WTF::::checkTableConsistencyExceptSize): Call checkValueConsistency for key. Potentially,
+ we could do the same for values.
+
+ * wtf/HashTraits.h:
+ (WTF::GenericHashTraits::checkValueConsistency): An empty function that can be overridden
+ to add checks. Currently, the only override is for pointer hashes.
+
+ * wtf/RefPtrHashMap.h: (WTF::::remove): Updated for checkTableConsistency renaming.
+
+2010-01-26 Lyon Chen <liachen@rim.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Opcode.h use const void* for Opcode cause error #1211 for RVCT compiler
+ https://bugs.webkit.org/show_bug.cgi?id=33902
+
+ * bytecode/Opcode.h:
+
+2010-01-26 Steve Falkenburg <sfalken@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Windows build references non-existent include paths
+ https://bugs.webkit.org/show_bug.cgi?id=34175
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
+ * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops:
+ * JavaScriptCore.vcproj/jsc/jscCommon.vsprops:
+ * JavaScriptCore.vcproj/testapi/testapi.vcproj:
+ * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops:
+
+2010-01-26 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Geoffrey Garen.
+
+ Using JavaScriptCore API with a webkit vended context can result in slow script dialog
+ https://bugs.webkit.org/show_bug.cgi?id=34172
+
+ Make the APIShim correctly increment and decrement the timeout
+ entry counter.
+
+ * API/APIShims.h:
+ (JSC::APIEntryShimWithoutLock::APIEntryShimWithoutLock):
+ (JSC::APIEntryShimWithoutLock::~APIEntryShimWithoutLock):
+ (JSC::APICallbackShim::APICallbackShim):
+ (JSC::APICallbackShim::~APICallbackShim):
+
+2010-01-26 Simon Hausmann <simon.hausmann@nokia.com>
+
+ [Qt] Fix compilation of QtScript with non-gcc compilers
+
+ Variable length stack arrays are a gcc extension. Use QVarLengthArray
+ as a more portable solution that still tries to allocate on the stack
+ first.
+
+ * qt/api/qscriptvalue_p.h:
+ (QScriptValuePrivate::call):
+
+2010-01-26 Simon Hausmann <simon.hausmann@nokia.com>
+
+ Reviewed by Tor Arne Vestbø.
+
+ [Qt] Fix the build on platforms without JIT support.
+
+ The JIT support should be determined at compile-time via wtf/Platform.h
+
+ * qt/api/QtScript.pro:
+
+2010-01-26 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ First steps of the QtScript API.
+
+ Two new classes were created; QScriptEngine and QScriptValue.
+ The first should encapsulate a javascript context and the second a script
+ value.
+
+ This API is still in development, so it isn't compiled by default.
+ To trigger compilation, pass --qmakearg="CONFIG+=build-qtscript" to
+ build-webkit.
+
+ https://bugs.webkit.org/show_bug.cgi?id=32565
+
+ * qt/api/QtScript.pro: Added.
+ * qt/api/qscriptconverter_p.h: Added.
+ (QScriptConverter::toString):
+ * qt/api/qscriptengine.cpp: Added.
+ (QScriptEngine::QScriptEngine):
+ (QScriptEngine::~QScriptEngine):
+ (QScriptEngine::evaluate):
+ (QScriptEngine::collectGarbage):
+ * qt/api/qscriptengine.h: Added.
+ * qt/api/qscriptengine_p.cpp: Added.
+ (QScriptEnginePrivate::QScriptEnginePrivate):
+ (QScriptEnginePrivate::~QScriptEnginePrivate):
+ (QScriptEnginePrivate::evaluate):
+ * qt/api/qscriptengine_p.h: Added.
+ (QScriptEnginePrivate::get):
+ (QScriptEnginePrivate::collectGarbage):
+ (QScriptEnginePrivate::makeJSValue):
+ (QScriptEnginePrivate::context):
+ * qt/api/qscriptvalue.cpp: Added.
+ (QScriptValue::QScriptValue):
+ (QScriptValue::~QScriptValue):
+ (QScriptValue::isValid):
+ (QScriptValue::isBool):
+ (QScriptValue::isBoolean):
+ (QScriptValue::isNumber):
+ (QScriptValue::isNull):
+ (QScriptValue::isString):
+ (QScriptValue::isUndefined):
+ (QScriptValue::isError):
+ (QScriptValue::isObject):
+ (QScriptValue::isFunction):
+ (QScriptValue::toString):
+ (QScriptValue::toNumber):
+ (QScriptValue::toBool):
+ (QScriptValue::toBoolean):
+ (QScriptValue::toInteger):
+ (QScriptValue::toInt32):
+ (QScriptValue::toUInt32):
+ (QScriptValue::toUInt16):
+ (QScriptValue::call):
+ (QScriptValue::engine):
+ (QScriptValue::operator=):
+ (QScriptValue::equals):
+ (QScriptValue::strictlyEquals):
+ * qt/api/qscriptvalue.h: Added.
+ (QScriptValue::):
+ * qt/api/qscriptvalue_p.h: Added.
+ (QScriptValuePrivate::):
+ (QScriptValuePrivate::get):
+ (QScriptValuePrivate::QScriptValuePrivate):
+ (QScriptValuePrivate::isValid):
+ (QScriptValuePrivate::isBool):
+ (QScriptValuePrivate::isNumber):
+ (QScriptValuePrivate::isNull):
+ (QScriptValuePrivate::isString):
+ (QScriptValuePrivate::isUndefined):
+ (QScriptValuePrivate::isError):
+ (QScriptValuePrivate::isObject):
+ (QScriptValuePrivate::isFunction):
+ (QScriptValuePrivate::toString):
+ (QScriptValuePrivate::toNumber):
+ (QScriptValuePrivate::toBool):
+ (QScriptValuePrivate::toInteger):
+ (QScriptValuePrivate::toInt32):
+ (QScriptValuePrivate::toUInt32):
+ (QScriptValuePrivate::toUInt16):
+ (QScriptValuePrivate::equals):
+ (QScriptValuePrivate::strictlyEquals):
+ (QScriptValuePrivate::assignEngine):
+ (QScriptValuePrivate::call):
+ (QScriptValuePrivate::engine):
+ (QScriptValuePrivate::context):
+ (QScriptValuePrivate::value):
+ (QScriptValuePrivate::object):
+ (QScriptValuePrivate::inherits):
+ (QScriptValuePrivate::isJSBased):
+ (QScriptValuePrivate::isNumberBased):
+ (QScriptValuePrivate::isStringBased):
+ * qt/api/qtscriptglobal.h: Added.
+ * qt/tests/qscriptengine/qscriptengine.pro: Added.
+ * qt/tests/qscriptengine/tst_qscriptengine.cpp: Added.
+ (tst_QScriptEngine::tst_QScriptEngine):
+ (tst_QScriptEngine::~tst_QScriptEngine):
+ (tst_QScriptEngine::init):
+ (tst_QScriptEngine::cleanup):
+ (tst_QScriptEngine::collectGarbage):
+ (tst_QScriptEngine::evaluate):
+ * qt/tests/qscriptvalue/qscriptvalue.pro: Added.
+ * qt/tests/qscriptvalue/tst_qscriptvalue.cpp: Added.
+ (tst_QScriptValue::tst_QScriptValue):
+ (tst_QScriptValue::~tst_QScriptValue):
+ (tst_QScriptValue::init):
+ (tst_QScriptValue::cleanup):
+ (tst_QScriptValue::ctor):
+ (tst_QScriptValue::toString_data):
+ (tst_QScriptValue::toString):
+ (tst_QScriptValue::copyConstructor_data):
+ (tst_QScriptValue::copyConstructor):
+ (tst_QScriptValue::assignOperator_data):
+ (tst_QScriptValue::assignOperator):
+ (tst_QScriptValue::dataSharing):
+ (tst_QScriptValue::constructors_data):
+ (tst_QScriptValue::constructors):
+ (tst_QScriptValue::call):
+ * qt/tests/tests.pri: Added.
+ * qt/tests/tests.pro: Added.
+
+2010-01-25 Dmitry Titov <dimich@chromium.org>
+
+ Reviewed by David Levin.
+
+ Fix Chromium Linux tests: the pthread functions on Linux produce segfault if they receive 0 thread handle.
+ After r53714, we can have 0 thread handles passed to pthread_join and pthread_detach if corresponding threads
+ were already terminated and their threadMap entries cleared.
+ Add a 0 check.
+
+ * wtf/ThreadingPthreads.cpp:
+ (WTF::waitForThreadCompletion):
+ (WTF::detachThread):
+
+2010-01-24 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Refactor JITStubs.cpp so that DEFINE_STUB_FUNCTION is only used once for each function
+ https://bugs.webkit.org/show_bug.cgi?id=33866
+
+ Place the guard USE(JSVALUE32_64) inside the body of the DEFINE_STUB_FUNCTION
+ macro for those functions that are always present.
+
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+
+2010-01-22 Kevin Watters <kevinwatters@gmail.com>
+
+ Reviewed by Kevin Ollivier.
+
+ [wx] Remove the Bakefile build system, which is no longer being used.
+
+ https://bugs.webkit.org/show_bug.cgi?id=34022
+
+ * JavaScriptCoreSources.bkl: Removed.
+ * jscore.bkl: Removed.
+
+2010-01-22 Steve Falkenburg <sfalken@apple.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=34025
+ Enable client-based Geolocation abstraction for Mac, Windows AppleWebKit targets.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2010-01-22 Dmitry Titov <dimich@chromium.org>
+
+ Not reviewed, attempted Snow Leopard build fix.
+
+ * wtf/ThreadingPthreads.cpp: Add a forward declaration of a function which is not 'static'.
+
+2009-01-22 Dmitry Titov <dimich@chromium.org>
+
+ Reviewed by Maciej Stachowiak.
+
+ Fix the leak of ThreadIdentifiers in threadMap across threads.
+ https://bugs.webkit.org/show_bug.cgi?id=32689
+
+ Test is added to DumpRenderTree.mm.
+
+ * Android.mk: Added file ThreadIdentifierDataPthreads.(h|cpp) to build.
+ * Android.v8.wtf.mk: Ditto.
+ * GNUmakefile.am: Ditto.
+ * JavaScriptCore.gyp/JavaScriptCore.gyp: Ditto.
+ * JavaScriptCore.gypi: Ditto.
+ * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
+
+ * wtf/ThreadIdentifierDataPthreads.cpp: Added. Contains custom implementation of thread-specific data that uses custom destructor.
+ (WTF::ThreadIdentifierData::~ThreadIdentifierData): Removes the ThreadIdentifier from the threadMap.
+ (WTF::ThreadIdentifierData::identifier):
+ (WTF::ThreadIdentifierData::initialize):
+ (WTF::ThreadIdentifierData::destruct): Custom thread-specific destructor. Resets the value for the key again to cause second invoke.
+ (WTF::ThreadIdentifierData::initializeKeyOnceHelper):
+ (WTF::ThreadIdentifierData::initializeKeyOnce): Need to use pthread_once since initialization may come on any thread(s).
+ * wtf/ThreadIdentifierDataPthreads.h: Added.
+ (WTF::ThreadIdentifierData::ThreadIdentifierData):
+
+ * wtf/Threading.cpp:
+ (WTF::threadEntryPoint): Move initializeCurrentThreadInternal to after the lock to make
+ sure it is invoked when ThreadIdentifier is already established.
+
+ * wtf/Threading.h: Rename setThreadNameInternal -> initializeCurrentThreadInternal since it does more then only set the name now.
+ * wtf/ThreadingNone.cpp:
+ (WTF::initializeCurrentThreadInternal): Ditto.
+ * wtf/ThreadingWin.cpp:
+ (WTF::initializeCurrentThreadInternal): Ditto.
+ (WTF::initializeThreading): Ditto.
+ * wtf/gtk/ThreadingGtk.cpp:
+ (WTF::initializeCurrentThreadInternal): Ditto.
+ * wtf/qt/ThreadingQt.cpp:
+ (WTF::initializeCurrentThreadInternal): Ditto.
+
+ * wtf/ThreadingPthreads.cpp:
+ (WTF::establishIdentifierForPthreadHandle):
+ (WTF::clearPthreadHandleForIdentifier): Make it not 'static' so the ~ThreadIdentifierData() in another file can call it.
+ (WTF::initializeCurrentThreadInternal): Set the thread-specific data. The ThreadIdentifier is already established by creating thread.
+ (WTF::waitForThreadCompletion): Remove call to clearPthreadHandleForIdentifier(threadID) since it is now done in ~ThreadIdentifierData().
+ (WTF::detachThread): Ditto.
+ (WTF::currentThread): Use the thread-specific data to get the ThreadIdentifier. It's many times faster then Mutex-protected iteration through the map.
+ Also, set the thread-specific data if called first time on the thread.
+
+2010-01-21 Kwang Yul Seo <skyul@company100.net>
+
+ Reviewed by Alexey Proskuryakov.
+
+ Add ThreadSpecific for ENABLE(SINGLE_THREADED)
+ https://bugs.webkit.org/show_bug.cgi?id=33878
+
+ Implement ThreadSpecific with a simple getter/setter
+ when ENABLE(SINGLE_THREADED) is true.
+
+ Due to the change in https://bugs.webkit.org/show_bug.cgi?id=33236,
+ an implementation of ThreadSpecific must be available to build WebKit.
+ This causes a build failure for platforms without a proper
+ ThreadSpecific implementation.
+
+ * wtf/ThreadSpecific.h:
+ (WTF::::ThreadSpecific):
+ (WTF::::~ThreadSpecific):
+ (WTF::::get):
+ (WTF::::set):
+ (WTF::::destroy):
+
+2010-01-21 Kwang Yul Seo <skyul@company100.net>
+
+ Reviewed by Maciej Stachowiak.
+
+ Add fastStrDup to FastMalloc
+ https://bugs.webkit.org/show_bug.cgi?id=33937
+
+ The new string returned by fastStrDup is obtained with fastMalloc,
+ and can be freed with fastFree. This makes the memory management
+ more consistent because we don't need to keep strdup allocated pointers
+ and free them with free(). Instead we can use fastFree everywhere.
+
+ * wtf/FastMalloc.cpp:
+ (WTF::fastStrDup):
+ * wtf/FastMalloc.h:
+
+2010-01-21 Brady Eidson <beidson@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ history.back() for same-document history traversals isn't synchronous as the specification states.
+ <rdar://problem/7535011> and https://bugs.webkit.org/show_bug.cgi?id=33538
+
+ * wtf/Platform.h: Add a "HISTORY_ALWAYS_ASYNC" enable and turn it on for Chromium.
+
+2010-01-21 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Always create a prototype for automatically managed classes.
+
+ This fixes some errors where prototype chains were not correctly hooked
+ up, and also ensures that API classes work correctly with features like
+ instanceof.
+
+ * API/JSClassRef.cpp:
+ (OpaqueJSClass::create): Cleaned up some of this code. Also changed it
+ to always create a prototype class.
+
+ * API/tests/testapi.c:
+ (Derived2_class):
+ (main): Fixed a null value crash in the exception checking code.
+ * API/tests/testapi.js: Added some tests for the case where a prototype
+ chain would not be hooked up correctly.
+
+2010-01-21 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Force JSC to create a prototype chain for API classes with a
+ parent class but no static functions.
+
+ * API/JSClassRef.cpp:
+ (OpaqueJSClass::create):
+
+2010-01-21 Kent Hansen <kent.hansen@nokia.com>
+
+ Reviewed by Geoffrey Garen.
+
+ Object.getOwnPropertyDescriptor always returns undefined for JS API objects
+ https://bugs.webkit.org/show_bug.cgi?id=33946
+
+ Ideally the getOwnPropertyDescriptor() reimplementation should return an
+ access descriptor that wraps the property getter and setter callbacks, but
+ that approach is much more involved than returning a value descriptor.
+ Keep it simple for now.
+
+ * API/JSCallbackObject.h:
+ * API/JSCallbackObjectFunctions.h:
+ (JSC::::getOwnPropertyDescriptor):
+ * API/tests/testapi.js:
+
+2010-01-20 Mark Rowe <mrowe@apple.com>
+
+ Build fix.
+
+ * wtf/FastMalloc.cpp:
+ (WTF::TCMalloc_PageHeap::initializeScavenger): Remove unnecessary function call.
+
+2010-01-20 Mark Rowe <mrowe@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Use the inline i386 assembly for x86_64 as well rather than falling back to using pthread mutexes.
+
+ * wtf/TCSpinLock.h:
+ (TCMalloc_SpinLock::Lock):
+ (TCMalloc_SpinLock::Unlock):
+ (TCMalloc_SlowLock):
+
+2010-01-20 Mark Rowe <mrowe@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ <rdar://problem/7215063> Use GCD instead of an extra thread for FastMalloc scavenging on platforms where it is supported
+
+ Abstract the background scavenging slightly so that an alternate implementation that uses GCD can be used on platforms
+ where it is supported.
+
+ * wtf/FastMalloc.cpp:
+ (WTF::TCMalloc_PageHeap::init):
+ (WTF::TCMalloc_PageHeap::initializeScavenger):
+ (WTF::TCMalloc_PageHeap::signalScavenger):
+ (WTF::TCMalloc_PageHeap::shouldContinueScavenging):
+ (WTF::TCMalloc_PageHeap::Delete):
+ (WTF::TCMalloc_PageHeap::periodicScavenge):
+ * wtf/Platform.h:
+
+2010-01-20 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ <rdar://problem/7562708> REGRESSION(53460): Heap::destroy may not run
+ all destructors
+
+ * runtime/Collector.cpp:
+ (JSC::Heap::freeBlocks): Instead of fully marking protected objects,
+ just set their mark bits. This prevents protected objects from keeping
+ unprotected objects alive. Destructor order is not guaranteed, so it's
+ OK to destroy objects pointed to by protected objects before destroying
+ protected objects.
+
+2010-01-19 David Levin <levin@chromium.org>
+
+ Reviewed by Oliver Hunt.
+
+ CrossThreadCopier needs to support ThreadSafeShared better.
+ https://bugs.webkit.org/show_bug.cgi?id=33698
+
+ * wtf/TypeTraits.cpp: Added tests for the new type traits.
+ * wtf/TypeTraits.h:
+ (WTF::IsSubclass): Determines if a class is a derived from another class.
+ (WTF::IsSubclassOfTemplate): Determines if a class is a derived from a
+ template class (with one parameter that is unknown).
+ (WTF::RemoveTemplate): Reveals the type for a template parameter.
+
+2010-01-20 Steve Falkenburg <sfalken@apple.com>
+
+ Reviewed by Darin Adler and Adam Roben.
+
+ Feature defines are difficult to maintain on Windows builds
+ https://bugs.webkit.org/show_bug.cgi?id=33883
+
+ FeatureDefines.vsprops are now maintained in a way similar to
+ Configurations/FeatureDefines.xcconfig, with the added advantage
+ of having a single FeatureDefines file across all projects.
+
+ * Configurations/FeatureDefines.xcconfig: Add comments about keeping feature definitions in sync.
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add FeatureDefines.vsprops inherited property sheet.
+ * JavaScriptCore.vcproj/WTF/WTF.vcproj: Add FeatureDefines.vsprops inherited property sheet.
+
+2010-01-20 Csaba Osztrogonác <ossy@webkit.org>
+
+ [Qt] Unreviewed buildfix for r53547.
+
+ * DerivedSources.pro:
+
+2010-01-20 Tor Arne Vestbø <tor.arne.vestbo@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Make extraCompilers for generated sources depend on their scripts
+
+ * DerivedSources.pro:
+
+2010-01-19 Brian Weinstein <bweinstein@apple.com>
+
+ Reviewed by Tim Hatcher.
+
+ When JavaScriptCore calls Debugger::Exception, have it pass a
+ hasHandler variable that represents if exception is being handled
+ in the same function (not in a parent on the call stack).
+
+ This just adds a new parameter, no behavior is changed.
+
+ * debugger/Debugger.h:
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::throwException):
+
+2010-01-18 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Adam Barth.
+
+ Inline functions that are hot in DOM manipulation
+ https://bugs.webkit.org/show_bug.cgi?id=33820
+
+ (3% speedup on Dromaeo DOM Core tests)
+
+ * runtime/WeakGCMap.h:
+ (JSC::::get): inline
+
+2010-01-19 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Unreviewed build fix for JIT with RVCT.
+
+ Remove IMPORT statement; cti_vm_throw is already defined in JITStubs.h.
+ Remove extra ')'.
+
+ * jit/JITStubs.cpp:
+ (JSC::ctiVMThrowTrampoline):
+
+2010-01-19 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ REGRESSION (52082): Crash on worker thread when reloading http://radnan.public.iastate.edu/procedural/
+ https://bugs.webkit.org/show_bug.cgi?id=33826
+
+ This bug was caused by a GC-protected object being destroyed early by
+ Heap::destroy. Clients of the GC protect APIs (reasonably) expect pointers
+ to GC-protected memory to be valid.
+
+ The solution is to do two passes of tear-down in Heap::destroy. The first
+ pass tears down all unprotected objects. The second pass ASSERTs that all
+ previously protected objects are now unprotected, and then tears down
+ all perviously protected objects. These two passes simulate the two passes
+ that would have been required to free a protected object during normal GC.
+
+ * API/JSContextRef.cpp: Removed some ASSERTs that have moved into Heap.
+
+ * runtime/Collector.cpp:
+ (JSC::Heap::destroy): Moved ASSERTs to here.
+ (JSC::Heap::freeBlock): Tidied up the use of didShrink by moving its
+ setter to the function that does the shrinking.
+ (JSC::Heap::freeBlocks): Implemented above algorithm.
+ (JSC::Heap::shrinkBlocks): Tidied up the use of didShrink.
+
+2010-01-19 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (build fix).
+
+ Reverting r53455, breaks 2 javascriptcore tests.
+
+ * API/JSContextRef.cpp:
+ * runtime/Collector.cpp:
+ (JSC::Heap::destroy):
+ (JSC::Heap::freeBlock):
+ (JSC::Heap::freeBlocks):
+ (JSC::Heap::shrinkBlocks):
+
+2010-01-18 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (build fix).
+
+ Revert r53454, since it causes much sadness in this world.
+
+ * runtime/UString.cpp:
+ (JSC::UString::spliceSubstringsWithSeparators):
+ (JSC::UString::replaceRange):
+ * runtime/UStringImpl.cpp:
+ (JSC::UStringImpl::baseSharedBuffer):
+ (JSC::UStringImpl::sharedBuffer):
+ (JSC::UStringImpl::~UStringImpl):
+ * runtime/UStringImpl.h:
+ (JSC::UntypedPtrAndBitfield::UntypedPtrAndBitfield):
+ (JSC::UntypedPtrAndBitfield::asPtr):
+ (JSC::UntypedPtrAndBitfield::operator&=):
+ (JSC::UntypedPtrAndBitfield::operator|=):
+ (JSC::UntypedPtrAndBitfield::operator&):
+ (JSC::UStringImpl::create):
+ (JSC::UStringImpl::cost):
+ (JSC::UStringImpl::isIdentifier):
+ (JSC::UStringImpl::setIsIdentifier):
+ (JSC::UStringImpl::ref):
+ (JSC::UStringImpl::deref):
+ (JSC::UStringImpl::checkConsistency):
+ (JSC::UStringImpl::UStringImpl):
+ (JSC::UStringImpl::bufferOwnerString):
+ (JSC::UStringImpl::bufferOwnership):
+ (JSC::UStringImpl::isStatic):
+ * wtf/StringHashFunctions.h:
+ (WTF::stringHash):
+
+2010-01-18 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ REGRESSION (52082): Crash on worker thread when reloading http://radnan.public.iastate.edu/procedural/
+ https://bugs.webkit.org/show_bug.cgi?id=33826
+
+ This bug was caused by a GC-protected object being destroyed early by
+ Heap::destroy. Clients of the GC protect APIs (reasonably) expect pointers
+ to GC-protected memory to be valid.
+
+ The solution is to do two passes of tear-down in Heap::destroy. The first
+ pass tears down all unprotected objects. The second pass ASSERTs that all
+ previously protected objects are now unprotected, and then tears down
+ all perviously protected objects. These two passes simulate the two passes
+ that would have been required to free a protected object during normal GC.
+
+ * API/JSContextRef.cpp: Removed some ASSERTs that have moved into Heap.
+
+ * runtime/Collector.cpp:
+ (JSC::Heap::destroy): Moved ASSERTs to here.
+ (JSC::Heap::freeBlock): Tidied up the use of didShrink by moving its
+ setter to the function that does the shrinking.
+ (JSC::Heap::freeBlocks): Implemented above algorithm.
+ (JSC::Heap::shrinkBlocks): Tidied up the use of didShrink.
+
+2010-01-18 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ https://bugs.webkit.org/show_bug.cgi?id=33731
+ Remove UntypedPtrAndBitfield from UStringImpl (akin to PtrAndFlags).
+
+ This break the OS X Leaks tool. Instead, free up some more bits from the refCount.
+
+ * runtime/UStringImpl.cpp:
+ (JSC::UStringImpl::sharedBuffer):
+ (JSC::UStringImpl::~UStringImpl):
+ * runtime/UStringImpl.h:
+ (JSC::UStringImpl::cost):
+ (JSC::UStringImpl::checkConsistency):
+ (JSC::UStringImpl::UStringImpl):
+ (JSC::UStringImpl::bufferOwnerString):
+ (JSC::UStringImpl::):
+ * wtf/StringHashFunctions.h:
+ (WTF::stringHash):
+
+2010-01-18 Kent Tamura <tkent@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ HTMLInputElement::valueAsDate setter support for type=month.
+ https://bugs.webkit.org/show_bug.cgi?id=33021
+
+ Expose the following functions to be used by WebCore:
+ - WTF::msToyear()
+ - WTF::dayInYear()
+ - WTF::monthFromDayInYear()
+ - WTF::dayInMonthFromDayInYear()
+
+ * JavaScriptCore.exp:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * wtf/DateMath.cpp:
+ (WTF::msToYear): Remove "static inline".
+ (WTF::dayInYear): Remove "static inline".
+ (WTF::monthFromDayInYear): Remove "static inline".
+ (WTF::dayInMonthFromDayInYear): Remove "static inline".
+ * wtf/DateMath.h: Declare the above functions.
+
+2010-01-18 Darin Adler <darin@apple.com>
+
+ Fix build by reverting the previous change.
+
+ * runtime/UString.h: Rolled out the FastAllocBase base class.
+ It was making UString larger, and therefore JSString larger,
+ and too big for a garbage collection cell.
+
+ This raises the unpleasant possibility that many classes became
+ larger because we added the FastAllocBase base class. I am
+ worried about this, and it needs to be investigated.
+
+2010-01-18 Zoltan Horvath <zoltan@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ Allow custom memory allocation control for UString class
+ https://bugs.webkit.org/show_bug.cgi?id=27831
+
+ Inherits the following class from FastAllocBase because it is
+ instantiated by 'new' and no need to be copyable:
+
+ class name - instantiated at:
+ classs UString - JavaScriptCore/runtime/UString.cpp:160
+
+ * runtime/UString.h:
+
+2010-01-18 Evan Cheng <evan.cheng@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Add some ALWAYS_INLINE for key functions not inlined by some versions of GCC.
+ rdar://problem/7553780
+
+ * runtime/JSObject.h:
+ (JSC::JSObject::getPropertySlot): ALWAYS_INLINE both overloads.
+ * runtime/JSString.h:
+ (JSC::JSString::JSString): ALWAYS_INLINE the version that takes a UString.
+ * runtime/UString.h:
+ (JSC::operator==): ALWAYS_INLINE the version that compares two UString objects.
+
+2010-01-18 Csaba Osztrogonác <ossy@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ Delete dftables-xxxxxxxx.in files automatically.
+ https://bugs.webkit.org/show_bug.cgi?id=33796
+
+ * pcre/dftables: unlink unnecessary temporary file.
+
+2010-01-18 Tor Arne Vestbø <tor.arne.vestbo@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Force qmake to generate a single makefile for DerivedSources.pro
+
+ * DerivedSources.pro:
+
+2010-01-18 Csaba Osztrogonác <ossy@webkit.org>
+
+ Rubber-stamped by Gustavo Noronha Silva.
+
+ Rolling out r53391 and r53392 because of random crashes on buildbots.
+ https://bugs.webkit.org/show_bug.cgi?id=33731
+
+ * bytecode/CodeBlock.h:
+ (JSC::CallLinkInfo::seenOnce):
+ (JSC::CallLinkInfo::setSeen):
+ (JSC::MethodCallLinkInfo::MethodCallLinkInfo):
+ (JSC::MethodCallLinkInfo::seenOnce):
+ (JSC::MethodCallLinkInfo::setSeen):
+ * jit/JIT.cpp:
+ (JSC::JIT::unlinkCall):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::patchMethodCallProto):
+ * runtime/UString.cpp:
+ (JSC::UString::spliceSubstringsWithSeparators):
+ (JSC::UString::replaceRange):
+ * runtime/UString.h:
+ * runtime/UStringImpl.cpp:
+ (JSC::UStringImpl::baseSharedBuffer):
+ (JSC::UStringImpl::sharedBuffer):
+ (JSC::UStringImpl::~UStringImpl):
+ * runtime/UStringImpl.h:
+ (JSC::UntypedPtrAndBitfield::UntypedPtrAndBitfield):
+ (JSC::UntypedPtrAndBitfield::asPtr):
+ (JSC::UntypedPtrAndBitfield::operator&=):
+ (JSC::UntypedPtrAndBitfield::operator|=):
+ (JSC::UntypedPtrAndBitfield::operator&):
+ (JSC::UStringImpl::create):
+ (JSC::UStringImpl::cost):
+ (JSC::UStringImpl::isIdentifier):
+ (JSC::UStringImpl::setIsIdentifier):
+ (JSC::UStringImpl::ref):
+ (JSC::UStringImpl::deref):
+ (JSC::UStringImpl::checkConsistency):
+ (JSC::UStringImpl::UStringImpl):
+ (JSC::UStringImpl::bufferOwnerString):
+ (JSC::UStringImpl::bufferOwnership):
+ (JSC::UStringImpl::isStatic):
+ * wtf/StringHashFunctions.h:
+ (WTF::stringHash):
+
+2010-01-18 Simon Hausmann <simon.hausmann@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ Fix the build with strict gcc and RVCT versions: It's not legal to cast a
+ pointer to a function to a void* without an intermediate cast to a non-pointer
+ type. A cast to a ptrdiff_t inbetween fixes it.
+
+ * runtime/JSString.h:
+ (JSC::Fiber::JSString):
+
+2010-01-15 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ https://bugs.webkit.org/show_bug.cgi?id=33731
+ Remove UntypedPtrAndBitfield from UStringImpl (akin to PtrAndFlags).
+
+ This break the OS X Leaks tool. Instead, free up some more bits from the refCount.
+
+ * runtime/UStringImpl.cpp:
+ (JSC::UStringImpl::sharedBuffer):
+ (JSC::UStringImpl::~UStringImpl):
+ * runtime/UStringImpl.h:
+ (JSC::UStringImpl::cost):
+ (JSC::UStringImpl::checkConsistency):
+ (JSC::UStringImpl::UStringImpl):
+ (JSC::UStringImpl::bufferOwnerString):
+ (JSC::UStringImpl::):
+ * wtf/StringHashFunctions.h:
+ (WTF::stringHash):
+
+2010-01-15 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ https://bugs.webkit.org/show_bug.cgi?id=33731
+ Remove uses of PtrAndFlags from JIT data stuctures.
+
+ These break the OS X Leaks tool. Free up a bit in CallLinkInfo, and invalid
+ permutation of pointer states in MethodCallLinkInfo to represent the removed bits.
+
+ * bytecode/CodeBlock.h:
+ (JSC::CallLinkInfo::seenOnce):
+ (JSC::CallLinkInfo::setSeen):
+ (JSC::MethodCallLinkInfo::MethodCallLinkInfo):
+ (JSC::MethodCallLinkInfo::seenOnce):
+ (JSC::MethodCallLinkInfo::setSeen):
+ * jit/JIT.cpp:
+ (JSC::JIT::unlinkCall):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::patchMethodCallProto):
+ * runtime/UString.h:
+
+2010-01-16 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Cache JS string values made from DOM strings (Dromaeo speedup)
+ https://bugs.webkit.org/show_bug.cgi?id=33768
+ <rdar://problem/7353576>
+
+ * runtime/JSString.h:
+ (JSC::jsStringWithFinalizer): Added new mechanism for a string to have an optional
+ finalizer callback, for the benefit of weak-referencing caches.
+ (JSC::):
+ (JSC::Fiber::JSString):
+ (JSC::Fiber::~JSString):
+ * runtime/JSString.cpp:
+ (JSC::JSString::resolveRope): Clear fibers so this doesn't look like a string with a finalizer.
+ * runtime/WeakGCMap.h: Include "Collector.h" to make this header includable by itself.
+
+2010-01-15 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Maciej Stachowiak.
+
+ Fix for <rdar://problem/7548432>
+ Add ALWAYS_INLINE to jsLess for a 1% speedup on llvm-gcc.
+
+ * runtime/Operations.h:
+ (JSC::jsLess):
+
+2010-01-14 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ REGRESISON: Google maps buttons not working properly
+ https://bugs.webkit.org/show_bug.cgi?id=31871
+
+ REGRESSION(r52948): JavaScript exceptions thrown on Google Maps when
+ getting directions for a second time
+ https://bugs.webkit.org/show_bug.cgi?id=33446
+
+ SunSpider and v8 report no change.
+
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::tryCacheGetByID): Update our cached offset in case
+ flattening the dictionary changed any of its offsets.
+
+ * jit/JITStubs.cpp:
+ (JSC::JITThunks::tryCacheGetByID):
+ (JSC::DEFINE_STUB_FUNCTION):
+ * runtime/Operations.h:
+ (JSC::normalizePrototypeChain): ditto
+
+2010-01-14 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ https://bugs.webkit.org/show_bug.cgi?id=33705
+ UStringImpl::create() should use internal storage
+
+ When creating a UStringImpl copying of a UChar*, we can use an internal buffer,
+ by calling UStringImpl::tryCreateUninitialized().
+
+ Also, remove duplicate of copyChars from JSString, call UStringImpl's version.
+
+ Small (max 0.5%) progression on Sunspidey.
+
+ * runtime/JSString.cpp:
+ (JSC::JSString::resolveRope):
+ * runtime/UStringImpl.h:
+ (JSC::UStringImpl::create):
+
+2010-01-14 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Make naming & behaviour of UString[Impl] methods more consistent.
+ https://bugs.webkit.org/show_bug.cgi?id=33702
+
+ UString::create() creates a copy of the UChar* passed, but UStringImpl::create() assumes
+ that it should assume ownership of the provided buffer (with UString::createNonCopying()
+ and UStringImpl::createCopying() providing the alternate behaviours). Unify on create()
+ taking a copy of the provided buffer. For non-copying cases, use the name 'adopt', and
+ make this method take a Vector<UChar>&. For cases where non-copying construction was being
+ used, other than from a Vector<UChar>, change the code to allocate the storage along with
+ the UStringImpl using UStringImpl::createUninitialized(). (The adopt() method also more
+ closely matches that of WebCore::StringImpl).
+
+ Also, UString::createUninitialized() and UStringImpl::createUninitialized() have incompatible
+ behaviours, in that the UString form sets the provided UChar* to a null or non-null value to
+ indicate success or failure, but UStringImpl uses the returned PassRefPtr<UStringImpl> to
+ indicate when allocation has failed (potentially leaving the output Char* uninitialized).
+ This is also incompatible with WebCore::StringImpl's behaviour, in that
+ StringImpl::createUninitialized() will CRASH() if unable to allocate. Some uses of
+ createUninitialized() in JSC are unsafe, since they do not test the result for null.
+ UStringImpl's indication is preferable, since we may want a successful call to set the result
+ buffer to 0 (specifically, StringImpl returns 0 for the buffer where createUninitialized()
+ returns the empty string, which seems reasonable to catch bugs early). UString's method
+ cannot support UStringImpl's behaviour directly, since it returns an object rather than a
+ pointer.
+ - remove UString::createUninitialized(), replace with calls to UStringImpl::createUninitialized()
+ - create a UStringImpl::tryCreateUninitialized() form UStringImpl::createUninitialized(),
+ with current behaviour, make createUninitialized() crash on failure to allocate.
+ - make cases in JSC that do not check the result call createUninitialized(), and cases that do
+ check call tryCreateUninitialized().
+
+ Rename computedHash() to existingHash(), to bring this in line wih WebCore::StringImpl.
+
+ * API/JSClassRef.cpp:
+ (OpaqueJSClassContextData::OpaqueJSClassContextData):
+ * JavaScriptCore.exp:
+ * runtime/ArrayPrototype.cpp:
+ (JSC::arrayProtoFuncToString):
+ * runtime/Identifier.cpp:
+ (JSC::CStringTranslator::translate):
+ (JSC::UCharBufferTranslator::translate):
+ * runtime/JSString.cpp:
+ (JSC::JSString::resolveRope):
+ * runtime/Lookup.cpp:
+ (JSC::HashTable::createTable):
+ * runtime/Lookup.h:
+ (JSC::HashTable::entry):
+ * runtime/StringBuilder.h:
+ (JSC::StringBuilder::release):
+ * runtime/StringConstructor.cpp:
+ (JSC::stringFromCharCodeSlowCase):
+ * runtime/StringPrototype.cpp:
+ (JSC::substituteBackreferencesSlow):
+ (JSC::stringProtoFuncToLowerCase):
+ (JSC::stringProtoFuncToUpperCase):
+ (JSC::stringProtoFuncFontsize):
+ (JSC::stringProtoFuncLink):
+ * runtime/Structure.cpp:
+ (JSC::Structure::despecifyDictionaryFunction):
+ (JSC::Structure::get):
+ (JSC::Structure::despecifyFunction):
+ (JSC::Structure::put):
+ (JSC::Structure::remove):
+ (JSC::Structure::insertIntoPropertyMapHashTable):
+ (JSC::Structure::checkConsistency):
+ * runtime/Structure.h:
+ (JSC::Structure::get):
+ * runtime/StructureTransitionTable.h:
+ (JSC::StructureTransitionTableHash::hash):
+ * runtime/UString.cpp:
+ (JSC::createRep):
+ (JSC::UString::UString):
+ (JSC::UString::spliceSubstringsWithSeparators):
+ (JSC::UString::replaceRange):
+ (JSC::UString::operator=):
+ * runtime/UString.h:
+ (JSC::UString::adopt):
+ (JSC::IdentifierRepHash::hash):
+ (JSC::makeString):
+ * runtime/UStringImpl.h:
+ (JSC::UStringImpl::adopt):
+ (JSC::UStringImpl::create):
+ (JSC::UStringImpl::createUninitialized):
+ (JSC::UStringImpl::tryCreateUninitialized):
+ (JSC::UStringImpl::existingHash):
+
+2010-01-13 Kent Hansen <kent.hansen@nokia.com>
+
+ Reviewed by Oliver Hunt.
+
+ JSON.stringify and JSON.parse needlessly process properties in the prototype chain
+ https://bugs.webkit.org/show_bug.cgi?id=33053
+
+ * runtime/JSONObject.cpp:
+ (JSC::Stringifier::Holder::appendNextProperty):
+ (JSC::Walker::walk):
+
+2010-01-13 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (buildfix).
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-01-13 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=33641
+ Assertion failure in Lexer.cpp if input stream ends while in string escape
+
+ Test: fast/js/end-in-string-escape.html
+
+ * parser/Lexer.cpp: (JSC::Lexer::lex): Bail out quickly on end of stream, not giving the
+ assertion a chance to fire.
+
+2010-01-13 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (buildfix).
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-01-13 Gavin Barraclough <barraclough@apple.com>
+
+ Rubber stamped by Sam Weinig & Darin Adler.
+
+ Three quick fixes to UStringImpl.
+ - The destroy() method can be switched back to a normal destructor; since we've switched
+ the way we protect static strings to be using an odd ref-count the destroy() won't abort.
+ - The cost() calculation logic was wrong. If you have multiple JSStrings wrapping substrings
+ of a base string, they would each report the full cost of the base string to the heap.
+ Instead we should only be reporting once for the base string.
+ - Remove the overloaded new operator calling fastMalloc, replace this with a 'using' to pick
+ up the implementation from the parent class.
+
+ * JavaScriptCore.exp:
+ * runtime/UStringImpl.cpp:
+ (JSC::UStringImpl::~UStringImpl):
+ * runtime/UStringImpl.h:
+ (JSC::UStringImpl::cost):
+ (JSC::UStringImpl::deref):
+
+2010-01-13 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Split the build process in two different .pro files.
+ This allows qmake to be run once all source files are available.
+
+ * DerivedSources.pro: Added.
+ * JavaScriptCore.pri: Moved source generation to DerivedSources.pro
+ * pcre/pcre.pri: Moved source generation to DerivedSources.pro
+
+2010-01-12 Kent Hansen <kent.hansen@nokia.com>
+
+ Reviewed by Geoffrey Garen.
+
+ [ES5] Implement Object.getOwnPropertyNames
+ https://bugs.webkit.org/show_bug.cgi?id=32242
+
+ Add an extra argument to getPropertyNames() and getOwnPropertyNames()
+ (and all reimplementations thereof) that indicates whether non-enumerable
+ properties should be added.
+
+ * API/JSCallbackObject.h:
+ * API/JSCallbackObjectFunctions.h:
+ (JSC::::getOwnPropertyNames):
+ * JavaScriptCore.exp:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * debugger/DebuggerActivation.cpp:
+ (JSC::DebuggerActivation::getOwnPropertyNames):
+ * debugger/DebuggerActivation.h:
+ * runtime/Arguments.cpp:
+ (JSC::Arguments::getOwnPropertyNames):
+ * runtime/Arguments.h:
+ * runtime/CommonIdentifiers.h:
+ * runtime/JSArray.cpp:
+ (JSC::JSArray::getOwnPropertyNames):
+ * runtime/JSArray.h:
+ * runtime/JSByteArray.cpp:
+ (JSC::JSByteArray::getOwnPropertyNames):
+ * runtime/JSByteArray.h:
+ * runtime/JSFunction.cpp:
+ (JSC::JSFunction::getOwnPropertyNames):
+ * runtime/JSFunction.h:
+ * runtime/JSNotAnObject.cpp:
+ (JSC::JSNotAnObject::getOwnPropertyNames):
+ * runtime/JSNotAnObject.h:
+ * runtime/JSObject.cpp:
+ (JSC::getClassPropertyNames):
+ (JSC::JSObject::getPropertyNames):
+ (JSC::JSObject::getOwnPropertyNames):
+ * runtime/JSObject.h:
+ * runtime/JSVariableObject.cpp:
+ (JSC::JSVariableObject::getOwnPropertyNames):
+ * runtime/JSVariableObject.h:
+ * runtime/ObjectConstructor.cpp:
+ (JSC::ObjectConstructor::ObjectConstructor):
+ (JSC::objectConstructorGetOwnPropertyNames):
+ * runtime/RegExpMatchesArray.h:
+ (JSC::RegExpMatchesArray::getOwnPropertyNames):
+ * runtime/StringObject.cpp:
+ (JSC::StringObject::getOwnPropertyNames):
+ * runtime/StringObject.h:
+ * runtime/Structure.cpp: Rename getEnumerablePropertyNames() to getPropertyNames(), which takes an extra argument.
+ (JSC::Structure::getPropertyNames):
+ * runtime/Structure.h:
+ (JSC::):
+
+2010-01-12 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=33540
+ Make it possible to build in debug mode with assertions disabled
+
+ * jit/JITStubs.cpp: (JSC::DEFINE_STUB_FUNCTION):
+ * runtime/Identifier.cpp: (JSC::Identifier::checkSameIdentifierTable):
+ * wtf/FastMalloc.cpp:
+ * wtf/HashTable.h: (WTF::HashTableConstIterator::checkValidity):
+ * yarr/RegexCompiler.cpp: (JSC::Yarr::compileRegex):
+
+2009-11-23 Yong Li <yoli@rim.com>
+
+ Reviewed by Adam Treat.
+
+ Make GIF decoder support down-sampling
+ https://bugs.webkit.org/show_bug.cgi?id=31806
+
+ * platform/image-decoders/ImageDecoder.cpp:
+ (WebCore::ImageDecoder::upperBoundScaledY):
+ (WebCore::ImageDecoder::lowerBoundScaledY):
+ * platform/image-decoders/ImageDecoder.h:
+ (WebCore::RGBA32Buffer::scaledRect):
+ (WebCore::RGBA32Buffer::setScaledRect):
+ (WebCore::ImageDecoder::scaledSize):
+ * platform/image-decoders/gif/GIFImageDecoder.cpp:
+ (WebCore::GIFImageDecoder::sizeNowAvailable):
+ (WebCore::GIFImageDecoder::initFrameBuffer):
+ (WebCore::copyOnePixel):
+ (WebCore::GIFImageDecoder::haveDecodedRow):
+ (WebCore::GIFImageDecoder::frameComplete):
+
+2010-01-12 Adam Barth <abarth@webkit.org>
+
+ Reviewed by Eric Seidel.
+
+ ecma/Date/15.9.5.12-1.js fails every night at midnight
+ https://bugs.webkit.org/show_bug.cgi?id=28041
+
+ Change the test to use a concrete time instead of "now".
+
+ * tests/mozilla/ecma/Date/15.9.5.10-1.js:
+ * tests/mozilla/ecma/Date/15.9.5.12-1.js:
+
+2010-01-11 Csaba Osztrogonác <ossy@webkit.org>
+
+ Reviewed by Ariya Hidayat.
+
+ [Qt] Enable JIT and YARR_JIT if (CPU(X86_64) && OS(LINUX) && GCC_VERSION >= 40100)
+
+ * wtf/Platform.h:
+
+2010-01-11 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Alexey Proskuryakov.
+
+ https://bugs.webkit.org/show_bug.cgi?id=33481
+ Uninitialized data members in ArrayStorage
+
+ SunSpider reports no change.
+
+ * runtime/JSArray.cpp:
+ (JSC::JSArray::JSArray): Initialize missing data members in the two cases
+ where we don't use fastZeroedMalloc, so it doesn't happen automatically.
+
+2010-01-11 Steve Falkenburg <sfalken@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ https://bugs.webkit.org/show_bug.cgi?id=33480
+
+ Improve debugging reliability for WTF on Windows.
+ Store WTF static library's PDB file into a better location.
+
+ * JavaScriptCore.vcproj/WTF/WTF.vcproj:
+
+2010-01-11 Steve Falkenburg <sfalken@apple.com>
+
+ Windows build fix.
+ Remove extraneous entries from def file causing build warning.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-01-10 Kent Hansen <kent.hansen@nokia.com>
+
+ Reviewed by Darin Adler.
+
+ RegExp.prototype.toString returns "//" for empty regular expressions
+ https://bugs.webkit.org/show_bug.cgi?id=33319
+
+ "//" starts a single-line comment, hence "/(?:)/" should be used, according to ECMA.
+
+ * runtime/RegExpPrototype.cpp:
+ (JSC::regExpProtoFuncToString):
+
+ * tests/mozilla/ecma_2/RegExp/properties-001.js:
+ (AddRegExpCases):
+ * tests/mozilla/js1_2/regexp/toString.js:
+ Update relevant Mozilla tests (Mozilla has had this behavior since November 2003).
+
+2010-01-10 Darin Adler <darin@apple.com>
+
+ * tests/mozilla/ecma/Array/15.4.1.1.js: Added property allow-tabs.
+ * tests/mozilla/ecma/Array/15.4.1.2.js: Added property allow-tabs.
+ * tests/mozilla/ecma/Array/15.4.2.1-1.js: Added property allow-tabs.
+ * tests/mozilla/ecma/Array/15.4.2.2-1.js: Added property allow-tabs.
+ * tests/mozilla/ecma/Array/15.4.2.2-2.js: Added property allow-tabs.
+ * tests/mozilla/ecma/Array/15.4.2.3.js: Added property allow-tabs.
+ * tests/mozilla/ecma/Array/15.4.3.2.js: Added property allow-tabs.
+ * tests/mozilla/ecma/Array/15.4.3.js: Added property allow-tabs.
+ * tests/mozilla/ecma/Array/15.4.4.1.js: Added property allow-tabs.
+ * tests/mozilla/ecma/Array/15.4.4.js: Added property allow-tabs.
+ * tests/mozilla/ecma/LexicalConventions/7.7.4.js: Added property allow-tabs.
+ * tests/mozilla/ecma/Math/15.8.2.13.js: Added property allow-tabs.
+ * tests/mozilla/ecma/Math/15.8.2.16.js: Added property allow-tabs.
+ * tests/mozilla/ecma/Math/15.8.2.18.js: Added property allow-tabs.
+ * tests/mozilla/ecma/Math/15.8.2.2.js: Added property allow-tabs.
+ * tests/mozilla/ecma/Math/15.8.2.4.js: Added property allow-tabs.
+ * tests/mozilla/ecma/Math/15.8.2.5.js: Added property allow-tabs.
+ * tests/mozilla/ecma/Math/15.8.2.7.js: Added property allow-tabs.
+ * tests/mozilla/ecma/String/15.5.1.js: Added property allow-tabs.
+ * tests/mozilla/ecma/String/15.5.2.js: Added property allow-tabs.
+ * tests/mozilla/ecma/String/15.5.3.1-3.js: Added property allow-tabs.
+ * tests/mozilla/ecma/String/15.5.3.1-4.js: Added property allow-tabs.
+ * tests/mozilla/ecma/String/15.5.3.js: Added property allow-tabs.
+ * tests/mozilla/ecma/TypeConversion/9.5-2.js: Added property allow-tabs.
+ * tests/mozilla/ecma/jsref.js: Modified property allow-tabs.
+ * tests/mozilla/ecma/shell.js: Modified property allow-tabs.
+ * tests/mozilla/ecma_2/LexicalConventions/keywords-001.js: Added property allow-tabs.
+ * tests/mozilla/ecma_2/RegExp/exec-001.js: Added property allow-tabs.
+ * tests/mozilla/ecma_2/String/match-004.js: Added property allow-tabs.
+ * tests/mozilla/ecma_2/String/replace-001.js: Added property allow-tabs.
+ * tests/mozilla/ecma_2/String/split-002.js: Added property allow-tabs.
+ * tests/mozilla/ecma_2/jsref.js: Modified property allow-tabs.
+ * tests/mozilla/ecma_2/shell.js: Added property allow-tabs.
+ * tests/mozilla/ecma_3/Date/shell.js: Modified property allow-tabs.
+ * tests/mozilla/ecma_3/Exceptions/regress-181654.js: Added property allow-tabs.
+ * tests/mozilla/ecma_3/RegExp/regress-209067.js: Added property allow-tabs.
+ * tests/mozilla/ecma_3/RegExp/regress-85721.js: Added property allow-tabs.
+ * tests/mozilla/importList.html: Added property allow-tabs.
+ * tests/mozilla/js1_1/shell.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/Array/general1.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/Array/general2.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/Array/slice.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/Array/splice1.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/Array/splice2.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/Objects/toString-001.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/String/charCodeAt.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/String/concat.js: Modified property allow-tabs.
+ * tests/mozilla/js1_2/String/match.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/String/slice.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/function/Function_object.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/function/Number.js: Modified property allow-tabs.
+ * tests/mozilla/js1_2/function/String.js: Modified property allow-tabs.
+ * tests/mozilla/js1_2/function/nesting.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/function/regexparg-1.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/function/regexparg-2-n.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/jsref.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/operator/equality.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/operator/strictEquality.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/RegExp_dollar_number.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/RegExp_input.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/RegExp_input_as_array.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/RegExp_lastIndex.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/RegExp_lastMatch.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/RegExp_lastMatch_as_array.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/RegExp_lastParen.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/RegExp_lastParen_as_array.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/RegExp_leftContext.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/RegExp_leftContext_as_array.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/RegExp_multiline.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/RegExp_multiline_as_array.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/RegExp_object.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/RegExp_rightContext.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/RegExp_rightContext_as_array.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/alphanumeric.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/asterisk.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/backslash.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/backspace.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/beginLine.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/character_class.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/compile.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/control_characters.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/digit.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/dot.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/endLine.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/everything.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/exec.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/flags.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/global.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/hexadecimal.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/ignoreCase.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/interval.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/octal.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/parentheses.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/plus.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/question_mark.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/simple_form.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/source.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/special_characters.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/string_replace.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/string_search.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/string_split.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/test.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/toString.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/vertical_bar.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/whitespace.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/regexp/word_boundary.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/shell.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/statements/break.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/statements/continue.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/statements/do_while.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/statements/switch.js: Added property allow-tabs.
+ * tests/mozilla/js1_2/statements/switch2.js: Added property allow-tabs.
+ * tests/mozilla/js1_3/shell.js: Added property allow-tabs.
+ * tests/mozilla/js1_4/shell.js: Added property allow-tabs.
+ * tests/mozilla/js1_5/Regress/regress-111557.js: Added property allow-tabs.
+ * tests/mozilla/js1_5/Regress/regress-216320.js: Added property allow-tabs.
+ * tests/mozilla/menuhead.html: Added property allow-tabs.
+ * tests/mozilla/mklistpage.pl: Added property allow-tabs.
+ * tests/mozilla/runtests.pl: Added property allow-tabs.
+
+2010-01-08 Daniel Bates <dbates@webkit.org>
+
+ Reviewed by Adam Barth.
+
+ https://bugs.webkit.org/show_bug.cgi?id=33417
+
+ Cleans up style errors exposed by the patch for bug #33198.
+ Moreover, fixes all "Weird number of spaces at line-start. Are you using a 4-space indent?"
+ errors reported by check-webkit-style.
+
+ No functionality was changed. So, no new tests.
+
+ * wtf/Platform.h:
+
+2010-01-08 Kent Hansen <kent.hansen@nokia.com>
+
+ Reviewed by Eric Seidel.
+
+ Don't store RegExp flags string representation
+ https://bugs.webkit.org/show_bug.cgi?id=33321
+
+ It's unused; the string representation is reconstructed from flags.
+
+ * runtime/RegExp.cpp:
+ (JSC::RegExp::RegExp):
+ * runtime/RegExp.h:
+
+2010-01-08 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Memory use grows grows possibly unbounded in this JavaScript Array test case
+ https://bugs.webkit.org/show_bug.cgi?id=31675
+
+ This fixes one observed bug in this test case, which is that
+ arrays don't report extra cost for the sparse value maps.
+
+ SunSpider reports a small speedup.
+
+ * runtime/JSArray.cpp:
+ (JSC::JSArray::putSlowCase): Report extra memory cost for
+ the sparse value map.
+ * runtime/JSArray.h:
+
+2010-01-08 Yong Li <yoli@rim.com>
+
+ Reviewed by Darin Adler.
+
+ Remove unnecessary #include from FastMalloc.cpp
+ https://bugs.webkit.org/show_bug.cgi?id=33393
+
+ * wtf/FastMalloc.cpp:
+
+2010-01-08 Eric Seidel <eric@webkit.org>
+
+ No review, rolling out r52983.
+ http://trac.webkit.org/changeset/52983
+ https://bugs.webkit.org/show_bug.cgi?id=33321
+
+ Broke 59 JavaScriptCore tests. I don't think Kent knew about
+ run-javascriptcore-tests. Sadly neither does the commit-bot,
+ yet.
+
+ * runtime/RegExp.cpp:
+ (JSC::RegExp::RegExp):
+ * runtime/RegExp.h:
+ (JSC::RegExp::flags):
+
+2010-01-08 Eric Seidel <eric@webkit.org>
+
+ No review, rolling out r52981.
+ http://trac.webkit.org/changeset/52981
+ https://bugs.webkit.org/show_bug.cgi?id=33319
+
+ Caused two JS tests to start failing:
+ ecma_2/RegExp/properties-001.js and js1_2/regexp/toString.js
+
+ * runtime/RegExpPrototype.cpp:
+ (JSC::regExpProtoFuncToString):
+
+2010-01-08 Kent Hansen <kent.hansen@nokia.com>
+
+ Reviewed by Darin Adler.
+
+ Don't store RegExp flags string representation
+ https://bugs.webkit.org/show_bug.cgi?id=33321
+
+ It's unused; the string representation is reconstructed from flags.
+
+ * runtime/RegExp.cpp:
+ (JSC::RegExp::RegExp):
+ * runtime/RegExp.h:
+
+2010-01-08 Kent Hansen <kent.hansen@nokia.com>
+
+ Reviewed by Darin Adler.
+
+ RegExp.prototype.toString returns "//" for empty regular expressions
+ https://bugs.webkit.org/show_bug.cgi?id=33319
+
+ "//" starts a single-line comment, hence "/(?:)/" should be used, according to ECMA.
+
+ * runtime/RegExpPrototype.cpp:
+ (JSC::regExpProtoFuncToString):
+
+2010-01-08 Norbert Leser <norbert.leser@nokia.com>
+
+ Reviewed by Darin Adler.
+
+ RVCT compiler with "-Otime -O3" optimization tries to optimize out
+ inline new'ed pointers that are passed as arguments.
+ Proposed patch assigns new'ed pointer explicitly outside function call.
+
+ https://bugs.webkit.org/show_bug.cgi?id=33084
+
+ * API/JSClassRef.cpp:
+ (OpaqueJSClass::OpaqueJSClass):
+ (OpaqueJSClassContextData::OpaqueJSClassContextData):
+
+2010-01-08 Gabor Loki <loki@webkit.org>
+
+ Reviewed by Gavin Barraclough.
+
+ Remove an unnecessary cacheFlush from ARM_TRADITIONAL JIT
+ https://bugs.webkit.org/show_bug.cgi?id=33203
+
+ * assembler/ARMAssembler.cpp: Remove obsolete linkBranch function.
+ (JSC::ARMAssembler::executableCopy): Inline a clean linkBranch code.
+ * assembler/ARMAssembler.h:
+ (JSC::ARMAssembler::getLdrImmAddress): Use inline function.
+ (JSC::ARMAssembler::getLdrImmAddressOnPool): Ditto.
+ (JSC::ARMAssembler::patchPointerInternal): Remove an unnecessary cacheFlush.
+ (JSC::ARMAssembler::linkJump): Use patchPointerInternal instead of linkBranch.
+ (JSC::ARMAssembler::linkCall): Ditto.
+ (JSC::ARMAssembler::relinkCall): Ditto.
+
+2010-01-07 Gabor Loki <loki@webkit.org>
+
+ Reviewed by Gavin Barraclough.
+
+ Build fix for JSVALUE32 when ENABLE_JIT_OPTIMIZE* are disabled
+ https://bugs.webkit.org/show_bug.cgi?id=33311
+
+ Move compileGetDirectOffset function to common part of JSVALUE32
+
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::compileGetDirectOffset):
+
+2010-01-07 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Allow call sites to determine if ASSERT_* and LOG_* macros are operational
+ https://bugs.webkit.org/show_bug.cgi?id=33020
+
+ * wtf/Assertions.h: Set ASSERT_MSG_DISABLED, FATAL_DISABLED,
+ ERROR_DISABLED, LOG_DISABLED to 1 if the compiler does not support
+ variadic macros. Refactor for better readibility.
+
+2010-01-07 Daniel Bates <dbates@rim.com>
+
+ Reviewed by Eric Seidel.
+
+ https://bugs.webkit.org/show_bug.cgi?id=32987
+
+ Added ENABLE_XHTMLMP flag. Disabled by default.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2010-01-07 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Gavin Barraclough.
+
+ [Symbian] Port ARM traditional JIT Trampolines to RVCT
+ https://bugs.webkit.org/show_bug.cgi?id=30552
+
+ Take the GCC implementation and mechanically convert
+ it to RVCT syntax.
+
+ Use 'bx rX' instead of 'mov pc, rX' when it is available.
+
+ Developed in cooperation with Iain Campbell and Gabor Loki.
+
+ * JavaScriptCore.pri: Extra step to generate RVCT stubs. The
+ script generation intentionally executed all the time not just
+ for RVCT targets.
+
+ * create_rvct_stubs: Added. Perl script to expand precompiler macros
+ for RVCT assembler - the template is defined in JITStubs.cpp.
+
+ * jit/JITStubs.cpp:
+ (JSC::ctiTrampoline):
+ (JSC::ctiVMThrowTrampoline):
+ (JSC::ctiOpThrowNotCaught):
+
+2010-01-07 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Fix a crash seen on the buildbots.
+
+ * runtime/JSGlobalObject.cpp:
+ (JSC::JSGlobalObject::init): Disable specific function tracking here,
+ instead of in WebCore, to ensure that the disabling happens before a
+ specific function can be registered.
+
+2010-01-07 Alexey Proskuryakov <ap@apple.com>
+
+ Mac build fix.
+
+ * JavaScriptCore.exp: Export new JSGlobalData static data members.
+
+2010-01-07 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Geoffrey Garen.
+
+ https://bugs.webkit.org/show_bug.cgi?id=33057
+ REGRESSION(r49365): typeof(xhr.responseText) != "string" in Windows
+
+ <rdar://problem/7296920> REGRESSION: WebKit fails to start PeaceKeeper benchmark
+
+ Test: fast/js/webcore-string-comparison.html
+
+ In r49365, some code was moved from JSString.cpp to JSString.h, and as a result, WebCore
+ got a way to directly instantiate JSStrings over DLL borders. Since vftable for JSString was
+ not exported, objects created from WebCore got a different vptr, and JavaScriptCore
+ optimizations that relied on vptr of all JSString objects being equal failed.
+
+ * config.h: Added a JS_EXPORTCLASS macro for exporting classes. It's currently the same as
+ JS_EXPORTDATA, but it clearly needed a new name.
+
+ * runtime/InitializeThreading.cpp:
+ (JSC::initializeThreadingOnce):
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::storeVPtrs):
+ (JSC::JSGlobalData::JSGlobalData):
+ (JSC::JSGlobalData::createNonDefault):
+ (JSC::JSGlobalData::create):
+ (JSC::JSGlobalData::sharedInstance):
+ * runtime/JSGlobalData.h:
+ Store vptrs just once, no need to repeatedly pick and copy them. This makes it possible to
+ assert vptr correctness in object destructors (which don't have access to JSGlobalData,
+ and even Heap::heap(this) will fail for fake objects created from storeVPtrs()).
+
+ * runtime/JSArray.cpp: (JSC::JSArray::~JSArray): Assert that vptr is what we expect it to be.
+ It's important to assert in destructor, because MSVC changes the vptr after constructor
+ is invoked.
+ * runtime/JSByteArray.cpp: (JSC::JSByteArray::~JSByteArray): Ditto.
+ * runtime/JSByteArray.h: Ditto.
+ * runtime/JSFunction.h: Ditto.
+ * runtime/JSFunction.cpp: (JSC::JSFunction::~JSFunction): Ditto.
+
+ * runtime/JSCell.h: (JSC::JSCell::setVPtr): Added a method to substitute vptr for another
+ one.
+
+ * runtime/JSString.h: Export JSString class together with its vftable, and tell other
+ libraries tp import it. This is needed on platforms that have a separate JavaScriptCore
+ dynamic library - and on Mac, we already did the export via JavaScriptCore.exp.
+ (JSC::JSString::~JSString): Assert tha vptr is what we expect it to be.
+ (JSC::fixupVPtr): Store a previously saved primary vftable pointer (do nothing if building
+ JavaScriptCore itself).
+ (JSC::jsSingleCharacterString): Call fixupVPtr in case this is call across DLL boundary.
+ (JSC::jsSingleCharacterSubstring): Ditto.
+ (JSC::jsNontrivialString): Ditto.
+ (JSC::jsString): Ditto.
+ (JSC::jsSubstring): Ditto.
+ (JSC::jsOwnedString): Ditto.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Export the new static
+ JSGlobalData members that are used in WebCore via inline functions.
+
+2010-01-07 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Safari memory usage skyrockets using new Google AdWords interface
+ https://bugs.webkit.org/show_bug.cgi?id=33343
+
+ The memory use was caused by the global object creating too many structures
+ as it thrashed between different specific functions.
+
+ * runtime/Structure.cpp:
+ (JSC::Structure::Structure):
+ (JSC::Structure::addPropertyTransition):
+ (JSC::Structure::changePrototypeTransition):
+ (JSC::Structure::despecifyFunctionTransition):
+ (JSC::Structure::addAnonymousSlotsTransition):
+ (JSC::Structure::getterSetterTransition):
+ (JSC::Structure::toDictionaryTransition):
+ (JSC::Structure::addPropertyWithoutTransition):
+ (JSC::Structure::despecifyAllFunctions):
+ * runtime/Structure.h:
+ (JSC::Structure::disableSpecificFunctionTracking): Track a thrash count
+ for specific functions. Disable specific function tracking once the
+ thrash count has been hit.
+
+2010-01-07 Csaba Osztrogonác <ossy@webkit.org>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Enable JIT in debug mode on win32 after r51141 fixed the crashes.
+
+ * JavaScriptCore.pri:
+
+2010-01-07 Zoltan Horvath <zoltan@webkit.org>
+
+ Reviewed by Holger Freyther.
+
+ [Mac] Build fix when FAST_MALLOC_MATCH_VALIDATION=1
+ https://bugs.webkit.org/show_bug.cgi?id=33312
+
+ Using of operator += cause compile error on Mac, so it is changed to
+ "= static_cast<AllocAlignmentInteger*>(old_ptr) + 1".
+
+ * wtf/FastMalloc.cpp:
+ (WTF::TCMallocStats::realloc):
+
+2010-01-07 Zoltan Horvath <zoltan@webkit.org>
+
+ Reviewed by Holger Freyther.
+
+ [Qt] Build fix when FAST_MALLOC_MATCH_VALIDATION=1
+ https://bugs.webkit.org/show_bug.cgi?id=33312
+
+ Remove pByte (committed in r42344 from #20422), because pByte doesn't
+ exist and it is unnecessary.
+
+ * wtf/FastMalloc.cpp:
+ (WTF::TCMallocStats::realloc):
+
+2010-01-06 Gavin Barraclough <barraclough@apple.com>
+
+ QT build fix.
+
+ * runtime/Identifier.cpp:
+ (JSC::createIdentifierTableSpecific):
+
+2010-01-06 Gavin Barraclough <barraclough@apple.com>
+
+ Windows build fix part I.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2010-01-06 Dan Bernstein <mitz@apple.com>
+
+ Build fix
+
+ * runtime/Identifier.cpp:
+ (JSC::createIdentifierTableSpecificCallback):
+
+2010-01-05 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ https://bugs.webkit.org/show_bug.cgi?id=33236
+ Remove m_identifierTable pointer from UString
+
+ Currently every string holds a pointer so that during destruction,
+ if a string has been used as an identifier, it can remove itself
+ from the table. By instead accessing the identifierTable via a
+ thread specific tracking the table associated with the current
+ globaldata, we can save the memory cost of this pointer.
+
+ * API/APIShims.h:
+ (JSC::APIEntryShimWithoutLock::APIEntryShimWithoutLock):
+ (JSC::APIEntryShimWithoutLock::~APIEntryShimWithoutLock):
+ (JSC::APICallbackShim::APICallbackShim):
+ (JSC::APICallbackShim::~APICallbackShim):
+
+ - change the API shims to track the identifierTable of the current JSGlobalData.
+
+ * API/JSContextRef.cpp:
+ (JSContextGroupCreate):
+
+ - update creation of JSGlobalData for API usage to use new create method.
+ - fix shim instanciation bug in JSGlobalContextCreateInGroup.
+
+ * JavaScriptCore.exp:
+ * runtime/Completion.cpp:
+ (JSC::checkSyntax):
+ (JSC::evaluate):
+
+ - add asserts to check the identifierTable is being tracked correctly.
+
+ * runtime/Identifier.cpp:
+ (JSC::IdentifierTable::~IdentifierTable):
+ (JSC::IdentifierTable::add):
+ (JSC::Identifier::remove):
+ (JSC::Identifier::checkSameIdentifierTable):
+ (JSC::createIdentifierTableSpecificCallback):
+ (JSC::createIdentifierTableSpecific):
+ (JSC::createDefaultDataSpecific):
+
+ - Use currentIdentifierTable() instead of UStringImpl::m_identifierTable.
+ - Define methods to access the thread specific identifier tables.
+
+ * runtime/Identifier.h:
+ (JSC::ThreadIdentifierTableData::ThreadIdentifierTableData):
+ (JSC::defaultIdentifierTable):
+ (JSC::setDefaultIdentifierTable):
+ (JSC::currentIdentifierTable):
+ (JSC::setCurrentIdentifierTable):
+ (JSC::resetCurrentIdentifierTable):
+
+ - Declare methods to access the thread specific identifier tables.
+
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::createNonDefault):
+ (JSC::JSGlobalData::create):
+ (JSC::JSGlobalData::sharedInstance):
+
+ - creation of JSGlobalData objects, other than for API usage, associate themselves with the current thread.
+
+ * runtime/JSGlobalData.h:
+ * runtime/UStringImpl.cpp:
+ (JSC::UStringImpl::destroy):
+
+ - destroy() method should be using isIdentifier().
+
+ * runtime/UStringImpl.h:
+ (JSC::UStringImpl::isIdentifier):
+ (JSC::UStringImpl::setIsIdentifier):
+ (JSC::UStringImpl::checkConsistency):
+ (JSC::UStringImpl::UStringImpl):
+
+ - replace m_identifierTable with a single m_isIdentifier bit.
+
+ * wtf/StringHashFunctions.h:
+ (WTF::stringHash):
+
+ - change string hash result from 32-bit to 31-bit, to free a bit in UStringImpl for m_isIdentifier.
+
+2009-12-25 Patrick Gansterer <paroga@paroga.com>
+
+ Reviewed by Eric Seidel.
+
+ Buildfix for WinCE + style fixes.
+ https://bugs.webkit.org/show_bug.cgi?id=32939
+
+ * jsc.cpp:
+ (functionPrint):
+ (functionQuit):
+ (parseArguments):
+ (fillBufferWithContentsOfFile):
+
+2010-01-05 Patrick Gansterer <paroga@paroga.com>
+
+ Reviewed by Eric Seidel.
+
+ WinCE buildfix after r52791 (renamed PLATFORM(WINCE) to OS(WINCE)).
+ https://bugs.webkit.org/show_bug.cgi?id=33205
+
+ * jit/ExecutableAllocator.h:
+
+2010-01-05 Patrick Gansterer <paroga@paroga.com>
+
+ Reviewed by Darin Adler.
+
+ Added compiler error for unsupported platforms.
+ https://bugs.webkit.org/show_bug.cgi?id=33112
+
+ * jit/JITStubs.cpp:
+
+2010-01-05 Gabor Loki <loki@webkit.org>
+
+ Reviewed by Maciej Stachowiak.
+
+ Follow r52729 in ARMAssembler.
+ https://bugs.webkit.org/show_bug.cgi?id=33208
+
+ Use WTF_ARM_ARCH_AT_LEAST instead of ARM_ARCH_VERSION
+
+ * assembler/ARMAssembler.cpp:
+ (JSC::ARMAssembler::encodeComplexImm): Move tmp declaration to ARMv7
+ * assembler/ARMAssembler.h:
+ (JSC::ARMAssembler::):
+ (JSC::ARMAssembler::bkpt):
+
+2010-01-05 Maciej Stachowiak <mjs@apple.com>
+
+ Unreviewed build fix for Gtk+
+
+ Don't use // comments in Platform.h, at least some of them seem to make the version of GCC
+ used on the Gtk buildbot unhappy.
+
+ * wtf/Platform.h:
+
+2010-01-04 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Darin Fisher.
+
+ Reorganize, document and rename OS() platform macros.
+ https://bugs.webkit.org/show_bug.cgi?id=33198
+
+ * wtf/Platform.h: Rename, reorganize and document OS() macros.
+
+ Adapt to name changes. Also fixed a few incorrect OS checks.
+
+ * API/JSContextRef.cpp:
+ * assembler/MacroAssemblerARM.cpp:
+ (JSC::isVFPPresent):
+ * assembler/MacroAssemblerX86Common.h:
+ * bytecode/SamplingTool.cpp:
+ * config.h:
+ * interpreter/RegisterFile.cpp:
+ (JSC::RegisterFile::~RegisterFile):
+ * interpreter/RegisterFile.h:
+ (JSC::RegisterFile::RegisterFile):
+ (JSC::RegisterFile::grow):
+ * jit/ExecutableAllocator.h:
+ * jit/ExecutableAllocatorFixedVMPool.cpp:
+ * jit/ExecutableAllocatorPosix.cpp:
+ * jit/ExecutableAllocatorSymbian.cpp:
+ * jit/ExecutableAllocatorWin.cpp:
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::privateCompileCTIMachineTrampolines):
+ * jit/JITStubs.cpp:
+ * jsc.cpp:
+ (main):
+ * parser/Grammar.y:
+ * profiler/ProfileNode.cpp:
+ (JSC::getCount):
+ * runtime/Collector.cpp:
+ (JSC::Heap::Heap):
+ (JSC::Heap::allocateBlock):
+ (JSC::Heap::freeBlockPtr):
+ (JSC::currentThreadStackBase):
+ (JSC::getCurrentPlatformThread):
+ (JSC::suspendThread):
+ (JSC::resumeThread):
+ (JSC::getPlatformThreadRegisters):
+ (JSC::otherThreadStackPointer):
+ * runtime/Collector.h:
+ * runtime/DateConstructor.cpp:
+ * runtime/DatePrototype.cpp:
+ (JSC::formatLocaleDate):
+ * runtime/InitializeThreading.cpp:
+ (JSC::initializeThreading):
+ * runtime/MarkStack.h:
+ (JSC::MarkStack::MarkStackArray::shrinkAllocation):
+ * runtime/MarkStackPosix.cpp:
+ * runtime/MarkStackSymbian.cpp:
+ * runtime/MarkStackWin.cpp:
+ * runtime/StringPrototype.cpp:
+ (JSC::stringProtoFuncLastIndexOf):
+ * runtime/TimeoutChecker.cpp:
+ (JSC::getCPUTime):
+ * runtime/UString.cpp:
+ (JSC::UString::from):
+ * wtf/Assertions.cpp:
+ * wtf/Assertions.h:
+ * wtf/CurrentTime.cpp:
+ (WTF::lowResUTCTime):
+ * wtf/CurrentTime.h:
+ (WTF::getLocalTime):
+ * wtf/DateMath.cpp:
+ * wtf/FastMalloc.cpp:
+ (WTF::TCMalloc_ThreadCache::InitModule):
+ (WTF::TCMallocStats::):
+ * wtf/FastMalloc.h:
+ * wtf/MathExtras.h:
+ * wtf/RandomNumber.cpp:
+ (WTF::randomNumber):
+ * wtf/RandomNumberSeed.h:
+ (WTF::initializeRandomNumberGenerator):
+ * wtf/StringExtras.h:
+ * wtf/TCSpinLock.h:
+ (TCMalloc_SpinLock::Unlock):
+ (TCMalloc_SlowLock):
+ * wtf/TCSystemAlloc.cpp:
+ * wtf/ThreadSpecific.h:
+ (WTF::::destroy):
+ * wtf/Threading.h:
+ * wtf/ThreadingPthreads.cpp:
+ (WTF::initializeThreading):
+ (WTF::isMainThread):
+ * wtf/ThreadingWin.cpp:
+ (WTF::wtfThreadEntryPoint):
+ (WTF::createThreadInternal):
+ * wtf/VMTags.h:
+ * wtf/unicode/icu/CollatorICU.cpp:
+ (WTF::Collator::userDefault):
+ * wtf/win/MainThreadWin.cpp:
+ (WTF::initializeMainThreadPlatform):
+
+2010-01-04 Gustavo Noronha Silva <gns@gnome.org>
+
+ Add missing files to the build system - make distcheck build fix.
+
+ * GNUmakefile.am:
+
+2010-01-04 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Sam Weinig, additional coding by Mark Rowe.
+
+ https://bugs.webkit.org/show_bug.cgi?id=33163
+ Add string hashing functions to WTF.
+ Use WTF's string hashing functions from UStringImpl.
+
+ * GNUmakefile.am:
+ * JavaScriptCore.exp:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * runtime/UStringImpl.cpp:
+ * runtime/UStringImpl.h:
+ (JSC::UStringImpl::computeHash):
+ * wtf/HashFunctions.h:
+ * wtf/StringHashFunctions.h: Added.
+ (WTF::stringHash):
+
+2010-01-04 Dmitry Titov <dimich@chromium.org>
+
+ Not reviewed, attempt to fix ARM bulid.
+
+ * wtf/Platform.h:
+
+2010-01-04 Gavin Barraclough <barraclough@apple.com>
+
+ Rubber stamped by Geoff Garen.
+
+ Add an 'isIdentifier' to UStringImpl, use this where appropriate
+ (where previously 'identifierTable' was being tested).
+
+ * API/JSClassRef.cpp:
+ (OpaqueJSClass::~OpaqueJSClass):
+ (OpaqueJSClassContextData::OpaqueJSClassContextData):
+ * runtime/Identifier.cpp:
+ (JSC::Identifier::addSlowCase):
+ * runtime/Identifier.h:
+ (JSC::Identifier::add):
+ * runtime/PropertyNameArray.cpp:
+ (JSC::PropertyNameArray::add):
+ * runtime/UStringImpl.h:
+ (JSC::UStringImpl::isIdentifier):
+
+2010-01-04 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Sam "Shimmey Shimmey" Weinig.
+
+ https://bugs.webkit.org/show_bug.cgi?id=33158
+ Refactor JSC API entry/exit to use RAII instead of copy/pasting code.
+ Make it easier to change set of actions taken when passing across the API boundary.
+
+ * API/APIShims.h: Added.
+ (JSC::APIEntryShimWithoutLock::APIEntryShimWithoutLock):
+ (JSC::APIEntryShimWithoutLock::~APIEntryShimWithoutLock):
+ (JSC::APIEntryShim::APIEntryShim):
+ (JSC::APICallbackShim::APICallbackShim):
+ (JSC::APICallbackShim::~APICallbackShim):
+ * API/JSBase.cpp:
+ (JSEvaluateScript):
+ (JSCheckScriptSyntax):
+ (JSGarbageCollect):
+ (JSReportExtraMemoryCost):
+ * API/JSCallbackConstructor.cpp:
+ (JSC::constructJSCallback):
+ * API/JSCallbackFunction.cpp:
+ (JSC::JSCallbackFunction::call):
+ * API/JSCallbackObjectFunctions.h:
+ (JSC::::init):
+ (JSC::::getOwnPropertySlot):
+ (JSC::::put):
+ (JSC::::deleteProperty):
+ (JSC::::construct):
+ (JSC::::hasInstance):
+ (JSC::::call):
+ (JSC::::getOwnPropertyNames):
+ (JSC::::toNumber):
+ (JSC::::toString):
+ (JSC::::staticValueGetter):
+ (JSC::::callbackGetter):
+ * API/JSContextRef.cpp:
+ * API/JSObjectRef.cpp:
+ (JSObjectMake):
+ (JSObjectMakeFunctionWithCallback):
+ (JSObjectMakeConstructor):
+ (JSObjectMakeFunction):
+ (JSObjectMakeArray):
+ (JSObjectMakeDate):
+ (JSObjectMakeError):
+ (JSObjectMakeRegExp):
+ (JSObjectGetPrototype):
+ (JSObjectSetPrototype):
+ (JSObjectHasProperty):
+ (JSObjectGetProperty):
+ (JSObjectSetProperty):
+ (JSObjectGetPropertyAtIndex):
+ (JSObjectSetPropertyAtIndex):
+ (JSObjectDeleteProperty):
+ (JSObjectCallAsFunction):
+ (JSObjectCallAsConstructor):
+ (JSObjectCopyPropertyNames):
+ (JSPropertyNameArrayRelease):
+ (JSPropertyNameAccumulatorAddName):
+ * API/JSValueRef.cpp:
+ (JSValueGetType):
+ (JSValueIsUndefined):
+ (JSValueIsNull):
+ (JSValueIsBoolean):
+ (JSValueIsNumber):
+ (JSValueIsString):
+ (JSValueIsObject):
+ (JSValueIsObjectOfClass):
+ (JSValueIsEqual):
+ (JSValueIsStrictEqual):
+ (JSValueIsInstanceOfConstructor):
+ (JSValueMakeUndefined):
+ (JSValueMakeNull):
+ (JSValueMakeBoolean):
+ (JSValueMakeNumber):
+ (JSValueMakeString):
+ (JSValueToBoolean):
+ (JSValueToNumber):
+ (JSValueToStringCopy):
+ (JSValueToObject):
+ (JSValueProtect):
+ (JSValueUnprotect):
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2010-01-04 Dan Bernstein <mitz@apple.com>
+
+ Reviewed by Ada Chan and Mark Rowe.
+
+ Updated copyright string
+
+ * Info.plist:
+ * JavaScriptCore.vcproj/JavaScriptCore.resources/Info.plist:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.rc:
+
+2010-01-04 Adam Roben <aroben@apple.com>
+
+ No review, rolling out r52741.
+ http://trac.webkit.org/changeset/52741
+ https://bugs.webkit.org/show_bug.cgi?id=33056
+
+ * wtf/AlwaysInline.h:
+
+2010-01-04 Patrick Gansterer <paroga@paroga.com>
+
+ Reviewed by Darin Adler.
+
+ Add cacheFlush support for WinCE
+ https://bugs.webkit.org/show_bug.cgi?id=33110
+
+ * jit/ExecutableAllocator.h:
+ (JSC::ExecutableAllocator::cacheFlush):
+
+2010-01-04 Patrick Gansterer <paroga@paroga.com>
+
+ Reviewed by Adam Roben.
+
+ Implement NO_RETURN for COMPILER(MSVC).
+ https://bugs.webkit.org/show_bug.cgi?id=33056
+
+ * wtf/AlwaysInline.h:
+
+2010-01-04 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Simon Hausmann.
+
+ Fix some PLATFORM(*_ENDIAN) uses to CPU()
+ https://bugs.webkit.org/show_bug.cgi?id=33148
+
+ * runtime/JSCell.cpp:
+ (JSC::):
+ * runtime/JSValue.h:
+ (JSC::JSValue::):
+
+2010-01-04 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Adam Barth.
+
+ Document CPU() macros in comments.
+ https://bugs.webkit.org/show_bug.cgi?id=33147
+
+ * wtf/Platform.h:
+
+2010-01-04 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Adam Barth.
+
+ Reorganize, document and rename CPU() platform macros.
+ https://bugs.webkit.org/show_bug.cgi?id=33145
+ ExecutableAllocatorSymbian appears to have buggy ARM version check
+ https://bugs.webkit.org/show_bug.cgi?id=33138
+
+ * wtf/Platform.h:
+ Rename all macros related to detection of particular CPUs or
+ classes of CPUs to CPU(), reorganize and document them.
+
+ All remaining changes are adapting to the renames, plus fixing the
+ second bug cited above.
+
+ * assembler/ARMAssembler.cpp:
+ * assembler/ARMAssembler.h:
+ * assembler/ARMv7Assembler.h:
+ * assembler/AbstractMacroAssembler.h:
+ (JSC::AbstractMacroAssembler::Imm32::Imm32):
+ * assembler/MacroAssembler.h:
+ * assembler/MacroAssemblerARM.cpp:
+ * assembler/MacroAssemblerARM.h:
+ * assembler/MacroAssemblerCodeRef.h:
+ (JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr):
+ * assembler/MacroAssemblerX86.h:
+ * assembler/MacroAssemblerX86Common.h:
+ * assembler/MacroAssemblerX86_64.h:
+ * assembler/X86Assembler.h:
+ (JSC::X86Registers::):
+ (JSC::X86Assembler::):
+ (JSC::X86Assembler::movl_mEAX):
+ (JSC::X86Assembler::movl_EAXm):
+ (JSC::X86Assembler::repatchLoadPtrToLEA):
+ (JSC::X86Assembler::X86InstructionFormatter::memoryModRM):
+ * jit/ExecutableAllocator.h:
+ * jit/ExecutableAllocatorFixedVMPool.cpp:
+ * jit/ExecutableAllocatorPosix.cpp:
+ * jit/ExecutableAllocatorSymbian.cpp:
+ (JSC::ExecutableAllocator::intializePageSize):
+ * jit/JIT.cpp:
+ * jit/JIT.h:
+ * jit/JITArithmetic.cpp:
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::beginUninterruptedSequence):
+ (JSC::JIT::restoreArgumentReferenceForTrampoline):
+ (JSC::JIT::emitCount):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::privateCompileCTIMachineTrampolines):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::privateCompileGetByIdProto):
+ (JSC::JIT::privateCompileGetByIdProtoList):
+ (JSC::JIT::privateCompileGetByIdChainList):
+ (JSC::JIT::privateCompileGetByIdChain):
+ * jit/JITStubs.cpp:
+ (JSC::JITThunks::JITThunks):
+ * jit/JITStubs.h:
+ * runtime/Collector.cpp:
+ (JSC::currentThreadStackBase):
+ (JSC::getPlatformThreadRegisters):
+ (JSC::otherThreadStackPointer):
+ * wrec/WREC.h:
+ * wrec/WRECGenerator.cpp:
+ (JSC::WREC::Generator::generateEnter):
+ (JSC::WREC::Generator::generateReturnSuccess):
+ (JSC::WREC::Generator::generateReturnFailure):
+ * wrec/WRECGenerator.h:
+ * wtf/FastMalloc.cpp:
+ * wtf/TCSpinLock.h:
+ (TCMalloc_SpinLock::Lock):
+ (TCMalloc_SpinLock::Unlock):
+ (TCMalloc_SlowLock):
+ * wtf/Threading.h:
+ * wtf/dtoa.cpp:
+ * yarr/RegexJIT.cpp:
+ (JSC::Yarr::RegexGenerator::generateEnter):
+ (JSC::Yarr::RegexGenerator::generateReturn):
+ * yarr/RegexJIT.h:
+
+2010-01-04 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Adam Barth.
+
+ Clean up COMPILER macros and remove unused ones.
+ https://bugs.webkit.org/show_bug.cgi?id=33132
+
+ Removed values are COMPILER(BORLAND) and COMPILER(CYGWIN) - they were
+ not used anywhere.
+
+ * wtf/Platform.h:
+
+2010-01-03 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Eric Seidel.
+
+ Update wtf/Platform.h to document the new system for porting macros.
+ https://bugs.webkit.org/show_bug.cgi?id=33130
+
+ * wtf/Platform.h:
+
+2009-12-29 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ PLATFORM(CAIRO) should be defined by WIN_CAIRO define
+ https://bugs.webkit.org/show_bug.cgi?id=22250
+
+ * wtf/Platform.h: Define WTF_PLATFORM_CAIRO for GTK port only
+ For the WinCairo port WTF_PLATFORM_CAIRO is already defined in config.h
+
+2009-12-28 Shu Chang <Chang.Shu@nokia.com>
+
+ Reviewed by Laszlo Gombos.
+
+ [Qt] Delete ThreadPrivate instance after it is finished.
+ https://bugs.webkit.org/show_bug.cgi?id=32614
+
+ * wtf/qt/ThreadingQt.cpp:
+ (WTF::ThreadMonitor::instance):
+ (WTF::ThreadMonitor::threadFinished):
+ (WTF::createThreadInternal):
+ (WTF::detachThread):
+
+2009-12-28 Patrick Gansterer <paroga@paroga.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Cleanup of #define JS_EXPORT.
+
+ * API/JSBase.h:
+
+2009-12-27 Patrick Gansterer <paroga@paroga.com>
+
+ Reviewed by Adam Barth.
+
+ WinCE buildfix (HWND_MESSAGE isn't supported there)
+
+ * wtf/win/MainThreadWin.cpp:
+ (WTF::initializeMainThreadPlatform):
+
+2009-12-27 Patrick Gansterer <paroga@paroga.com>
+
+ Reviewed by Adam Barth.
+
+ Added a file with WinMain function to link agains in WinCE.
+
+ * os-win32/WinMain.cpp: Added.
+ (convertToUtf8):
+ (WinMain):
+
+2009-12-24 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Unreviewed; revert of r52550.
+
+ The change regressed the following LayoutTests for QtWebKit.
+
+ fast/workers/worker-call.html -> crashed
+ fast/workers/worker-close.html -> crashed
+
+ * wtf/qt/ThreadingQt.cpp:
+ (WTF::waitForThreadCompletion):
+ (WTF::detachThread):
+
+2009-12-24 Shu Chang <Chang.Shu@nokia.com>
+
+ Reviewed by Laszlo Gombos.
+
+ [Qt] Fix memory leak by deleting instance of ThreadPrivate
+ in function waitForThreadCompletion(), synchronously, or in
+ detachThread(), asynchronously.
+ https://bugs.webkit.org/show_bug.cgi?id=32614
+
+ * wtf/qt/ThreadingQt.cpp:
+ (WTF::waitForThreadCompletion):
+ (WTF::detachThread):
+
+2009-12-23 Kwang Yul Seo <skyul@company100.net>
+
+ Reviewed by Laszlo Gombos.
+
+ Include stddef.h for ptrdiff_t
+ https://bugs.webkit.org/show_bug.cgi?id=32891
+
+ ptrdiff_t is typedef-ed in stddef.h.
+ Include stddef.h in jit/ExecutableAllocator.h.
+
+ * jit/ExecutableAllocator.h:
+
+2009-12-23 Patrick Gansterer <paroga@paroga.com>
+
+ Reviewed by Eric Seidel.
+
+ Buildfix after r47092.
+
+ * wtf/wince/MemoryManager.cpp:
+ (WTF::tryFastMalloc):
+ (WTF::tryFastZeroedMalloc):
+ (WTF::tryFastCalloc):
+ (WTF::tryFastRealloc):
+
+2009-12-23 Kent Tamura <tkent@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ HTMLInputElement::valueAsDate getter support.
+ https://bugs.webkit.org/show_bug.cgi?id=32876
+
+ Expose dateToDaysFrom1970().
+
+ * JavaScriptCore.exp:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * wtf/DateMath.cpp:
+ (WTF::dateToDaysFrom1970):
+ * wtf/DateMath.h:
+
+2009-12-22 Darin Adler <darin@apple.com>
+
+ Reviewed by Mark Rowe.
+
+ Turn off datagrid by default, at least for all platforms Apple ships.
+ The datagrid implementation isn't ready for general web use yet.
+
+ * Configurations/FeatureDefines.xcconfig: Turn off datagrid by default.
+
+2009-12-22 Steve Block <steveblock@google.com>
+
+ Reviewed by David Levin.
+
+ Updates Android's scheduleDispatchFunctionsOnMainThread() to use new
+ AndroidThreading class, rather than using JavaSharedClient directly.
+ This fixes the current layering violation.
+ https://bugs.webkit.org/show_bug.cgi?id=32651
+
+ The pattern is copied from Chromium, which uses the ChromiumThreading
+ class. This patch also fixes the style in ChromiumThreading.h.
+
+ * wtf/android/AndroidThreading.h: Added. Declares AndroidThreading.
+ * wtf/android/MainThreadAndroid.cpp: Modified
+ (WTF::scheduleDispatchFunctionsOnMainThread): Uses AndroidThreading.
+ * wtf/chromium/ChromiumThreading.h: Modified. Fixes style.
+
+2009-12-22 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Fix a couple of problems with UntypedPtrAndBitfield.
+
+ Add a m_leaksPtr to reduce false positives from leaks in debug builds
+ (this isn't perfect because we'd like a solution for release builds,
+ but this is now at least as good as a PtrAndFlags would be).
+
+ Switch SmallStringsto use a regular string for the base, rather than
+ a static one. UntypedPtrAndBitfield assumes all strings are at least
+ 8 byte aligned; this migt not be true of static strings. Shared buffers
+ are heap allocated, as are all UStringImpls other than static strings.
+ Static strings cannot end up being the owner string of substrings,
+ since the only static strings are length 0.
+
+ * runtime/SmallStrings.cpp:
+ (JSC::SmallStringsStorage::SmallStringsStorage):
+ * runtime/UStringImpl.h:
+ (JSC::UntypedPtrAndBitfield::UntypedPtrAndBitfield):
+ (JSC::UStringImpl::UStringImpl):
+
+2009-12-22 Kwang Yul Seo <skyul@company100.net>
+
+ Reviewed by Darin Adler.
+
+ RVCT (__ARMCC_VERSION < 400000) does not provide strcasecmp and strncasecmp
+ https://bugs.webkit.org/show_bug.cgi?id=32857
+
+ Add implementation of strcasecmp and strncasecmp for RVCT < 4.0
+ because earlier versions of RVCT 4.0 does not provide these functions.
+
+ * wtf/StringExtras.cpp: Added.
+ (strcasecmp):
+ (strncasecmp):
+ * wtf/StringExtras.h:
+
+2009-12-22 Kwang Yul Seo <skyul@company100.net>
+
+ Reviewed by Darin Adler.
+
+ Define ALWAYS_INLINE and WTF_PRIVATE_INLINE to __forceinline for RVCT
+ https://bugs.webkit.org/show_bug.cgi?id=32853
+
+ Use __forceinline forces RVCT to compile a C or C++ function
+ inline. The compiler attempts to inline the function, regardless of
+ the characteristics of the function.
+
+ * wtf/AlwaysInline.h:
+ * wtf/FastMalloc.h:
+
+2009-12-21 Simon Hausmann <simon.hausmann@nokia.com>
+
+ Prospective GTK build fix: Add UStringImpl.cpp/h to the build.
+
+ * GNUmakefile.am:
+
+2009-12-21 Simon Hausmann <simon.hausmann@nokia.com>
+
+ Fix the Qt build, add UStringImpl.cpp to the build.
+
+ * JavaScriptCore.pri:
+
+2009-12-21 Gavin Barraclough <barraclough@apple.com>
+
+ Windows Build fix part 5.
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+
+2009-12-21 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (build fix).
+ Fix breakage of world introduced in build fix to r52463.
+
+ * runtime/UStringImpl.h:
+
+2009-12-21 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=32831
+ Replace UString::Rep implementation, following introduction of ropes to JSC.
+
+ * Remove redundant overcapacity mechanisms.
+ * Reduce memory cost of Rep's.
+ * Add an inline storage mechanism akin to that in WebCore's StringImpl.
+
+ ~1% Sunspider progression.
+
+ * JavaScriptCore.exp:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * runtime/JSString.cpp:
+ (JSC::JSString::resolveRope):
+ * runtime/SmallStrings.cpp:
+ (JSC::SmallStringsStorage::SmallStringsStorage):
+ * runtime/UString.cpp:
+ (JSC::initializeUString):
+ (JSC::createRep):
+ (JSC::UString::createFromUTF8):
+ (JSC::UString::createUninitialized):
+ (JSC::UString::spliceSubstringsWithSeparators):
+ (JSC::UString::replaceRange):
+ (JSC::UString::ascii):
+ (JSC::UString::operator=):
+ (JSC::UString::toStrictUInt32):
+ (JSC::equal):
+ * runtime/UString.h:
+ (JSC::UString::isEmpty):
+ (JSC::UString::cost):
+ (JSC::makeString):
+ * runtime/UStringImpl.cpp: Added.
+ (JSC::UStringImpl::baseSharedBuffer):
+ (JSC::UStringImpl::sharedBuffer):
+ (JSC::UStringImpl::destroy):
+ (JSC::UStringImpl::computeHash):
+ * runtime/UStringImpl.h: Added.
+ (JSC::UntypedPtrAndBitfield::UntypedPtrAndBitfield):
+ (JSC::UntypedPtrAndBitfield::asPtr):
+ (JSC::UntypedPtrAndBitfield::operator&=):
+ (JSC::UntypedPtrAndBitfield::operator|=):
+ (JSC::UntypedPtrAndBitfield::operator&):
+ (JSC::UStringImpl::create):
+ (JSC::UStringImpl::createCopying):
+ (JSC::UStringImpl::createUninitialized):
+ (JSC::UStringImpl::data):
+ (JSC::UStringImpl::size):
+ (JSC::UStringImpl::cost):
+ (JSC::UStringImpl::hash):
+ (JSC::UStringImpl::computedHash):
+ (JSC::UStringImpl::setHash):
+ (JSC::UStringImpl::identifierTable):
+ (JSC::UStringImpl::setIdentifierTable):
+ (JSC::UStringImpl::ref):
+ (JSC::UStringImpl::deref):
+ (JSC::UStringImpl::allocChars):
+ (JSC::UStringImpl::copyChars):
+ (JSC::UStringImpl::computeHash):
+ (JSC::UStringImpl::null):
+ (JSC::UStringImpl::empty):
+ (JSC::UStringImpl::checkConsistency):
+ (JSC::UStringImpl::):
+ (JSC::UStringImpl::UStringImpl):
+ (JSC::UStringImpl::operator new):
+ (JSC::UStringImpl::bufferOwnerString):
+ (JSC::UStringImpl::bufferOwnership):
+ (JSC::UStringImpl::isStatic):
+
+2009-12-18 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ Move some build decisions from Qt build system into source files
+ https://bugs.webkit.org/show_bug.cgi?id=31956
+
+ * JavaScriptCore.pri: Compile files unconditionally
+ * jit/ExecutableAllocatorPosix.cpp: Guard with PLATFORM(UNIX) && !PLATFORM(SYMBIAN)
+ * jit/ExecutableAllocatorWin.cpp: Guard with PLATFORM(WIN_OS)
+ * runtime/MarkStackPosix.cpp: Guard with PLATFORM(UNIX) && !PLATFORM(SYMBIAN)
+ * runtime/MarkStackSymbian.cpp: Guard with PLATFORM(SYMBIAN)
+ * runtime/MarkStackWin.cpp: Guard with PLATFORM(WIN_OS)
+ * wtf/Platform.h: Guard ENABLE_JSC_MULTIPLE_THREADS with ENABLE_SINGLE_THREADED for the Qt port
+ * wtf/ThreadingNone.cpp: Guard with ENABLE(SINGLE_THREADED)
+ * wtf/qt/ThreadingQt.cpp: Guard with !ENABLE(SINGLE_THREADED)
+
+2009-12-18 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Add createNonCopying method to UString to make replace constructor passed bool,
+ to make behaviour more explicit. Add createFromUTF8 to UString (wrapping method
+ on UString::Rep), since other cases of transliteration (e.g. from ascii) are
+ performed in UString constructors. Add/use setHash & size() accessors on Rep,
+ rather than accessing _hash/len directly.
+
+ * API/JSClassRef.cpp:
+ (OpaqueJSClass::OpaqueJSClass):
+ * API/OpaqueJSString.cpp:
+ (OpaqueJSString::ustring):
+ * JavaScriptCore.exp:
+ * runtime/ArrayPrototype.cpp:
+ (JSC::arrayProtoFuncToString):
+ * runtime/Identifier.cpp:
+ (JSC::Identifier::equal):
+ (JSC::CStringTranslator::translate):
+ (JSC::UCharBufferTranslator::translate):
+ (JSC::Identifier::addSlowCase):
+ * runtime/JSString.cpp:
+ (JSC::JSString::resolveRope):
+ * runtime/JSString.h:
+ (JSC::JSString::Rope::Fiber::refAndGetLength):
+ (JSC::JSString::Rope::append):
+ * runtime/StringBuilder.h:
+ (JSC::StringBuilder::release):
+ * runtime/StringConstructor.cpp:
+ (JSC::stringFromCharCodeSlowCase):
+ * runtime/StringPrototype.cpp:
+ (JSC::substituteBackreferencesSlow):
+ (JSC::stringProtoFuncToLowerCase):
+ (JSC::stringProtoFuncToUpperCase):
+ (JSC::stringProtoFuncFontsize):
+ (JSC::stringProtoFuncLink):
+ * runtime/UString.cpp:
+ (JSC::UString::UString):
+ (JSC::UString::createNonCopying):
+ (JSC::UString::createFromUTF8):
+ * runtime/UString.h:
+ (JSC::UString::Rep::setHash):
+ (JSC::UString::~UString):
+ (JSC::makeString):
+
+2009-12-18 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Cameron Zwarich and Gavin Barraclough.
+
+ Changed Register constructors to assignment operators, to streamline
+ moving values into registers. (In theory, there's no difference between
+ the two, since the constructor should just inline away, but there seems
+ to be a big difference in the addled mind of the GCC optimizer.)
+
+ In the interpreter, this is a 3.5% SunSpider speedup and a 1K-2K
+ reduction in stack usage per privateExecute stack frame.
+
+ * interpreter/CallFrame.h:
+ (JSC::ExecState::setCalleeArguments):
+ (JSC::ExecState::setCallerFrame):
+ (JSC::ExecState::setScopeChain):
+ (JSC::ExecState::init):
+ (JSC::ExecState::setArgumentCount):
+ (JSC::ExecState::setCallee):
+ (JSC::ExecState::setCodeBlock): Added a little bit of casting so these
+ functions could use the new Register assignment operators.
+
+ * interpreter/Register.h:
+ (JSC::Register::withInt):
+ (JSC::Register::Register):
+ (JSC::Register::operator=): Swapped in assignment operators for constructors.
+
+2009-12-18 Yongjun Zhang <yongjun.zhang@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ https://bugs.webkit.org/show_bug.cgi?id=32713
+ [Qt] make wtf/Assertions.h compile in winscw compiler.
+
+ Add string arg before ellipsis to help winscw compiler resolve variadic
+ macro definitions in wtf/Assertions.h.
+
+ * wtf/Assertions.h:
+
+2009-12-18 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Adam Roben.
+
+ Fixed intermittent failure seen on Windows buildbot, and in other JSC
+ API clients.
+
+ Added a WeakGCPtr class and changed OpaqueJSClass::cachedPrototype to
+ use it, to avoid vending a stale object as a prototype.
+
+ * API/JSClassRef.cpp:
+ (OpaqueJSClassContextData::OpaqueJSClassContextData):
+ (OpaqueJSClass::prototype):
+ * API/JSClassRef.h: Use WeakGCPtr.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * runtime/WeakGCPtr.h: Added.
+ (JSC::WeakGCPtr::WeakGCPtr):
+ (JSC::WeakGCPtr::get):
+ (JSC::WeakGCPtr::clear):
+ (JSC::WeakGCPtr::operator*):
+ (JSC::WeakGCPtr::operator->):
+ (JSC::WeakGCPtr::operator!):
+ (JSC::WeakGCPtr::operator bool):
+ (JSC::WeakGCPtr::operator UnspecifiedBoolType):
+ (JSC::WeakGCPtr::assign):
+ (JSC::::operator):
+ (JSC::operator==):
+ (JSC::operator!=):
+ (JSC::static_pointer_cast):
+ (JSC::const_pointer_cast):
+ (JSC::getPtr): Added WeakGCPtr to the project.
+
+2009-12-18 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ https://bugs.webkit.org/show_bug.cgi?id=32720
+
+ * JavaScriptCore.exp:
+ - Remove exports for UString::append
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ - Make StringBuilder a private header (was project).
+
+2009-12-18 Martin Robinson <martin.james.robinson@gmail.com>
+
+ Reviewed by Gustavo Noronha Silva.
+
+ [GTK] GRefPtr does not take a reference when assigned a raw pointer
+ https://bugs.webkit.org/show_bug.cgi?id=32709
+
+ Ensure that when assigning a raw pointer to a GRefPtr, the reference
+ count is incremented. Also remove the GRefPtr conversion overload as
+ GRefPtr types have necessarily incompatible reference counting.
+
+ * wtf/gtk/GRefPtr.h:
+ (WTF::GRefPtr::operator=):
+
+2009-12-18 Simon Hausmann <simon.hausmann@nokia.com>
+
+ Reviewed by Tor Arne Vestbø.
+
+ [Qt] Clean up the qmake build system to distinguish between trunk builds and package builds
+
+ https://bugs.webkit.org/show_bug.cgi?id=32716
+
+ * pcre/pcre.pri: Use standalone_package instead of QTDIR_build
+
+2009-12-18 Martin Robinson <martin.james.robinson@gmail.com>
+
+ Reviewed by Gustavo Noronha Silva.
+
+ [GTK] Compile warning from line 29 of GRefPtr.cpp
+ https://bugs.webkit.org/show_bug.cgi?id=32703
+
+ Fix memory leak and compiler warning in GRefPtr GHashTable template
+ specialization.
+
+ * wtf/gtk/GRefPtr.cpp:
+ (WTF::refGPtr):
+
+2009-12-17 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Mark Rowe.
+
+ Add BUILDING_ON_SNOW_LEOPARD and TARGETING_SNOW_LEOPARD #defines.
+
+ * wtf/Platform.h:
+
+2009-12-17 Adam Roben <aroben@apple.com>
+
+ Sync JavaScriptCore.vcproj with JavaScriptCore.xcodeproj and the
+ source tree
+
+ Fixes <http://webkit.org/b/32665>.
+
+ Reviewed by Ada Chan.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Moved
+ around files and filters so that the structure matches
+ JavaScriptCore.xcodeproj and the source tree. A few headers that were
+ previously omitted have been added, as well as JSZombie.{cpp,h}.
+
+2009-12-17 Adam Roben <aroben@apple.com>
+
+ Remove HeavyProfile and TreeProfile completely
+
+ These were mostly removed in r42808, but the empty files were left in
+ place.
+
+ Fixes <http://webkit.org/b/32664>.
+
+ Reviewed by John Sullivan.
+
+ * Android.mk:
+ * GNUmakefile.am:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.pri:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCoreSources.bkl:
+ Removed HeavyProfile/TreeProfile source files.
+
+ * profiler/HeavyProfile.cpp: Removed.
+ * profiler/HeavyProfile.h: Removed.
+ * profiler/TreeProfile.cpp: Removed.
+ * profiler/TreeProfile.h: Removed.
+
+2009-12-17 Martin Robinson <martin.james.robinson@gmail.com>
+
+ Reviewed by Gustavo Noronha Silva.
+
+ [GTK] WebKit GTK needs a wrapper for ref counted glib/gobject structs
+ https://bugs.webkit.org/show_bug.cgi?id=21599
+
+ Implement GRefPtr, a smart pointer for reference counted GObject types.
+
+ * GNUmakefile.am:
+ * wtf/gtk/GOwnPtr.cpp:
+ (WTF::GDir):
+ * wtf/gtk/GRefPtr.h: Added.
+ (WTF::):
+ (WTF::GRefPtr::GRefPtr):
+ (WTF::GRefPtr::~GRefPtr):
+ (WTF::GRefPtr::clear):
+ (WTF::GRefPtr::get):
+ (WTF::GRefPtr::operator*):
+ (WTF::GRefPtr::operator->):
+ (WTF::GRefPtr::operator!):
+ (WTF::GRefPtr::operator UnspecifiedBoolType):
+ (WTF::GRefPtr::hashTableDeletedValue):
+ (WTF::::operator):
+ (WTF::::swap):
+ (WTF::swap):
+ (WTF::operator==):
+ (WTF::operator!=):
+ (WTF::static_pointer_cast):
+ (WTF::const_pointer_cast):
+ (WTF::getPtr):
+ (WTF::adoptGRef):
+ (WTF::refGPtr):
+ (WTF::derefGPtr):
+
+2009-12-17 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk>
+
+ Unreviewed. Build fixes for make distcheck.
+
+ * GNUmakefile.am:
+
+2009-12-16 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Fixed <rdar://problem/7355025> Interpreter::privateExecute macro generates
+ bloated code
+
+ This patch cuts Interpreter stack use by about a third.
+
+ * bytecode/Opcode.h: Changed Opcode to const void* to work with the
+ const static initiliazation we want to do in Interpreter::privateExecute.
+
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::Interpreter): Moved hashtable initialization here to
+ avoid polluting Interpreter::privateExecute's stack, and changed it from a
+ series of add() calls to one add() call in a loop, to cut down on code size.
+
+ (JSC::Interpreter::privateExecute): Changed a series of label computations
+ to a copy of a compile-time constant array to cut down on code size.
+
+2009-12-16 Mark Rowe <mrowe@apple.com>
+
+ Build fix. Disable debug variants of WebKit frameworks.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2009-12-15 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam "r=me" Weinig.
+
+ https://bugs.webkit.org/show_bug.cgi?id=32498
+ <rdar://problem/7471495>
+ REGRESSION(r51978-r52039): AJAX "Mark This Forum Read" function no longer
+ works
+
+ Fixed a tyop.
+
+ * runtime/Operations.h:
+ (JSC::jsAdd): Use the '&&' operator, not the ',' operator.
+
+2009-12-15 Geoffrey Garen <ggaren@apple.com>
+
+ Try to fix the windows build: don't export this inlined function.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2009-12-15 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Beth Dakin.
+
+ Inlined JSCell's operator new.
+
+ 3.7% speedup on bench-allocate-nonretained.js.
+
+ * JavaScriptCore.exp:
+ * runtime/JSCell.cpp:
+ * runtime/JSCell.h:
+ (JSC::JSCell::operator new):
+
+2009-12-15 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Removed the number heap, replacing it with a one-item free list for
+ numbers, taking advantage of the fact that two number cells fit inside
+ the space for one regular cell, and number cells don't require destruction.
+
+ SunSpider says 1.6% faster in JSVALUE32 mode (the only mode that
+ heap-allocates numbers).
+
+ SunSpider says 1.1% faster in JSVALUE32_64 mode. v8 says 0.8% faster
+ in JSVALUE32_64 mode. 10% speedup on bench-alloc-nonretained.js. 6%
+ speedup on bench-alloc-retained.js.
+
+ There's a lot of formulaic change in this patch, but not much substance.
+
+ * JavaScriptCore.exp:
+ * debugger/Debugger.cpp:
+ (JSC::Debugger::recompileAllJSFunctions):
+ * runtime/Collector.cpp:
+ (JSC::Heap::Heap):
+ (JSC::Heap::destroy):
+ (JSC::Heap::allocateBlock):
+ (JSC::Heap::freeBlock):
+ (JSC::Heap::freeBlockPtr):
+ (JSC::Heap::freeBlocks):
+ (JSC::Heap::recordExtraCost):
+ (JSC::Heap::allocate):
+ (JSC::Heap::resizeBlocks):
+ (JSC::Heap::growBlocks):
+ (JSC::Heap::shrinkBlocks):
+ (JSC::Heap::markConservatively):
+ (JSC::Heap::clearMarkBits):
+ (JSC::Heap::markedCells):
+ (JSC::Heap::sweep):
+ (JSC::Heap::markRoots):
+ (JSC::Heap::objectCount):
+ (JSC::Heap::addToStatistics):
+ (JSC::Heap::statistics):
+ (JSC::Heap::isBusy):
+ (JSC::Heap::reset):
+ (JSC::Heap::collectAllGarbage):
+ (JSC::Heap::primaryHeapBegin):
+ (JSC::Heap::primaryHeapEnd):
+ * runtime/Collector.h:
+ (JSC::): Removed all code pertaining to the number heap, and changed all
+ heap template functions and classes to non-template functions and classes.
+
+ (JSC::Heap::allocateNumber): A new optimization to replace the number
+ heap: allocate half-sized number cells in pairs, returning the first
+ cell and caching the second cell for the next allocation.
+
+ * runtime/CollectorHeapIterator.h:
+ (JSC::LiveObjectIterator::LiveObjectIterator):
+ (JSC::LiveObjectIterator::operator++):
+ (JSC::DeadObjectIterator::DeadObjectIterator):
+ (JSC::DeadObjectIterator::operator++):
+ (JSC::ObjectIterator::ObjectIterator):
+ (JSC::ObjectIterator::operator++):
+ * runtime/JSCell.h:
+ (JSC::JSCell::isNumber): Removed all code pertaining to the number heap,
+ and changed all heap template functions and classes to non-template functions
+ and classes.
+
+2009-12-15 Zoltan Horvath <zoltan@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ Allow custom memory allocation control for WeakGCMap class
+ https://bugs.webkit.org/show_bug.cgi?id=32547
+
+ Inherits WeakGCMap from FastAllocBase because it is instantiated by
+ 'new' at: WebCore/dom/Document.cpp:512.
+
+ * runtime/WeakGCMap.h:
+
+2009-12-15 Zoltan Horvath <zoltan@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ Allow custom memory allocation control for dtoa's P5Node struct
+ https://bugs.webkit.org/show_bug.cgi?id=32544
+
+ Inherits P5Node struct from Noncopyable because it is instantiated by
+ 'new' at wtf/dtoa.cpp:588 and don't need to be copyable.
+
+ * wtf/dtoa.cpp:
+
+2009-12-14 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Simon Fraser.
+
+ https://bugs.webkit.org/show_bug.cgi?id=32524
+ REGRESSION(52084): fast/dom/prototypes.html failing two CSS tests
+
+ * wtf/StdLibExtras.h:
+ (WTF::bitCount): The original patch put the parentheses in the wrong
+ place, completely changing the calculation and making it almost always
+ wrong. Moved the parentheses around the '+' operation, like the original
+ compiler warning suggested.
+
+2009-12-14 Gabor Loki <loki@inf.u-szeged.hu>
+
+ Unreviewed trivial buildfix.
+
+ Fix crosses initialization of usedPrimaryBlocks for JSValue32
+
+ * runtime/Collector.cpp:
+ (JSC::Heap::markConservatively):
+
+2009-12-14 Csaba Osztrogonác <ossy@webkit.org>
+
+ Reviewed by Simon Hausmann.
+
+ GCC 4.3.x warning fixed. Suggested parantheses added.
+ warning: ../../../JavaScriptCore/wtf/StdLibExtras.h:77: warning: suggest parentheses around + or - in operand of &
+
+ * wtf/StdLibExtras.h:
+ (WTF::bitCount):
+
+2009-12-13 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Changed GC from mark-sweep to mark-allocate.
+
+ Added WeakGCMap to keep WebCore blissfully ignorant about objects that
+ have become garbage but haven't run their destructors yet.
+
+ 1% SunSpider speedup.
+ 7.6% v8 speedup (37% splay speedup).
+ 17% speedup on bench-alloc-nonretained.js.
+ 18% speedup on bench-alloc-retained.js.
+
+ * API/JSBase.cpp:
+ (JSGarbageCollect):
+ * API/JSContextRef.cpp:
+ * JavaScriptCore.exp:
+ * JavaScriptCore.xcodeproj/project.pbxproj: Updated for renames and new
+ files.
+
+ * debugger/Debugger.cpp:
+ (JSC::Debugger::recompileAllJSFunctions): Updated to use the Collector
+ iterator abstraction.
+
+ * jsc.cpp:
+ (functionGC): Updated for rename.
+
+ * runtime/Collector.cpp: Slightly reduced the number of allocations per
+ collection, so that small workloads only allocate on collector block,
+ rather than two.
+
+ (JSC::Heap::Heap): Updated to use the new allocateBlock function.
+
+ (JSC::Heap::destroy): Updated to use the new freeBlocks function.
+
+ (JSC::Heap::allocateBlock): New function to initialize a block when
+ allocating it.
+
+ (JSC::Heap::freeBlock): Consolidated the responsibility for running
+ destructors into this function.
+
+ (JSC::Heap::freeBlocks): Updated to use freeBlock.
+
+ (JSC::Heap::recordExtraCost): Sweep the heap in this reporting function,
+ so that allocation, which is more common, doesn't have to check extraCost.
+
+ (JSC::Heap::heapAllocate): Run destructors right before recycling a
+ garbage cell. This has better cache utilization than a separate sweep phase.
+
+ (JSC::Heap::resizeBlocks):
+ (JSC::Heap::growBlocks):
+ (JSC::Heap::shrinkBlocks): New set of functions for managing the size of
+ the heap, now that the heap doesn't maintain any information about its
+ size.
+
+ (JSC::isPointerAligned):
+ (JSC::isHalfCellAligned):
+ (JSC::isPossibleCell):
+ (JSC::isCellAligned):
+ (JSC::Heap::markConservatively): Cleaned up this code a bit.
+
+ (JSC::Heap::clearMarkBits):
+ (JSC::Heap::markedCells): Some helper functions for examining the the mark
+ bitmap.
+
+ (JSC::Heap::sweep): Simplified this function by using a DeadObjectIterator.
+
+ (JSC::Heap::markRoots): Reordered some operations for clarity.
+
+ (JSC::Heap::objectCount):
+ (JSC::Heap::addToStatistics):
+ (JSC::Heap::statistics): Rewrote these functions to calculate an object
+ count on demand, since the heap doesn't maintain this information by
+ itself.
+
+ (JSC::Heap::reset): New function for resetting the heap once we've
+ exhausted heap space.
+
+ (JSC::Heap::collectAllGarbage): This function matches the old collect()
+ behavior, but it's now an uncommon function used only by API.
+
+ * runtime/Collector.h:
+ (JSC::CollectorBitmap::count):
+ (JSC::CollectorBitmap::isEmpty): Added some helper functions for managing
+ the collector mark bitmap.
+
+ (JSC::Heap::reportExtraMemoryCost): Changed reporting from cell equivalents
+ to bytes, so it's easier to understand.
+
+ * runtime/CollectorHeapIterator.h:
+ (JSC::CollectorHeapIterator::CollectorHeapIterator):
+ (JSC::CollectorHeapIterator::operator!=):
+ (JSC::CollectorHeapIterator::operator*):
+ (JSC::CollectorHeapIterator::advance):
+ (JSC::::LiveObjectIterator):
+ (JSC::::operator):
+ (JSC::::DeadObjectIterator):
+ (JSC::::ObjectIterator): New iterators for encapsulating details about
+ heap layout, and what's live and dead on the heap.
+
+ * runtime/JSArray.cpp:
+ (JSC::JSArray::putSlowCase):
+ (JSC::JSArray::increaseVectorLength): Delay reporting extra cost until
+ we're fully constructed, so the heap mark phase won't visit us in an
+ invalid state.
+
+ * runtime/JSCell.h:
+ (JSC::JSCell::):
+ (JSC::JSCell::createDummyStructure):
+ (JSC::JSCell::JSCell):
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData):
+ * runtime/JSGlobalData.h: Added a dummy cell to simplify allocation logic.
+
+ * runtime/JSString.h:
+ (JSC::jsSubstring): Don't report extra cost for substrings, since they
+ share a buffer that's already reported extra cost.
+
+ * runtime/Tracing.d:
+ * runtime/Tracing.h: Changed these dtrace hooks not to report object
+ counts, since they're no longer cheap to compute.
+
+ * runtime/UString.h: Updated for renames.
+
+ * runtime/WeakGCMap.h: Added.
+ (JSC::WeakGCMap::isEmpty):
+ (JSC::WeakGCMap::uncheckedGet):
+ (JSC::WeakGCMap::uncheckedBegin):
+ (JSC::WeakGCMap::uncheckedEnd):
+ (JSC::::get):
+ (JSC::::take):
+ (JSC::::set):
+ (JSC::::uncheckedRemove): Mentioned above.
+
+ * wtf/StdLibExtras.h:
+ (WTF::bitCount): Added a bit population count function, so the heap can
+ count live objects to fulfill statistics questions.
+
+The very last cell in the block is not allocated -- should not be marked.
+
+2009-12-13 Geoffrey Garen <ggaren@apple.com>
+
+ Windows build fix: Export some new symbols.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2009-12-13 Geoffrey Garen <ggaren@apple.com>
+
+ Windows build fix: Removed some old exports.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2009-12-13 Geoffrey Garen <ggaren@apple.com>
+
+ Windows build fix: Use unsigned instead of uint32_t to avoid dependencies.
+
+ * wtf/StdLibExtras.h:
+ (WTF::bitCount):
+
+2009-12-13 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (speculative Windows build fix).
+
+ * runtime/JSGlobalObjectFunctions.cpp:
+
+2009-12-13 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ https://bugs.webkit.org/show_bug.cgi?id=32496
+ Switch remaining cases of string construction to use StringBuilder.
+ Builds strings using a vector rather than using string append / addition.
+
+ * JavaScriptCore.exp:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * runtime/Executable.cpp:
+ (JSC::FunctionExecutable::paramString):
+ * runtime/FunctionConstructor.cpp:
+ (JSC::constructFunction):
+ * runtime/JSGlobalObjectFunctions.cpp:
+ (JSC::encode):
+ (JSC::decode):
+ (JSC::globalFuncEscape):
+ (JSC::globalFuncUnescape):
+ * runtime/JSONObject.cpp:
+ (JSC::Stringifier::stringify):
+ (JSC::Stringifier::indent):
+ * runtime/JSString.h:
+ * runtime/LiteralParser.cpp:
+ (JSC::LiteralParser::Lexer::lexString):
+ * runtime/NumberPrototype.cpp:
+ (JSC::integerPartNoExp):
+ (JSC::numberProtoFuncToFixed):
+ (JSC::numberProtoFuncToPrecision):
+ * runtime/Operations.h:
+ (JSC::jsString):
+ * runtime/StringPrototype.cpp:
+ (JSC::substituteBackreferencesSlow):
+ (JSC::substituteBackreferences):
+ (JSC::stringProtoFuncConcat):
+
+2009-12-08 Jeremy Moskovich <jeremy@chromium.org>
+
+ Reviewed by Eric Seidel.
+
+ Add code to allow toggling ATSUI/Core Text rendering at runtime in ComplexTextController.
+ https://bugs.webkit.org/show_bug.cgi?id=31802
+
+ The goal here is to allow for a zero runtime hit for ports that decide to select
+ the API at compile time.
+ When both USE(ATSUI) and USE(CORE_TEXT) are true, the API is toggled
+ at runtime. Core Text is used for OS Versions >= 10.6.
+
+ * wtf/Platform.h: #define USE_CORE_TEXT and USE_ATSUI on Chrome/Mac.
+
+2009-12-11 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Unify codegen for forward and backward variants of branches
+ https://bugs.webkit.org/show_bug.cgi?id=32463
+
+ * jit/JIT.h:
+ (JSC::JIT::emit_op_loop): Implemented in terms of forward variant.
+ (JSC::JIT::emit_op_loop_if_true): ditto
+ (JSC::JIT::emitSlow_op_loop_if_true): ditto
+ (JSC::JIT::emit_op_loop_if_false): ditto
+ (JSC::JIT::emitSlow_op_loop_if_false): ditto
+ (JSC::JIT::emit_op_loop_if_less): ditto
+ (JSC::JIT::emitSlow_op_loop_if_less): ditto
+ * jit/JITOpcodes.cpp:
+
+2009-12-11 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Anders Carlsson.
+
+ Allow WTFs concept of the main thread to differ from pthreads when necessary.
+
+ * wtf/ThreadingPthreads.cpp:
+ (WTF::initializeThreading):
+ (WTF::isMainThread):
+ * wtf/mac/MainThreadMac.mm:
+ (WTF::initializeMainThreadPlatform):
+ (WTF::scheduleDispatchFunctionsOnMainThread):
+
+2009-12-11 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ https://bugs.webkit.org/show_bug.cgi?id=32454
+ Refactor construction of simple strings to avoid string concatenation.
+
+ Building strings through concatenation has a memory and performance cost -
+ a memory cost since we must over-allocate the buffer to leave space to append
+ into, and performance in that the string may still require reallocation (and
+ thus copying during construction). Instead move the full construction to
+ within a single function call (makeString), so that the arguments' lengths
+ can be calculated and an appropriate sized buffer allocated before copying
+ any characters.
+
+ ~No performance change (~2% progression on date tests).
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::escapeQuotes):
+ (JSC::valueToSourceString):
+ (JSC::constantName):
+ (JSC::idName):
+ (JSC::CodeBlock::registerName):
+ (JSC::regexpToSourceString):
+ (JSC::regexpName):
+ * bytecompiler/NodesCodegen.cpp:
+ (JSC::substitute):
+ * profiler/Profiler.cpp:
+ (JSC::Profiler::createCallIdentifier):
+ * runtime/DateConstructor.cpp:
+ (JSC::callDate):
+ * runtime/DateConversion.cpp:
+ (JSC::formatDate):
+ (JSC::formatDateUTCVariant):
+ (JSC::formatTime):
+ (JSC::formatTimeUTC):
+ * runtime/DateConversion.h:
+ (JSC::):
+ * runtime/DatePrototype.cpp:
+ (JSC::dateProtoFuncToString):
+ (JSC::dateProtoFuncToUTCString):
+ (JSC::dateProtoFuncToDateString):
+ (JSC::dateProtoFuncToTimeString):
+ (JSC::dateProtoFuncToGMTString):
+ * runtime/ErrorPrototype.cpp:
+ (JSC::errorProtoFuncToString):
+ * runtime/ExceptionHelpers.cpp:
+ (JSC::createUndefinedVariableError):
+ (JSC::createErrorMessage):
+ (JSC::createInvalidParamError):
+ * runtime/FunctionPrototype.cpp:
+ (JSC::insertSemicolonIfNeeded):
+ (JSC::functionProtoFuncToString):
+ * runtime/ObjectPrototype.cpp:
+ (JSC::objectProtoFuncToString):
+ * runtime/RegExpConstructor.cpp:
+ (JSC::constructRegExp):
+ * runtime/RegExpObject.cpp:
+ (JSC::RegExpObject::match):
+ * runtime/RegExpPrototype.cpp:
+ (JSC::regExpProtoFuncCompile):
+ (JSC::regExpProtoFuncToString):
+ * runtime/StringPrototype.cpp:
+ (JSC::stringProtoFuncBig):
+ (JSC::stringProtoFuncSmall):
+ (JSC::stringProtoFuncBlink):
+ (JSC::stringProtoFuncBold):
+ (JSC::stringProtoFuncFixed):
+ (JSC::stringProtoFuncItalics):
+ (JSC::stringProtoFuncStrike):
+ (JSC::stringProtoFuncSub):
+ (JSC::stringProtoFuncSup):
+ (JSC::stringProtoFuncFontcolor):
+ (JSC::stringProtoFuncFontsize):
+ (JSC::stringProtoFuncAnchor):
+ * runtime/UString.h:
+ (JSC::):
+ (JSC::makeString):
+
+2009-12-10 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ https://bugs.webkit.org/show_bug.cgi?id=32400
+ Switch remaining cases of string addition to use ropes.
+
+ Re-landing r51975 - added toPrimitiveString method,
+ performs toPrimitive then subsequent toString operations.
+
+ ~1% progression on Sunspidey.
+
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ * runtime/JSString.h:
+ (JSC::JSString::JSString):
+ (JSC::JSString::appendStringInConstruct):
+ * runtime/Operations.cpp:
+ (JSC::jsAddSlowCase):
+ * runtime/Operations.h:
+ (JSC::jsString):
+ (JSC::jsAdd):
+
+2009-12-11 Adam Roben <aroben@apple.com>
+
+ Windows build fix
+
+ * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: Added
+ $(WebKitOutputDir)/include/private to the include path.
+
+2009-12-11 Adam Roben <aroben@apple.com>
+
+ Move QuartzCorePresent.h to include/private
+
+ This fixes other projects that use wtf/Platform.h
+
+ Rubber-stamped by Steve Falkenburg.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Let VS do its thang.
+ * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh: Write
+ QuartzCorePresent.h to $(WebKitOutputDir)/include/private.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
+ * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops:
+ Added $(WebKitOutputDir)/include/private to the include path.
+
+2009-12-11 Adam Roben <aroben@apple.com>
+
+ Fix clean builds and everything rebuilding on every build
+
+ Reviewed by Sam Weinig.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh: Don't
+ write out QuartzCorePresent.h if it exists but is older than
+ QuartzCore.h. Also, create the directory we write QuartzCorePresent.h
+ into first.
+
+2009-12-11 Adam Roben <aroben@apple.com>
+
+ Windows build fix for systems with spaces in their paths
+
+ * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh: Quote some paths.
+
+2009-12-11 Chris Marrin <cmarrin@apple.com>
+
+ Reviewed by Adam Roben.
+
+ Add check for presence of QuartzCore headers
+ https://bugs.webkit.org/show_bug.cgi?id=31856
+
+ The script now checks for the presence of QuartzCore.h. If present
+ it will turn on ACCELERATED_COMPOSITING and 3D_RENDERING to enable
+ HW compositing on Windows. The script writes QuartzCorePresent.h to
+ the build directory which has a define telling whether QuartzCore is
+ present.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh:
+ * wtf/Platform.h:
+
+2009-12-11 Kent Tamura <tkent@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ Fix a problem that JSC::gregorianDateTimeToMS() returns a negative
+ value for a huge year value.
+ https://bugs.webkit.org/show_bug.cgi?id=32304
+
+ * wtf/DateMath.cpp:
+ (WTF::dateToDaysFrom1970): Renamed from dateToDayInYear, and changed the return type to double.
+ (WTF::calculateDSTOffset): Follow the dateToDaysFrom1970() change.
+ (WTF::timeClip): Use maxECMAScriptTime.
+ (JSC::gregorianDateTimeToMS): Follow the dateToDaysFrom1970() change.
+
+2009-12-10 Adam Barth <abarth@webkit.org>
+
+ No review, rolling out r51975.
+ http://trac.webkit.org/changeset/51975
+
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ * runtime/JSString.h:
+ (JSC::JSString::JSString):
+ (JSC::JSString::appendStringInConstruct):
+ * runtime/Operations.cpp:
+ (JSC::jsAddSlowCase):
+ * runtime/Operations.h:
+ (JSC::jsString):
+ (JSC::jsAdd):
+
+2009-12-10 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Incorrect caching of prototype lookup with dictionary base
+ https://bugs.webkit.org/show_bug.cgi?id=32402
+
+ Make sure we don't add cached prototype lookup to the proto_list
+ lookup chain if the top level object is a dictionary.
+
+ * jit/JITStubs.cpp:
+ (JSC::JITThunks::tryCacheGetByID):
+
+2009-12-10 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ https://bugs.webkit.org/show_bug.cgi?id=32400
+ Switch remaining cases of string addition to use ropes.
+
+ ~1% progression on Sunspidey.
+
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ * runtime/JSString.h:
+ (JSC::JSString::JSString):
+ (JSC::JSString::appendStringInConstruct):
+ * runtime/Operations.cpp:
+ (JSC::jsAddSlowCase):
+ * runtime/Operations.h:
+ (JSC::jsString):
+ (JSC::jsAdd):
+
+2009-12-10 Kent Hansen <kent.hansen@nokia.com>
+
+ Reviewed by Geoffrey Garen.
+
+ Remove JSObject::getPropertyAttributes() and all usage of it.
+ https://bugs.webkit.org/show_bug.cgi?id=31933
+
+ getOwnPropertyDescriptor() should be used instead.
+
+ * JavaScriptCore.exp:
+ * JavaScriptCore.order:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * debugger/DebuggerActivation.cpp:
+ (JSC::DebuggerActivation::getOwnPropertyDescriptor):
+ * debugger/DebuggerActivation.h:
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::propertyIsEnumerable):
+ * runtime/JSObject.h:
+ * runtime/JSVariableObject.cpp:
+ * runtime/JSVariableObject.h:
+
+2009-12-10 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt & Mark Rowe.
+
+ https://bugs.webkit.org/show_bug.cgi?id=32367
+ Add support for short Ropes (up to 3 entries) inline within JSString.
+ (rather than externally allocating an object to hold the rope).
+ Switch jsAdd of (JSString* + JSString*) to now make use of Ropes.
+
+ ~1% progression on Sunspidey.
+
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::privateExecute):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::privateCompileCTIMachineTrampolines):
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ * runtime/JSString.cpp:
+ (JSC::JSString::resolveRope):
+ (JSC::JSString::toBoolean):
+ (JSC::JSString::getStringPropertyDescriptor):
+ * runtime/JSString.h:
+ (JSC::JSString::Rope::Fiber::deref):
+ (JSC::JSString::Rope::Fiber::ref):
+ (JSC::JSString::Rope::Fiber::refAndGetLength):
+ (JSC::JSString::Rope::append):
+ (JSC::JSString::JSString):
+ (JSC::JSString::~JSString):
+ (JSC::JSString::value):
+ (JSC::JSString::tryGetValue):
+ (JSC::JSString::length):
+ (JSC::JSString::canGetIndex):
+ (JSC::JSString::appendStringInConstruct):
+ (JSC::JSString::appendValueInConstructAndIncrementLength):
+ (JSC::JSString::isRope):
+ (JSC::JSString::string):
+ (JSC::JSString::ropeLength):
+ (JSC::JSString::getStringPropertySlot):
+ * runtime/Operations.h:
+ (JSC::jsString):
+ (JSC::jsAdd):
+ (JSC::resolveBase):
+
+2009-12-09 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Geoffrey Garen.
+
+ Fix three more things found by compiling with clang++.
+
+ * runtime/Structure.h:
+ (JSC::StructureTransitionTable::reifySingleTransition):
+ Add the 'std' qualifier to the call to make_pair.
+
+ * wtf/DateMath.cpp:
+ (WTF::initializeDates):
+ Incrementing a bool is deprecated according to the C++ specification.
+
+ * wtf/PtrAndFlags.h:
+ (WTF::PtrAndFlags::PtrAndFlags):
+ Name lookup should not be done in dependent bases, so explicitly qualify the call to set.
+
+2009-12-09 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Google reader gets stuck in the "Loading..." state and does not complete
+ https://bugs.webkit.org/show_bug.cgi?id=32256
+ <rdar://problem/7456388>
+
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emitSlow_op_jless): Fix some backward branches.
+
+2009-12-09 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ https://bugs.webkit.org/show_bug.cgi?id=32228
+ Make destruction of ropes non-recursive to prevent stack exhaustion.
+ Also, pass a UString& into initializeFiber rather than a Ustring::Rep*,
+ since the Rep is not being ref counted this could result in usage of a
+ Rep with refcount zero (where the Rep comes from a temporary UString
+ returned from a function).
+
+ * runtime/JSString.cpp:
+ (JSC::JSString::Rope::destructNonRecursive):
+ (JSC::JSString::Rope::~Rope):
+ * runtime/JSString.h:
+ (JSC::JSString::Rope::initializeFiber):
+ * runtime/Operations.h:
+ (JSC::concatenateStrings):
+
+2009-12-09 Zoltan Herczeg <zherczeg@inf.u-szeged.hu>
+
+ Reviewed by Eric Seidel.
+
+ https://bugs.webkit.org/show_bug.cgi?id=31930
+
+ Update to r51457. ASSERTs changed to COMPILE_ASSERTs.
+ The speedup is 25%.
+
+ * runtime/JSGlobalData.cpp:
+ (JSC::VPtrSet::VPtrSet):
+
+2009-12-09 Steve Block <steveblock@google.com>
+
+ Reviewed by Adam Barth.
+
+ Updates Android Makefiles with latest additions.
+ https://bugs.webkit.org/show_bug.cgi?id=32278
+
+ * Android.mk: Modified.
+ * Android.v8.wtf.mk: Modified.
+
+2009-12-09 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Gavin Barraclough.
+
+ Fix a bug found while trying to compile JavaScriptCore with clang++.
+
+ * yarr/RegexPattern.h:
+ (JSC::Yarr::PatternTerm::PatternTerm): Don't self assign here. Use false instead.
+
+2009-12-09 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Attempt to fix the Windows build.
+
+ * wtf/FastMalloc.h:
+
+2009-12-09 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Fix some things found while trying to compile JavaScriptCore with clang++.
+
+ * wtf/FastMalloc.h:
+ Add correct exception specifications for the allocation/deallocation operators.
+
+ * wtf/Vector.h:
+ * wtf/VectorTraits.h:
+ Fix a bunch of struct/class mismatches.
+
+2009-12-08 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Darin Adler.
+
+ move code generation portions of Nodes.cpp to bytecompiler directory
+ https://bugs.webkit.org/show_bug.cgi?id=32284
+
+ * bytecompiler/NodesCodegen.cpp: Copied from parser/Nodes.cpp. Removed parts that
+ are not about codegen.
+ * parser/Nodes.cpp: Removed everything that is about codegen.
+
+ Update build systems:
+
+ * Android.mk:
+ * GNUmakefile.am:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.pri:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * JavaScriptCoreSources.bkl:
+
+2009-12-08 Kevin Watters <kevinwatters@gmail.com>
+
+ Reviewed by Kevin Ollivier.
+
+ [wx] Mac plugins support.
+
+ https://bugs.webkit.org/show_bug.cgi?id=32236
+
+ * wtf/Platform.h:
+
+2009-12-08 Dmitry Titov <dimich@chromium.org>
+
+ Rubber-stamped by David Levin.
+
+ Revert and reopen "Add asserts to RefCounted to make sure ref/deref happens on the right thread."
+ It may have caused massive increase of reported leaks on the bots.
+ https://bugs.webkit.org/show_bug.cgi?id=31639
+
+ * GNUmakefile.am:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.vcproj/WTF/WTF.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * runtime/Structure.cpp:
+ (JSC::Structure::Structure):
+ * wtf/RefCounted.h:
+ (WTF::RefCountedBase::ref):
+ (WTF::RefCountedBase::hasOneRef):
+ (WTF::RefCountedBase::refCount):
+ (WTF::RefCountedBase::derefBase):
+ * wtf/ThreadVerifier.h: Removed.
+
+2009-12-08 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk>
+
+ Reviewed by Darin Adler.
+
+ Make WebKit build correctly on FreeBSD, IA64, and Alpha.
+ Based on work by Petr Salinger <Petr.Salinger@seznam.cz>,
+ and Colin Watson <cjwatson@ubuntu.com>.
+
+ * wtf/Platform.h:
+
+2009-12-08 Dmitry Titov <dimich@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ Add asserts to RefCounted to make sure ref/deref happens on the right thread.
+ https://bugs.webkit.org/show_bug.cgi?id=31639
+
+ * runtime/Structure.cpp:
+ (JSC::Structure::Structure): Disable thread verification on this class since it uses addressOfCount().
+ * wtf/RefCounted.h:
+ (WTF::RefCountedBase::ref): Add ASSERT.
+ (WTF::RefCountedBase::hasOneRef): Ditto.
+ (WTF::RefCountedBase::refCount): Ditto.
+ (WTF::RefCountedBase::derefBase): Ditto.
+ (WTF::RefCountedBase::disableThreadVerification): delegate to ThreadVerifier method.
+ * wtf/ThreadVerifier.h: Added.
+ (WTF::ThreadVerifier::ThreadVerifier): New Debug-only class to verify that ref/deref of RefCounted is done on the same thread.
+ (WTF::ThreadVerifier::activate): Activates checks. Called when ref count becomes above 2.
+ (WTF::ThreadVerifier::deactivate): Deactivates checks. Called when ref count drops below 2.
+ (WTF::ThreadVerifier::disableThreadVerification): used on objects that should not be checked (StringImpl etc)
+ (WTF::ThreadVerifier::verifyThread):
+ * GNUmakefile.am: Add ThreadVerifier.h to the build file.
+ * JavaScriptCore.gypi: Ditto.
+ * JavaScriptCore.vcproj/WTF/WTF.vcproj: Ditto.
+ * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
+
+2009-12-08 Steve Block <steveblock@google.com>
+
+ Reviewed by Adam Barth.
+
+ [Android] Adds Makefiles for Android port.
+ https://bugs.webkit.org/show_bug.cgi?id=31325
+
+ * Android.mk: Added.
+ * Android.v8.wtf.mk: Added.
+
+2009-12-07 Dmitry Titov <dimich@chromium.org>
+
+ Rubber-stamped by Darin Adler.
+
+ Remove ENABLE_SHARED_SCRIPT flags
+ https://bugs.webkit.org/show_bug.cgi?id=32245
+ This patch was obtained by "git revert" command and then un-reverting of ChangeLog files.
+
+ * Configurations/FeatureDefines.xcconfig:
+ * wtf/Platform.h:
+
+2009-12-07 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (Windows build fixage part I).
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2009-12-05 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ https://bugs.webkit.org/show_bug.cgi?id=32184
+ Handle out-of-memory conditions with JSC Ropes with a JS exception, rather than crashing.
+ Switch from using fastMalloc to tryFastMalloc, pass an ExecState to record the exception on.
+
+ * API/JSCallbackObjectFunctions.h:
+ (JSC::::toString):
+ * API/JSValueRef.cpp:
+ (JSValueIsStrictEqual):
+ * JavaScriptCore.exp:
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::emitEqualityOp):
+ * debugger/DebuggerCallFrame.cpp:
+ (JSC::DebuggerCallFrame::functionName):
+ (JSC::DebuggerCallFrame::calculatedFunctionName):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::callEval):
+ (JSC::Interpreter::privateExecute):
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ * profiler/ProfileGenerator.cpp:
+ (JSC::ProfileGenerator::addParentForConsoleStart):
+ * profiler/Profiler.cpp:
+ (JSC::Profiler::willExecute):
+ (JSC::Profiler::didExecute):
+ (JSC::Profiler::createCallIdentifier):
+ (JSC::createCallIdentifierFromFunctionImp):
+ * profiler/Profiler.h:
+ * runtime/ArrayPrototype.cpp:
+ (JSC::arrayProtoFuncIndexOf):
+ (JSC::arrayProtoFuncLastIndexOf):
+ * runtime/DateConstructor.cpp:
+ (JSC::constructDate):
+ * runtime/FunctionPrototype.cpp:
+ (JSC::functionProtoFuncToString):
+ * runtime/InternalFunction.cpp:
+ (JSC::InternalFunction::name):
+ (JSC::InternalFunction::displayName):
+ (JSC::InternalFunction::calculatedDisplayName):
+ * runtime/InternalFunction.h:
+ * runtime/JSCell.cpp:
+ (JSC::JSCell::getString):
+ * runtime/JSCell.h:
+ (JSC::JSValue::getString):
+ * runtime/JSONObject.cpp:
+ (JSC::gap):
+ (JSC::Stringifier::Stringifier):
+ (JSC::Stringifier::appendStringifiedValue):
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::putDirectFunction):
+ (JSC::JSObject::putDirectFunctionWithoutTransition):
+ (JSC::JSObject::defineOwnProperty):
+ * runtime/JSObject.h:
+ * runtime/JSPropertyNameIterator.cpp:
+ (JSC::JSPropertyNameIterator::get):
+ * runtime/JSString.cpp:
+ (JSC::JSString::Rope::~Rope):
+ (JSC::JSString::resolveRope):
+ (JSC::JSString::getPrimitiveNumber):
+ (JSC::JSString::toNumber):
+ (JSC::JSString::toString):
+ (JSC::JSString::toThisString):
+ (JSC::JSString::getStringPropertyDescriptor):
+ * runtime/JSString.h:
+ (JSC::JSString::Rope::createOrNull):
+ (JSC::JSString::Rope::operator new):
+ (JSC::JSString::value):
+ (JSC::JSString::tryGetValue):
+ (JSC::JSString::getIndex):
+ (JSC::JSString::getStringPropertySlot):
+ (JSC::JSValue::toString):
+ * runtime/JSValue.h:
+ * runtime/NativeErrorConstructor.cpp:
+ (JSC::NativeErrorConstructor::NativeErrorConstructor):
+ * runtime/Operations.cpp:
+ (JSC::JSValue::strictEqualSlowCase):
+ * runtime/Operations.h:
+ (JSC::JSValue::equalSlowCaseInline):
+ (JSC::JSValue::strictEqualSlowCaseInline):
+ (JSC::JSValue::strictEqual):
+ (JSC::jsLess):
+ (JSC::jsLessEq):
+ (JSC::jsAdd):
+ (JSC::concatenateStrings):
+ * runtime/PropertyDescriptor.cpp:
+ (JSC::PropertyDescriptor::equalTo):
+ * runtime/PropertyDescriptor.h:
+ * runtime/StringPrototype.cpp:
+ (JSC::stringProtoFuncReplace):
+ (JSC::stringProtoFuncToLowerCase):
+ (JSC::stringProtoFuncToUpperCase):
+
+2009-12-07 Nikolas Zimmermann <nzimmermann@rim.com>
+
+ Reviewed by Holger Freyther.
+
+ Turn on (SVG) Filters support, by default.
+ https://bugs.webkit.org/show_bug.cgi?id=32224
+
+ * Configurations/FeatureDefines.xcconfig: Enable FILTERS build flag.
+
+2009-12-07 Steve Falkenburg <sfalken@apple.com>
+
+ Build fix. Be flexible about which version of ICU is used on Windows.
+
+ * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: Add optional xcopy commands to copy ICU 4.2.
+
+2009-12-07 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ op_loop_if_less JIT codegen is broken for 64-bit
+ https://bugs.webkit.org/show_bug.cgi?id=32221
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_loop_if_false): Fix codegen in this version - test was backwards.
+
+2009-12-07 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Object.create fails if properties on the descriptor are getters
+ https://bugs.webkit.org/show_bug.cgi?id=32219
+
+ Correctly initialise the PropertySlots with the descriptor object.
+
+ * runtime/ObjectConstructor.cpp:
+ (JSC::toPropertyDescriptor):
+
+2009-12-06 Maciej Stachowiak <mjs@apple.com>
+
+ Not reviewed, build fix.
+
+ Actually tested 64-bit *and* 32-bit build this time.
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_loop_if_false):
+
+2009-12-06 Maciej Stachowiak <mjs@apple.com>
+
+ Not reviewed, build fix.
+
+ Really really fix 64-bit build for prior patch (actually tested this time).
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_loop_if_false):
+ (JSC::JIT::emitSlow_op_loop_if_false):
+
+2009-12-06 Maciej Stachowiak <mjs@apple.com>
+
+ Not reviewed, build fix.
+
+ Really fix 64-bit build for prior patch.
+
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emitSlow_op_jless):
+
+2009-12-06 Maciej Stachowiak <mjs@apple.com>
+
+ Not reviewed, build fix.
+
+ Fix 64-bit build for prior patch.
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emitSlow_op_loop_if_less):
+
+2009-12-05 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ conway benchmark spends half it's time in op_less (jump fusion fails)
+ https://bugs.webkit.org/show_bug.cgi?id=32190
+
+ <1% speedup on SunSpider and V8
+ 2x speedup on "conway" benchmark
+
+ Two optimizations:
+ 1) Improve codegen for logical operators &&, || and ! in a condition context
+
+ When generating code for combinations of &&, || and !, in a
+ condition context (i.e. in an if statement or loop condition), we
+ used to produce a value, and then separately jump based on its
+ truthiness. Now we pass the false and true targets in, and let the
+ logical operators generate jumps directly. This helps in four
+ ways:
+
+ a) Individual clauses of a short-circuit logical operator can now
+ jump directly to the then or else clause of an if statement (or to
+ the top or exit of a loop) instead of jumping to a jump.
+
+ b) It used to be that jump fusion with the condition of the first
+ clause of a logical operator was inhibited, because the register
+ was ref'd to be used later, in the actual condition jump; this no
+ longer happens since a jump straight to the final target is
+ generated directly.
+
+ c) It used to be that jump fusion with the condition of the second
+ clause of a logical operator was inhibited, because there was a
+ jump target right after the second clause and before the actual
+ condition jump. But now it's no longer necessary for the first
+ clause to jump there so jump fusion is not blocked.
+
+ d) We avoid generating excess mov statements in some cases.
+
+ As a concrete example this source:
+
+ if (!((x < q && y < q) || (t < q && z < q))) {
+ // ...
+ }
+
+ Used to generate this bytecode:
+
+ [ 34] less r1, r-15, r-19
+ [ 38] jfalse r1, 7(->45)
+ [ 41] less r1, r-16, r-19
+ [ 45] jtrue r1, 14(->59)
+ [ 48] less r1, r-17, r-19
+ [ 52] jfalse r1, 7(->59)
+ [ 55] less r1, r-18, r-19
+ [ 59] jtrue r1, 17(->76)
+
+ And now generates this bytecode (also taking advantage of the second optimization below):
+
+ [ 34] jnless r-15, r-19, 8(->42)
+ [ 38] jless r-16, r-19, 26(->64)
+ [ 42] jnless r-17, r-19, 8(->50)
+ [ 46] jless r-18, r-19, 18(->64)
+
+ Note the jump fusion and the fact that there's less jump
+ indirection - three of the four jumps go straight to the target
+ clause instead of indirecting through another jump.
+
+ 2) Implement jless opcode to take advantage of the above, since we'll now often generate
+ a less followed by a jtrue where fusion is not forbidden.
+
+ * parser/Nodes.h:
+ (JSC::ExpressionNode::hasConditionContextCodegen): Helper function to determine
+ whether a node supports special conditional codegen. Return false as this is the default.
+ (JSC::ExpressionNode::emitBytecodeInConditionContext): Assert not reached - only really
+ defined for nodes that do have conditional codegen.
+ (JSC::UnaryOpNode::expr): Add const version.
+ (JSC::LogicalNotNode::hasConditionContextCodegen): Returne true only if subexpression
+ supports it.
+ (JSC::LogicalOpNode::hasConditionContextCodegen): Return true.
+ * parser/Nodes.cpp:
+ (JSC::LogicalNotNode::emitBytecodeInConditionContext): Implemented - just swap
+ the true and false targets for the child node.
+ (JSC::LogicalOpNode::emitBytecodeInConditionContext): Implemented - handle jumps
+ directly, improving codegen quality. Also handles further nested conditional codegen.
+ (JSC::ConditionalNode::emitBytecode): Use condition context codegen when available.
+ (JSC::IfNode::emitBytecode): ditto
+ (JSC::IfElseNode::emitBytecode): ditto
+ (JSC::DoWhileNode::emitBytecode): ditto
+ (JSC::WhileNode::emitBytecode): ditto
+ (JSC::ForNode::emitBytecode): ditto
+
+ * bytecode/Opcode.h:
+ - Added loop_if_false opcode - needed now that falsey jumps can be backwards.
+ - Added jless opcode to take advantage of new fusion opportunities.
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dump): Handle above.
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::emitJumpIfTrue): Add peephole for less + jtrue ==> jless.
+ (JSC::BytecodeGenerator::emitJumpIfFalse): Add handling of backwrds falsey jumps.
+ * bytecompiler/BytecodeGenerator.h:
+ (JSC::BytecodeGenerator::emitNodeInConditionContext): Wrapper to handle tracking of
+ overly deep expressions etc.
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::privateExecute): Implement the two new opcodes (loop_if_false, jless).
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileMainPass): Implement JIT support for the two new opcodes.
+ (JSC::JIT::privateCompileSlowCases): ditto
+ * jit/JIT.h:
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_jless):
+ (JSC::JIT::emitSlow_op_jless): ditto
+ (JSC::JIT::emitBinaryDoubleOp): ditto
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emitSlow_op_loop_if_less): ditto
+ (JSC::JIT::emit_op_loop_if_false): ditto
+ (JSC::JIT::emitSlow_op_loop_if_false): ditto
+ * jit/JITStubs.cpp:
+ * jit/JITStubs.h:
+ (JSC::):
+
+2009-12-04 Kent Hansen <kent.hansen@nokia.com>
+
+ Reviewed by Darin Adler.
+
+ JavaScript delete operator should return false for string properties
+ https://bugs.webkit.org/show_bug.cgi?id=32012
+
+ * runtime/StringObject.cpp:
+ (JSC::StringObject::deleteProperty):
+
+2009-12-03 Drew Wilson <atwilson@chromium.org>
+
+ Rolled back r51633 because it causes a perf regression in Chromium.
+
+ * wtf/Platform.h:
+
+2009-12-03 Gavin Barraclough <barraclough@apple.com>
+
+ Try and fix the Windows build.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Export a symbol that should be exported.
+
+2009-12-03 Mark Rowe <mrowe@apple.com>
+
+ Try and fix the Mac build.
+
+ * JavaScriptCore.exp: Export a symbol that should be exported.
+
+2009-12-03 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ REGRESSION(4.0.3-48777): Crash in JSC::ExecState::propertyNames() (Debug-only?)
+ https://bugs.webkit.org/show_bug.cgi?id=32133
+
+ Work around odd GCC-ism and correct the scopechain for use by
+ calls made while a cachedcall is active on the callstack.
+
+ * interpreter/CachedCall.h:
+ (JSC::CachedCall::newCallFrame):
+ * runtime/JSArray.cpp:
+ (JSC::AVLTreeAbstractorForArrayCompare::compare_key_key):
+ * runtime/StringPrototype.cpp:
+ (JSC::stringProtoFuncReplace):
+
+2009-12-03 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver "Brraaaaiiiinnnnnzzzzzzzz" Hunt.
+
+ https://bugs.webkit.org/show_bug.cgi?id=32136
+ Add a rope representation to JSString. Presently JSString always holds its data in UString form.
+ Instead, allow the result of a string concatenation to be represented in a tree form - with a
+ variable sized, reference-counted rope node retaining a set of UString::Reps (or other rope nopes).
+
+ Strings must still currently be resolved down to a flat UString representation before being used,
+ but by holding the string in a rope representation during construction we can avoid copying data
+ until we know the final size of the string.
+
+ ~2% progression on SunSpider (~25% on date-format-xparb, ~20% on string-validate-input).
+
+ * JavaScriptCore.exp:
+
+ - Update exports.
+
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::privateExecute):
+
+ - Make use of new JSString::length() method to avoid prematurely resolving ropes.
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::privateCompileCTIMachineTrampolines):
+
+ - Switch the string length trampoline to read the length directly from JSString::m_length,
+ rather than from the JSString's UString::Rep's 'len' property.
+
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+
+ - Modify op_add such that addition of two strings, where either or both strings are already
+ in rope representation, produces a rope as a result.
+
+ * runtime/JSString.cpp:
+ (JSC::JSString::Rope::~Rope):
+ (JSC::copyChars):
+ (JSC::JSString::resolveRope):
+ (JSC::JSString::getPrimitiveNumber):
+ (JSC::JSString::toBoolean):
+ (JSC::JSString::toNumber):
+ (JSC::JSString::toString):
+ (JSC::JSString::toThisString):
+ (JSC::JSString::getStringPropertyDescriptor):
+ * runtime/JSString.h:
+ (JSC::JSString::Rope::Fiber::Fiber):
+ (JSC::JSString::Rope::Fiber::destroy):
+ (JSC::JSString::Rope::Fiber::isRope):
+ (JSC::JSString::Rope::Fiber::rope):
+ (JSC::JSString::Rope::Fiber::string):
+ (JSC::JSString::Rope::create):
+ (JSC::JSString::Rope::initializeFiber):
+ (JSC::JSString::Rope::ropeLength):
+ (JSC::JSString::Rope::stringLength):
+ (JSC::JSString::Rope::fibers):
+ (JSC::JSString::Rope::Rope):
+ (JSC::JSString::Rope::operator new):
+ (JSC::JSString::JSString):
+ (JSC::JSString::value):
+ (JSC::JSString::length):
+ (JSC::JSString::isRope):
+ (JSC::JSString::rope):
+ (JSC::JSString::string):
+ (JSC::JSString::canGetIndex):
+ (JSC::jsSingleCharacterSubstring):
+ (JSC::JSString::getIndex):
+ (JSC::jsSubstring):
+ (JSC::JSString::getStringPropertySlot):
+
+ - Add rope form.
+
+ * runtime/Operations.h:
+ (JSC::jsAdd):
+ (JSC::concatenateStrings):
+
+ - Update string concatenation, and addition of ropes, to produce ropes.
+
+ * runtime/StringObject.cpp:
+ (JSC::StringObject::getOwnPropertyNames):
+
+ - Make use of new JSString::length() method to avoid prematurely resolving ropes.
+
+2009-11-23 Jeremy Moskovich <jeremy@chromium.org>
+
+ Reviewed by Eric Seidel.
+
+ Switch Chrome/Mac to use Core Text APIs rather than ATSUI APIs.
+ https://bugs.webkit.org/show_bug.cgi?id=31802
+
+ No test since this is already covered by existing pixel tests.
+
+ * wtf/Platform.h: #define USE_CORE_TEXT for Chrome/Mac.
+
+2009-12-02 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Add files missed in prior patch.
+
+ * runtime/JSZombie.cpp:
+ (JSC::):
+ (JSC::JSZombie::leakedZombieStructure):
+ * runtime/JSZombie.h: Added.
+ (JSC::JSZombie::JSZombie):
+ (JSC::JSZombie::isZombie):
+ (JSC::JSZombie::classInfo):
+ (JSC::JSZombie::isGetterSetter):
+ (JSC::JSZombie::isAPIValueWrapper):
+ (JSC::JSZombie::isPropertyNameIterator):
+ (JSC::JSZombie::getCallData):
+ (JSC::JSZombie::getConstructData):
+ (JSC::JSZombie::getUInt32):
+ (JSC::JSZombie::toPrimitive):
+ (JSC::JSZombie::getPrimitiveNumber):
+ (JSC::JSZombie::toBoolean):
+ (JSC::JSZombie::toNumber):
+ (JSC::JSZombie::toString):
+ (JSC::JSZombie::toObject):
+ (JSC::JSZombie::markChildren):
+ (JSC::JSZombie::put):
+ (JSC::JSZombie::deleteProperty):
+ (JSC::JSZombie::toThisObject):
+ (JSC::JSZombie::toThisString):
+ (JSC::JSZombie::toThisJSString):
+ (JSC::JSZombie::getJSNumber):
+ (JSC::JSZombie::getOwnPropertySlot):
+
+2009-12-02 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Add zombies to JSC
+ https://bugs.webkit.org/show_bug.cgi?id=32103
+
+ Add a compile time flag to make the JSC collector replace "unreachable"
+ objects with zombie objects. The zombie object is a JSCell subclass that
+ ASSERTs on any attempt to use the JSCell methods. In addition there are
+ a number of additional assertions in bottleneck code to catch zombie usage
+ as quickly as possible.
+
+ Grrr. Argh. Brains.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * interpreter/Register.h:
+ (JSC::Register::Register):
+ * runtime/ArgList.h:
+ (JSC::MarkedArgumentBuffer::append):
+ (JSC::ArgList::ArgList):
+ * runtime/Collector.cpp:
+ (JSC::Heap::destroy):
+ (JSC::Heap::sweep):
+ * runtime/Collector.h:
+ * runtime/JSCell.h:
+ (JSC::JSCell::isZombie):
+ (JSC::JSValue::isZombie):
+ * runtime/JSValue.h:
+ (JSC::JSValue::decode):
+ (JSC::JSValue::JSValue):
+ * wtf/Platform.h:
+
+2009-12-01 Jens Alfke <snej@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ Added variants of find/contains/add that allow a foreign key type to be used.
+ This will allow AtomicString-keyed maps to be queried by C string without
+ having to create a temporary AtomicString (see HTTPHeaderMap.)
+ The code for this is adapted from the equivalent in HashSet.h.
+
+ * wtf/HashMap.h:
+ (WTF::HashMap::find):
+ (WTF::HashMap::contains):
+ (WTF::HashMap::add):
+ * wtf/HashSet.h: Changed "method" to "function member" in a comment.
+
+2009-12-01 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk>
+
+ Revert 51551 because it broke GTK+.
+
+ * wtf/Platform.h:
+
+2009-11-30 Gavin Barraclough <barraclough@apple.com>
+
+ Windows Build fix. Reviewed by NOBODY.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2009-11-24 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Bug 31859 - Make world selection for JSC IsolatedWorlds automagical.
+
+ WebCore presently has to explicitly specify the world before entering into JSC,
+ which is a little fragile (particularly since property access via a
+ getter/setter might invoke execution). Instead derive the current world from
+ the lexical global object.
+
+ Remove the temporary duct tape of willExecute/didExecute virtual hooks on the JSGlobalData::ClientData - these are no longer necessary.
+
+ * API/JSBase.cpp:
+ (JSEvaluateScript):
+ * API/JSObjectRef.cpp:
+ (JSObjectCallAsFunction):
+ * JavaScriptCore.exp:
+ * runtime/JSGlobalData.cpp:
+ * runtime/JSGlobalData.h:
+
+2009-11-30 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] Remove obsolete PLATFORM(KDE) code
+ https://bugs.webkit.org/show_bug.cgi?id=31958
+
+ KDE is now using unpatched QtWebKit.
+
+ * parser/Lexer.cpp: Remove obsolete KDE_USE_FINAL guard
+ * wtf/Platform.h: Remove PLATFORM(KDE) definition and code
+ section that is guarded with it.
+
+2009-11-30 Jan-Arve Sæther <jan-arve.saether@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Fix compilation with win32-icc
+
+ The Intel compiler does not support the __has_trivial_constructor type
+ trait. The Intel Compiler can report itself as _MSC_VER >= 1400. The
+ reason for that is that the Intel Compiler depends on the Microsoft
+ Platform SDK, and in order to try to be "fully" MS compatible it will
+ "pretend" to be the same MS compiler as was shipped with the MS PSDK.
+ (Thus, compiling with win32-icc with VC8 SDK will make the source code
+ "think" the compiler at hand supports this type trait).
+
+ * wtf/TypeTraits.h:
+
+2009-11-29 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Eric Seidel.
+
+ [Qt] Mac build has JIT disabled
+ https://bugs.webkit.org/show_bug.cgi?id=31828
+
+ * wtf/Platform.h: Enable JIT for Qt Mac builds
+
+2009-11-28 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Eric Seidel.
+
+ Apply workaround for the limitation of VirtualFree with MEM_RELEASE to all ports running on Windows
+ https://bugs.webkit.org/show_bug.cgi?id=31943
+
+ * runtime/MarkStack.h:
+ (JSC::MarkStack::MarkStackArray::shrinkAllocation):
+
+2009-11-28 Zoltan Herczeg <zherczeg@inf.u-szeged.hu>
+
+ Reviewed by Gavin Barraclough.
+
+ https://bugs.webkit.org/show_bug.cgi?id=31930
+
+ Seems a typo. We don't need ~270k memory to determine the vptrs.
+
+ * runtime/JSGlobalData.cpp:
+ (JSC::VPtrSet::VPtrSet):
+
+2009-11-27 Shinichiro Hamaji <hamaji@chromium.org>
+
+ Unreviewed.
+
+ Move GOwnPtr* from wtf to wtf/gtk
+ https://bugs.webkit.org/show_bug.cgi?id=31793
+
+ Build fix for chromium after r51423.
+ Exclude gtk directory from chromium build.
+
+ * JavaScriptCore.gyp/JavaScriptCore.gyp:
+
+2009-11-25 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Incorrect behaviour of jneq_null in the interpreter
+ https://bugs.webkit.org/show_bug.cgi?id=31901
+
+ Correct the logic of jneq_null. This is already covered by existing tests.
+
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::privateExecute):
+
+2009-11-26 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Oliver Hunt.
+
+ Move GOwnPtr* from wtf to wtf/gtk
+ https://bugs.webkit.org/show_bug.cgi?id=31793
+
+ * GNUmakefile.am: Change the path for GOwnPtr.*.
+ * JavaScriptCore.gyp/JavaScriptCore.gyp: Remove
+ GOwnPtr.cpp from the exclude list.
+ * JavaScriptCore.gypi: Change the path for GOwnPtr.*.
+ * wscript: Remove GOwnPtr.cpp from the exclude list.
+ * wtf/GOwnPtr.cpp: Removed.
+ * wtf/GOwnPtr.h: Removed.
+ * wtf/Threading.h: Change the path for GOwnPtr.h.
+ * wtf/gtk/GOwnPtr.cpp: Copied from JavaScriptCore/wtf/GOwnPtr.cpp.
+ * wtf/gtk/GOwnPtr.h: Copied from JavaScriptCore/wtf/GOwnPtr.h.
+ * wtf/unicode/glib/UnicodeGLib.h: Change the path for GOwnPtr.h.
+
+2009-11-24 Dmitry Titov <dimich@chromium.org>
+
+ Reviewed by Eric Seidel.
+
+ Add ENABLE_SHARED_SCRIPT feature define and flag for build-webkit
+ https://bugs.webkit.org/show_bug.cgi?id=31444
+
+ * Configurations/FeatureDefines.xcconfig:
+ * wtf/Platform.h:
+
+2009-11-24 Chris Marrin <cmarrin@apple.com>
+
+ Reviewed by Simon Fraser.
+
+ Add ability to enable ACCELERATED_COMPOSITING on Windows (currently disabled)
+ https://bugs.webkit.org/show_bug.cgi?id=27314
+
+ * wtf/Platform.h:
+
+2009-11-24 Jason Smith <dark.panda@gmail.com>
+
+ Reviewed by Alexey Proskuryakov.
+
+ RegExp#exec's returned Array-like object behaves differently from
+ regular Arrays
+ https://bugs.webkit.org/show_bug.cgi?id=31689
+
+ * JavaScriptCore/runtime/RegExpConstructor.cpp: ensure that undefined
+ values are added to the returned RegExpMatchesArray
+
+2009-11-24 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Alexey Proskuryakov.
+
+ JSON.stringify performance on undefined is very poor
+ https://bugs.webkit.org/show_bug.cgi?id=31839
+
+ Switch from a UString to a Vector<UChar> when building
+ the JSON string, allowing us to safely remove the substr-copy
+ we otherwise did when unwinding an undefined property.
+
+ Also turns out to be a ~5% speedup on stringification.
+
+ * runtime/JSONObject.cpp:
+ (JSC::Stringifier::StringBuilder::append):
+ (JSC::Stringifier::stringify):
+ (JSC::Stringifier::Holder::appendNextProperty):
+
+2009-11-24 Mark Rowe <mrowe@apple.com>
+
+ Fix production builds where the source tree may be read-only.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2009-11-23 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ Include "config.h" to meet Coding Style Guidelines
+ https://bugs.webkit.org/show_bug.cgi?id=31792
+
+ * wtf/unicode/UTF8.cpp:
+ * wtf/unicode/glib/UnicodeGLib.cpp:
+ * wtf/unicode/wince/UnicodeWince.cpp:
+
+2009-11-23 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Streamlined some Math functions where we expect or know the result not
+ to be representable as an int.
+
+ SunSpider says 0.6% faster.
+
+ * runtime/JSNumberCell.h:
+ (JSC::JSValue::JSValue):
+ * runtime/JSValue.h:
+ (JSC::JSValue::):
+ (JSC::jsDoubleNumber):
+ (JSC::JSValue::JSValue): Added a function for making a numeric JSValue
+ and skipping the "can I encode this as an int?" check, avoiding the
+ overhead of int <-> double roundtripping and double <-> double comparison
+ and branching.
+
+ * runtime/MathObject.cpp:
+ (JSC::mathProtoFuncACos):
+ (JSC::mathProtoFuncASin):
+ (JSC::mathProtoFuncATan):
+ (JSC::mathProtoFuncATan2):
+ (JSC::mathProtoFuncCos):
+ (JSC::mathProtoFuncExp):
+ (JSC::mathProtoFuncLog):
+ (JSC::mathProtoFuncRandom):
+ (JSC::mathProtoFuncSin):
+ (JSC::mathProtoFuncSqrt):
+ (JSC::mathProtoFuncTan): For these functions, which we expect or know
+ to produce results not representable as ints, call jsDoubleNumber instead
+ of jsNumber.
+
+2009-11-23 Mark Rowe <mrowe@apple.com>
+
+ Unreviewed. Unbreak the regression tests after r51329.
+
+ * API/JSBase.cpp:
+ (JSEvaluateScript): Null-check clientData before dereferencing it.
+ * API/JSObjectRef.cpp:
+ (JSObjectCallAsFunction): Ditto.
+
+2009-11-23 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Part 1/3 of <rdar://problem/7377477> REGRESSION: Many web pages fail to render after interesting script runs in isolated world
+
+ Some clients of the JavaScriptCore API expect to be able to make callbacks over the JSC API,
+ and for this to automagically cause execution to take place in the world associated with the
+ global object associated with the ExecState (JSContextRef) passed. However this is not how
+ things work - the world must be explicitly set within WebCore.
+
+ Making this work just for API calls to evaluate & call will be a far from perfect solution,
+ since direct (non-API) use of JSC still relies on WebCore setting the current world correctly.
+ A better solution would be to make this all work automagically all throughout WebCore, but this
+ will require more refactoring.
+
+ Since the API is in JSC but worlds only exist in WebCore, add callbacks on the JSGlobalData::ClientData
+ to allow it to update the current world on entry/exit via the JSC API. This is temporary duck
+ tape, and should be removed once the current world no longer needs to be explicitly tracked.
+
+ * API/JSBase.cpp:
+ (JSEvaluateScript):
+ * API/JSObjectRef.cpp:
+ (JSObjectCallAsFunction):
+ * JavaScriptCore.exp:
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::ClientData::beginningExecution):
+ (JSC::JSGlobalData::ClientData::completedExecution):
+ * runtime/JSGlobalData.h:
+
+2009-11-23 Steve Block <steveblock@google.com>
+
+ Reviewed by Dmitry Titov.
+
+ Adds MainThreadAndroid.cpp with Android-specific WTF threading functions.
+ https://bugs.webkit.org/show_bug.cgi?id=31807
+
+ * wtf/android: Added.
+ * wtf/android/MainThreadAndroid.cpp: Added.
+ (WTF::timeoutFired):
+ (WTF::initializeMainThreadPlatform):
+ (WTF::scheduleDispatchFunctionsOnMainThread):
+
+2009-11-23 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Brady Eidson.
+
+ https://bugs.webkit.org/show_bug.cgi?id=31748
+ Make WebSocketHandleCFNet respect proxy auto-configuration files via CFProxySupport
+
+ * JavaScriptCore.exp: Export callOnMainThreadAndWait.
+
+2009-11-23 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Symbian] Fix lastIndexOf() for Symbian
+ https://bugs.webkit.org/show_bug.cgi?id=31773
+
+ Symbian soft floating point library has problems with operators
+ comparing NaN to numbers. Without a workaround lastIndexOf()
+ function does not work.
+
+ Patch developed by David Leong.
+
+ * runtime/StringPrototype.cpp:
+ (JSC::stringProtoFuncLastIndexOf):Add an extra test
+ to check for NaN for Symbian.
+
+2009-11-23 Steve Block <steveblock@google.com>
+
+ Reviewed by Eric Seidel.
+
+ Android port lacks implementation of atomicIncrement and atomicDecrement.
+ https://bugs.webkit.org/show_bug.cgi?id=31715
+
+ * wtf/Threading.h: Modified.
+ (WTF::atomicIncrement): Added Android implementation.
+ (WTF::atomicDecrement): Added Android implementation.
+
+2009-11-22 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Unreviewed.
+
+ [Qt] Sort source lists and remove obsolete comments
+ from the build system.
+
+ * JavaScriptCore.pri:
+
+2009-11-21 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Eric Seidel.
+
+ [Qt][Mac] Turn on multiple JavaScript threads for QtWebkit on Mac
+ https://bugs.webkit.org/show_bug.cgi?id=31753
+
+ * wtf/Platform.h:
+
+2009-11-19 Steve Block <steveblock@google.com>
+
+ Android port lacks configuration in Platform.h and config.h.
+ https://bugs.webkit.org/show_bug.cgi?id=31671
+
+ * wtf/Platform.h: Modified. Added Android-specific configuration.
+
+2009-11-19 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=31690
+ Make SocketStreamHandleCFNet work on Windows
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * wtf/MainThread.cpp:
+ (WTF::FunctionWithContext::FunctionWithContext):
+ (WTF::dispatchFunctionsFromMainThread):
+ (WTF::callOnMainThreadAndWait):
+ * wtf/MainThread.h:
+ Re-add callOnMainThreadAndWait(), which was removed in bug 23926.
+
+2009-11-19 Dmitry Titov <dimich@chromium.org>
+
+ Reviewed by David Levin.
+
+ isMainThread() on Chromium (Mac and Linux) is so slow it timeouts LayoutTests..
+ https://bugs.webkit.org/show_bug.cgi?id=31693
+
+ * wtf/ThreadingPthreads.cpp:
+ (WTF::initializeThreading): grab and use the pthread_t of the main thread instead of ThreadIdentifier.
+ (WTF::isMainThread): Ditto.
+
+2009-11-19 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Darin Adler.
+
+ Remove HAVE(STRING_H) guard from JavaScriptCore
+ https://bugs.webkit.org/show_bug.cgi?id=31668
+
+ * config.h:
+ * runtime/UString.cpp:
+
+2009-11-19 Dumitru Daniliuc <dumi@chromium.org>
+
+ Reviewed by Dmitry Titov.
+
+ Fixing a bug in MessageQueue::removeIf() that leads to an
+ assertion failure.
+
+ https://bugs.webkit.org/show_bug.cgi?id=31657
+
+ * wtf/MessageQueue.h:
+ (WTF::MessageQueue::removeIf):
+
+2009-11-19 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Darin Adler.
+
+ Remove HAVE(FLOAT_H) guard
+ https://bugs.webkit.org/show_bug.cgi?id=31661
+
+ JavaScriptCore has a dependency on float.h, there is
+ no need to guard float.h.
+
+ * runtime/DatePrototype.cpp: Remove include directive
+ for float.h as it is included in MathExtras.h already.
+ * runtime/Operations.cpp: Ditto.
+ * runtime/UString.cpp: Ditto.
+ * wtf/dtoa.cpp: Ditto.
+ * wtf/MathExtras.h: Remove HAVE(FLOAT_H) guard.
+ * wtf/Platform.h: Ditto.
+
+2009-11-19 Thiago Macieira <thiago.macieira@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Build fix for 32-bit Sparc machines: these machines are big-endian.
+
+ * wtf/Platform.h:
+
+2009-11-18 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] Remove support for Qt v4.3 or older versions
+ https://bugs.webkit.org/show_bug.cgi?id=29469
+
+ * JavaScriptCore.pro:
+ * jsc.pro:
+ * wtf/unicode/qt4/UnicodeQt4.h:
+
+2009-11-18 Kent Tamura <tkent@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ Move UString::from(double) implementation to new
+ WTF::doubleToStringInJavaScriptFormat(), and expose it because WebCore
+ code will use it.
+ https://bugs.webkit.org/show_bug.cgi?id=31330
+
+ - Introduce new function createRep(const char*, unsigned) and
+ UString::UString(const char*, unsigned) to reduce 2 calls to strlen().
+ - Fix a bug that dtoa() doesn't update *rve if the input value is NaN
+ or Infinity.
+
+ No new tests because this doesn't change the behavior.
+
+ * JavaScriptCore.exp:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * runtime/UString.cpp:
+ (JSC::createRep):
+ (JSC::UString::UString):
+ (JSC::UString::from): Move the code to doubleToStringInJavaScriptFormat().
+ * runtime/UString.h:
+ * wtf/dtoa.cpp:
+ (WTF::dtoa): Fix a bug about rve.
+ (WTF::append): A helper for doubleToStringInJavaScriptFormat().
+ (WTF::doubleToStringInJavaScriptFormat): Move the code from UString::from(double).
+ * wtf/dtoa.h:
+
+2009-11-18 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] Remove WTF_USE_JAVASCRIPTCORE_BINDINGS as it is no longer used
+ https://bugs.webkit.org/show_bug.cgi?id=31643
+
+ * JavaScriptCore.pro:
+
+2009-11-18 Nate Chapin <japhet@chromium.org>
+
+ Reviewed by Darin Fisher.
+
+ Remove Chromium's unnecessary dependency on wtf's tcmalloc files.
+
+ https://bugs.webkit.org/show_bug.cgi?id=31648
+
+ * JavaScriptCore.gyp/JavaScriptCore.gyp:
+
+2009-11-18 Thiago Macieira <thiago.macieira@nokia.com>
+
+ Reviewed by Gavin Barraclough.
+
+ [Qt] Implement symbol hiding for JSC's JIT functions.
+
+ These functions are implemented directly in assembly, so they need the
+ proper directives to enable/disable visibility. On ELF systems, it's
+ .hidden, whereas on Mach-O systems (Mac) it's .private_extern. On
+ Windows, it's not necessary since you have to explicitly export. I
+ also implemented the AIX idiom, though it's unlikely anyone will
+ implement AIX/POWER JIT.
+ https://bugs.webkit.org/show_bug.cgi?id=30864
+
+ * jit/JITStubs.cpp:
+
+2009-11-18 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Alexey Proskuryakov.
+
+ Interpreter may do an out of range access when throwing an exception in the profiler.
+ https://bugs.webkit.org/show_bug.cgi?id=31635
+
+ Add bounds check.
+
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::throwException):
+
+2009-11-18 Gabor Loki <loki@inf.u-szeged.hu>
+
+ Reviewed by Darin Adler.
+
+ Fix the clobber list of cacheFlush for ARM and Thumb2 on Linux
+ https://bugs.webkit.org/show_bug.cgi?id=31631
+
+ * jit/ExecutableAllocator.h:
+ (JSC::ExecutableAllocator::cacheFlush):
+
+2009-11-18 Harald Fernengel <harald.fernengel@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Fix detection of linux-g++
+
+ Never use "linux-g++*" to check for linux-g++, since this will break embedded
+ builds which use linux-arm-g++ and friends. Use 'linux*-g++*' to check for any
+ g++ on linux mkspec.
+
+ * JavaScriptCore.pri:
+
+2009-11-17 Jon Honeycutt <jhoneycutt@apple.com>
+
+ Add JSContextRefPrivate.h to list of copied files.
+
+ Reviewed by Mark Rowe.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
+
+2009-11-17 Martin Robinson <martin.james.robinson@gmail.com>
+
+ Reviewed by Adam Barth.
+
+ [GTK] Style cleanup for GOwnPtr
+ https://bugs.webkit.org/show_bug.cgi?id=31506
+
+ Remove forward declaration in GOwnPtr and do some style cleanup.
+
+ * wtf/GOwnPtr.cpp:
+ * wtf/GOwnPtr.h:
+ (WTF::GOwnPtr::GOwnPtr):
+ (WTF::GOwnPtr::~GOwnPtr):
+ (WTF::GOwnPtr::get):
+ (WTF::GOwnPtr::release):
+ (WTF::GOwnPtr::outPtr):
+ (WTF::GOwnPtr::set):
+ (WTF::GOwnPtr::clear):
+ (WTF::GOwnPtr::operator*):
+ (WTF::GOwnPtr::operator->):
+ (WTF::GOwnPtr::operator!):
+ (WTF::GOwnPtr::operator UnspecifiedBoolType):
+ (WTF::GOwnPtr::swap):
+ (WTF::swap):
+ (WTF::operator==):
+ (WTF::operator!=):
+ (WTF::getPtr):
+ (WTF::freeOwnedGPtr):
+
+2009-11-17 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Incorrect use of JavaScriptCore API in DumpRenderTree
+ https://bugs.webkit.org/show_bug.cgi?id=31577
+
+ Add assertions to the 'toJS' functions to catch mistakes like
+ this early. Restructure existing code which blindly passed potentially
+ null values to toJS when forwarding exceptions so that a null check is
+ performed first.
+
+ * API/APICast.h:
+ (toJS):
+ (toJSForGC):
+ * API/JSCallbackObjectFunctions.h:
+ (JSC::::getOwnPropertySlot):
+ (JSC::::put):
+ (JSC::::deleteProperty):
+ (JSC::::construct):
+ (JSC::::hasInstance):
+ (JSC::::call):
+ (JSC::::toNumber):
+ (JSC::::toString):
+ (JSC::::staticValueGetter):
+ (JSC::::callbackGetter):
+ * API/tests/testapi.c: Fix errors in the API tester.
+ (MyObject_getProperty):
+ (MyObject_convertToType):
+ (EvilExceptionObject_convertToType):
+
+2009-11-16 Zoltan Herczeg <zherczeg@inf.u-szeged.hu>
+
+ Reviewed by Gavin Barraclough.
+
+ https://bugs.webkit.org/show_bug.cgi?id=31050
+
+ Minor fixes for JSVALUE32_64: branchConvertDoubleToInt32
+ failed on a CortexA8 CPU, but not on a simulator; and
+ JITCall.cpp modifications was somehow not committed to mainline.
+
+ * assembler/ARMAssembler.h:
+ (JSC::ARMAssembler::fmrs_r):
+ * assembler/MacroAssemblerARM.h:
+ (JSC::MacroAssemblerARM::branchConvertDoubleToInt32):
+ * jit/JITCall.cpp:
+ (JSC::JIT::compileOpCall):
+
+2009-11-16 Joerg Bornemann <joerg.bornemann@trolltech.com>
+
+ Reviewed by Simon Hausmann.
+
+ Fix Qt build on Windows CE 6.
+
+ * JavaScriptCore.pri: Add missing include path.
+ * wtf/Platform.h: Include ce_time.h for Windows CE 6.
+
+2009-11-13 Zoltan Herczeg <zherczeg@inf.u-szeged.hu>
+
+ Reviewed by Gavin Barraclough.
+
+ https://bugs.webkit.org/show_bug.cgi?id=31050
+
+ Adding optimization support for mode JSVALUE32_64
+ on ARM systems.
+
+ * jit/JIT.h:
+ * jit/JITCall.cpp:
+ (JSC::JIT::compileOpCall):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emit_op_method_check):
+ (JSC::JIT::compileGetByIdHotPath):
+ (JSC::JIT::compileGetByIdSlowCase):
+ (JSC::JIT::emit_op_put_by_id):
+
+2009-11-14 Zoltan Herczeg <zherczeg@inf.u-szeged.hu>
+
+ Reviewed by Gavin Barraclough.
+
+ https://bugs.webkit.org/show_bug.cgi?id=31050
+
+ Adding JSVALUE32_64 support for ARM (but not turning it
+ on by default). All optimizations must be disabled, since
+ this patch is only the first of a series of patches.
+
+ During the work, a lot of x86 specific code revealed and
+ made platform independent.
+ See revisions: 50531 50541 50593 50594 50595
+
+ * assembler/ARMAssembler.h:
+ (JSC::ARMAssembler::):
+ (JSC::ARMAssembler::fdivd_r):
+ * assembler/MacroAssemblerARM.h:
+ (JSC::MacroAssemblerARM::lshift32):
+ (JSC::MacroAssemblerARM::neg32):
+ (JSC::MacroAssemblerARM::rshift32):
+ (JSC::MacroAssemblerARM::branchOr32):
+ (JSC::MacroAssemblerARM::set8):
+ (JSC::MacroAssemblerARM::setTest8):
+ (JSC::MacroAssemblerARM::loadDouble):
+ (JSC::MacroAssemblerARM::divDouble):
+ (JSC::MacroAssemblerARM::convertInt32ToDouble):
+ (JSC::MacroAssemblerARM::zeroDouble):
+ * jit/JIT.cpp:
+ * jit/JIT.h:
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::privateCompileCTIMachineTrampolines):
+ * jit/JITStubs.cpp:
+ * wtf/StdLibExtras.h:
+
+2009-11-13 Dominik Röttsches <dominik.roettsches@access-company.com>
+
+ Reviewed by Eric Seidel.
+
+ Unify TextBoundaries implementations by only relying on WTF Unicode abstractions
+ https://bugs.webkit.org/show_bug.cgi?id=31468
+
+ Adding isAlphanumeric abstraction, required
+ by TextBoundaries.cpp.
+
+ * wtf/unicode/glib/UnicodeGLib.h:
+ (WTF::Unicode::isAlphanumeric):
+ * wtf/unicode/icu/UnicodeIcu.h:
+ (WTF::Unicode::isAlphanumeric):
+
+2009-11-13 Norbert Leser <norbert.leser&nokia.com>
+
+ Reviewed by Eric Seidel.
+
+ Added macros for USERINCLUDE paths within symbian blocks
+ to guarantee inclusion of respective header files from local path
+ first (to avoid clashes with same names of header files in system include path).
+
+ * JavaScriptCore.pri:
+
+2009-11-13 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ JSValueProtect and JSValueUnprotect don't protect API wrapper values
+ https://bugs.webkit.org/show_bug.cgi?id=31485
+
+ Make JSValueProtect/Unprotect use a new 'toJS' function, 'toJSForGC' that
+ does not attempt to to strip out API wrapper objects.
+
+ * API/APICast.h:
+ (toJSForGC):
+ * API/JSValueRef.cpp:
+ (JSValueProtect):
+ (JSValueUnprotect):
+ * API/tests/testapi.c:
+ (makeGlobalNumberValue):
+ (main):
+
+2009-11-13 İsmail Dönmez <ismail@namtrac.org>
+
+ Reviewed by Antti Koivisto.
+
+ Fix typo, ce_time.cpp should be ce_time.c
+
+ * JavaScriptCore.pri:
+
+2009-11-12 Steve VanDeBogart <vandebo@chromium.org>
+
+ Reviewed by Adam Barth.
+
+ Calculate the time offset only if we were able to parse
+ the date string. This saves an IPC in Chromium for
+ invalid date strings.
+ https://bugs.webkit.org/show_bug.cgi?id=31416
+
+ * wtf/DateMath.cpp:
+ (WTF::parseDateFromNullTerminatedCharacters):
+ (JSC::parseDateFromNullTerminatedCharacters):
+
+2009-11-12 Oliver Hunt <oliver@apple.com>
+
+ Rollout r50896 until i can work out why it causes failures.
+
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::emitReturn):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::execute):
+ * parser/Nodes.cpp:
+ (JSC::EvalNode::emitBytecode):
+
+2009-11-12 Steve Falkenburg <sfalken@apple.com>
+
+ Reviewed by Stephanie Lewis.
+
+ Remove LIBRARY directive from def file to fix Debug_All target.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2009-11-12 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk>
+
+ Rubber-stamped by Holger Freyther.
+
+ Revert r50204, since it makes DRT crash on 32 bits release builds
+ for GTK+.
+
+ * wtf/FastMalloc.h:
+
+2009-11-12 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Start unifying entry logic for function and eval code.
+
+ Eval now uses a ret instruction to end execution, and sets up
+ a callframe more in line with what we do for function entry.
+
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::emitReturn):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::execute):
+ * parser/Nodes.cpp:
+ (JSC::EvalNode::emitBytecode):
+
+2009-11-12 Richard Moe Gustavsen <richard.gustavsen@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] Disable pthread_setname_np.
+
+ This allows Qt builds on Mac from 10.6 to run on earlier version
+ where this symbol is not present.
+ https://bugs.webkit.org/show_bug.cgi?id=31403
+
+ * wtf/Platform.h:
+
+2009-11-12 Thiago Macieira <thiago.macieira@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] Fix linking on Linux 32-bit.
+
+ It was missing the ".text" directive at the top of the file,
+ indicating that code would follow. Without it, the assembler created
+ "NOTYPE" symbols, which would result in linker errors.
+ https://bugs.webkit.org/show_bug.cgi?id=30863
+
+ * jit/JITStubs.cpp:
+
+2009-11-11 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Alexey Proskuryakov.
+
+ Refactor multiple JavaScriptCore threads
+ https://bugs.webkit.org/show_bug.cgi?id=31328
+
+ Remove the id field from the PlatformThread structure
+ as it is not used.
+
+ * runtime/Collector.cpp:
+ (JSC::getCurrentPlatformThread):
+ (JSC::suspendThread):
+ (JSC::resumeThread):
+ (JSC::getPlatformThreadRegisters):
+
+2009-11-10 Geoffrey Garen <ggaren@apple.com>
+
+ Linux build fix: Added an #include for UINT_MAX.
+
+ * runtime/WeakRandom.h:
+
+2009-11-10 Geoffrey Garen <ggaren@apple.com>
+
+ JavaScriptGlue build fix: Marked a file 'private' instead of 'project'.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2009-11-10 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Gavin "avGni arBalroguch" Barraclough.
+
+ Faster Math.random, based on GameRand.
+
+ SunSpider says 1.4% faster.
+
+ * GNUmakefile.am:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj: Added the header to the project.
+
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData):
+ * runtime/JSGlobalData.h: Use an object to track random number generation
+ state, initialized to the current time.
+
+ * runtime/MathObject.cpp:
+ (JSC::MathObject::MathObject):
+ (JSC::mathProtoFuncRandom): Use the new hotness.
+
+ * runtime/WeakRandom.h: Added.
+ (JSC::WeakRandom::WeakRandom):
+ (JSC::WeakRandom::get):
+ (JSC::WeakRandom::advance): The new hotness.
+
+2009-11-09 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Imported the v8 DST cache.
+
+ SunSpider says 1.5% faster.
+
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::resetDateCache): Reset the DST cache when resetting
+ other date data.
+
+ * runtime/JSGlobalData.h:
+ (JSC::DSTOffsetCache::DSTOffsetCache):
+ (JSC::DSTOffsetCache::reset): Added a struct for the DST cache.
+
+ * wtf/DateMath.cpp:
+ (WTF::calculateDSTOffsetSimple):
+ (WTF::calculateDSTOffset):
+ (WTF::parseDateFromNullTerminatedCharacters):
+ (JSC::getDSTOffset):
+ (JSC::gregorianDateTimeToMS):
+ (JSC::msToGregorianDateTime):
+ (JSC::parseDateFromNullTerminatedCharacters):
+ * wtf/DateMath.h: The imported code for probing and updating the cache.
+
+2009-11-09 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Fixed an edge case that could cause the engine not to notice a timezone
+ change.
+
+ No test because this case would require manual intervention to change
+ the timezone during the test.
+
+ SunSpider reports no change.
+
+ * runtime/DateInstanceCache.h:
+ (JSC::DateInstanceCache::DateInstanceCache):
+ (JSC::DateInstanceCache::reset): Added a helper function for resetting
+ this cache. Also, shrank the cache, since we'll be resetting it often.
+
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::resetDateCache): Include resetting the DateInstanceCache
+ in resetting Date data. (Otherwise, a cache hit could bypass a necessary
+ timezone update check.)
+
+2009-11-09 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Some manual inlining and constant propogation in Date code.
+
+ SunSpider reports a 0.4% speedup on date-*, no overall speedup. Shark
+ says some previously evident stalls are now gone.
+
+ * runtime/DateConstructor.cpp:
+ (JSC::callDate):
+ * runtime/DateConversion.cpp:
+ (JSC::formatTime):
+ (JSC::formatTimeUTC): Split formatTime into UTC and non-UTC variants.
+
+ * runtime/DateConversion.h:
+ * runtime/DateInstance.cpp:
+ (JSC::DateInstance::calculateGregorianDateTime):
+ (JSC::DateInstance::calculateGregorianDateTimeUTC):
+ * runtime/DateInstance.h:
+ (JSC::DateInstance::gregorianDateTime):
+ (JSC::DateInstance::gregorianDateTimeUTC): Split gregorianDateTime into
+ a UTC and non-UTC variant, and split each variant into a fast inline
+ case and a slow out-of-line case.
+
+ * runtime/DatePrototype.cpp:
+ (JSC::formatLocaleDate):
+ (JSC::dateProtoFuncToString):
+ (JSC::dateProtoFuncToUTCString):
+ (JSC::dateProtoFuncToISOString):
+ (JSC::dateProtoFuncToDateString):
+ (JSC::dateProtoFuncToTimeString):
+ (JSC::dateProtoFuncGetFullYear):
+ (JSC::dateProtoFuncGetUTCFullYear):
+ (JSC::dateProtoFuncToGMTString):
+ (JSC::dateProtoFuncGetMonth):
+ (JSC::dateProtoFuncGetUTCMonth):
+ (JSC::dateProtoFuncGetDate):
+ (JSC::dateProtoFuncGetUTCDate):
+ (JSC::dateProtoFuncGetDay):
+ (JSC::dateProtoFuncGetUTCDay):
+ (JSC::dateProtoFuncGetHours):
+ (JSC::dateProtoFuncGetUTCHours):
+ (JSC::dateProtoFuncGetMinutes):
+ (JSC::dateProtoFuncGetUTCMinutes):
+ (JSC::dateProtoFuncGetSeconds):
+ (JSC::dateProtoFuncGetUTCSeconds):
+ (JSC::dateProtoFuncGetTimezoneOffset):
+ (JSC::setNewValueFromTimeArgs):
+ (JSC::setNewValueFromDateArgs):
+ (JSC::dateProtoFuncSetYear):
+ (JSC::dateProtoFuncGetYear): Updated for the gregorianDateTime change above.
+
+2009-11-09 Geoffrey Garen <ggaren@apple.com>
+
+ Build fix: export a new symbol.
+
+ * JavaScriptCore.exp:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2009-11-09 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam "Home Wrecker" Weinig.
+
+ Added a tiny cache for Date parsing.
+
+ SunSpider says 1.2% faster.
+
+ * runtime/DateConversion.cpp:
+ (JSC::parseDate): Try to reuse the last parsed Date, if present.
+
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::resetDateCache):
+ * runtime/JSGlobalData.h: Added storage for last parsed Date. Refactored
+ this code to make resetting the date cache easier.
+
+ * runtime/JSGlobalObject.h:
+ (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope): Updated for
+ refactoring.
+
+ * wtf/DateMath.cpp:
+ (JSC::parseDateFromNullTerminatedCharacters):
+ * wtf/DateMath.h: Changed ExecState to be first parameter, as is the JSC custom.
+
+2009-11-09 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Can cache prototype lookups on uncacheable dictionaries.
+ https://bugs.webkit.org/show_bug.cgi?id=31198
+
+ Replace fromDictionaryTransition with flattenDictionaryObject and
+ flattenDictionaryStructure. This change is necessary as we need to
+ guarantee that our attempt to convert away from a dictionary structure
+ will definitely succeed, and in some cases this requires mutating the
+ object storage itself.
+
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::tryCacheGetByID):
+ * jit/JITStubs.cpp:
+ (JSC::JITThunks::tryCacheGetByID):
+ (JSC::DEFINE_STUB_FUNCTION):
+ * runtime/BatchedTransitionOptimizer.h:
+ (JSC::BatchedTransitionOptimizer::~BatchedTransitionOptimizer):
+ * runtime/JSObject.h:
+ (JSC::JSObject::flattenDictionaryObject):
+ * runtime/Operations.h:
+ (JSC::normalizePrototypeChain):
+ * runtime/Structure.cpp:
+ (JSC::Structure::flattenDictionaryStructure):
+ (JSC::comparePropertyMapEntryIndices):
+ * runtime/Structure.h:
+
+2009-11-09 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Not reviewed, build fix.
+
+ Remove extra character from r50701.
+
+ * JavaScriptCore.pri:
+
+2009-11-09 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Not reviewed, build fix.
+
+ Revert r50695 because it broke QtWebKit (clean builds).
+
+ * JavaScriptCore.pri:
+
+2009-11-09 Norbert Leser <norbert.leser@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ Prepended $$PWD to GENERATED_SOURCES_DIR to avoid potential ambiguities when included from WebCore.pro.
+ Some preprocessors consider this GENERATED_SOURCES_DIR relative to current invoking dir (e.g., ./WebCore),
+ and not the working dir of JavaCriptCore.pri (i.e., ../JavaScriptCore/).
+
+ * JavaScriptCore.pri:
+
+2009-11-09 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ Use explicit parentheses to silence gcc 4.4 -Wparentheses warnings
+ https://bugs.webkit.org/show_bug.cgi?id=31040
+
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::privateExecute):
+
+2009-11-08 David Levin <levin@chromium.org>
+
+ Reviewed by NOBODY (speculative snow leopard and windows build fixes).
+
+ * wtf/DateMath.cpp:
+ (WTF::parseDateFromNullTerminatedCharacters):
+ (JSC::gregorianDateTimeToMS):
+ (JSC::msToGregorianDateTime):
+ (JSC::parseDateFromNullTerminatedCharacters):
+ * wtf/DateMath.h:
+ (JSC::GregorianDateTime::GregorianDateTime):
+
+2009-11-08 David Levin <levin@chromium.org>
+
+ Reviewed by NOBODY (chromium build fix).
+
+ Hopefully, the last build fix.
+
+ Create better separation in DateMath about the JSC
+ and non-JSC portions. Also, only expose the non-JSC
+ version in the exports.
+
+ * JavaScriptCore.exp:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * wtf/DateMath.cpp:
+ (WTF::parseDateFromNullTerminatedCharacters):
+ (JSC::getUTCOffset):
+ (JSC::gregorianDateTimeToMS):
+ (JSC::msToGregorianDateTime):
+ (JSC::parseDateFromNullTerminatedCharacters):
+ * wtf/DateMath.h:
+ (JSC::gmtoffset):
+
+2009-11-08 David Levin <levin@chromium.org>
+
+ Reviewed by NOBODY (chromium build fix).
+
+ For the change in DateMath.
+
+ * config.h:
+ * wtf/DateMath.cpp:
+
+2009-11-06 Geoffrey Garen <ggaren@apple.com>
+
+ Windows build fix: export some symbols.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2009-11-06 Geoffrey Garen <ggaren@apple.com>
+
+ Build fix: updated export file.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2009-11-06 Geoffrey Garen <ggaren@apple.com>
+
+ Build fix: added some #includes.
+
+ * wtf/CurrentTime.h:
+ * wtf/DateMath.h:
+
+2009-11-06 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ https://bugs.webkit.org/show_bug.cgi?id=31197
+ Implemented a timezone cache not based on Mac OS X's notify_check API.
+
+ If the VM calculates the local timezone offset from UTC, it caches the
+ result until the end of the current VM invocation. (We don't want to cache
+ forever, because the user's timezone may change over time.)
+
+ This removes notify_* overhead on Mac, and, more significantly, removes
+ OS time and date call overhead on non-Mac platforms.
+
+ ~8% speedup on Date microbenchmark on Mac. SunSpider reports maybe a tiny
+ speedup on Mac. (Speedup on non-Mac platforms should be even more noticeable.)
+
+ * JavaScriptCore.exp:
+
+ * interpreter/CachedCall.h:
+ (JSC::CachedCall::CachedCall):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::execute):
+ * runtime/JSGlobalObject.h:
+ (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope): Made the
+ DynamicGlobalObjectScope constructor responsible for checking whether a
+ dynamicGlobalObject has already been set. This eliminated some duplicate
+ client code, and allowed me to avoid adding even more duplicate client
+ code. Made DynamicGlobalObjectScope responsible for resetting the
+ local timezone cache upon first entry to the VM.
+
+ * runtime/DateConstructor.cpp:
+ (JSC::constructDate):
+ (JSC::callDate):
+ (JSC::dateParse):
+ (JSC::dateUTC):
+ * runtime/DateConversion.cpp:
+ (JSC::parseDate):
+ * runtime/DateConversion.h:
+ * runtime/DateInstance.cpp:
+ (JSC::DateInstance::gregorianDateTime):
+ * runtime/DateInstance.h:
+ * runtime/DateInstanceCache.h:
+ * runtime/DatePrototype.cpp:
+ (JSC::setNewValueFromTimeArgs):
+ (JSC::setNewValueFromDateArgs):
+ (JSC::dateProtoFuncSetYear):
+ * runtime/InitializeThreading.cpp:
+ (JSC::initializeThreadingOnce):
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData):
+ * runtime/JSGlobalData.h:
+ * wtf/DateMath.cpp:
+ (WTF::getCurrentUTCTime):
+ (WTF::getCurrentUTCTimeWithMicroseconds):
+ (WTF::getLocalTime):
+ (JSC::getUTCOffset): Use the new cache. Also, see below.
+ (JSC::gregorianDateTimeToMS):
+ (JSC::msToGregorianDateTime):
+ (JSC::initializeDates):
+ (JSC::parseDateFromNullTerminatedCharacters): Simplified the way this function
+ accounts for the local timezone offset, to accomodate our new caching API,
+ and a (possibly misguided) caller in WebCore. Also, see below.
+ * wtf/DateMath.h:
+ (JSC::GregorianDateTime::GregorianDateTime): Moved most of the code in
+ DateMath.* into the JSC namespace. The code needed to move so it could
+ naturally interact with ExecState and JSGlobalData to support caching.
+ Logically, it seemed right to move it, too, since this code is not really
+ as low-level as the WTF namespace might imply -- it implements a set of
+ date parsing and conversion quirks that are finely tuned to the JavaScript
+ language. Also removed the Mac OS X notify_* infrastructure.
+
+ * wtf/CurrentTime.h:
+ (WTF::currentTimeMS):
+ (WTF::getLocalTime): Moved the rest of the DateMath code here, and renamed
+ it to make it consistent with WTF's currentTime function.
+
+2009-11-06 Gabor Loki <loki@inf.u-szeged.hu>
+
+ Unreviewed trivial buildfix after r50595.
+
+ Rename the remaining rshiftPtr calls to rshift32
+
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_rshift):
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::emitFastArithImmToInt):
+
+2009-11-06 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Tidy up the shift methods on the macro-assembler interface.
+
+ Currently behaviour of shifts of a magnitude > 0x1f is undefined.
+ Instead defined that all shifts are masked to this range. This makes a lot of
+ practical sense, both since having undefined behaviour is not particularly
+ desirable, and because this behaviour is commonly required (particularly since
+ it is required bt ECMA-262 for shifts).
+
+ Update the ARM assemblers to provide this behaviour. Remove (now) redundant
+ masks from JITArithmetic, and remove rshiftPtr (this was used in case that
+ could be rewritten in a simpler form using rshift32, only optimized JSVALUE32
+ on x86-64, which uses JSVALUE64!)
+
+ * assembler/MacroAssembler.h:
+ * assembler/MacroAssemblerARM.h:
+ (JSC::MacroAssemblerARM::lshift32):
+ (JSC::MacroAssemblerARM::rshift32):
+ * assembler/MacroAssemblerARMv7.h:
+ (JSC::MacroAssemblerARMv7::lshift32):
+ (JSC::MacroAssemblerARMv7::rshift32):
+ * assembler/MacroAssemblerX86_64.h:
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_lshift):
+ (JSC::JIT::emit_op_rshift):
+
+2009-11-05 Gavin Barraclough <barraclough@apple.com>
+
+ Rubber Stamped by Oliver Hunt.
+
+ Remove a magic number (1) from the JIT, instead compute the value with OBJECT_OFFSET.
+
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::emitPutJITStubArg):
+ (JSC::JIT::emitPutJITStubArgConstant):
+ (JSC::JIT::emitGetJITStubArg):
+ (JSC::JIT::emitPutJITStubArgFromVirtualRegister):
+ * jit/JITStubCall.h:
+ (JSC::JITStubCall::JITStubCall):
+ (JSC::JITStubCall::getArgument):
+ * jit/JITStubs.h:
+
+2009-11-05 Zoltan Herczeg <zherczeg@inf.u-szeged.hu>
+
+ Reviewed by Gavin Barraclough.
+
+ https://bugs.webkit.org/show_bug.cgi?id=31159
+ Fix branchDouble behaviour on ARM THUMB2 JIT.
+
+ The x86 branchDouble behaviour is reworked, and all JIT
+ ports should follow the x86 port. See bug 31104 and 31151
+
+ This patch contains a fix for the traditional ARM port
+
+ * assembler/ARMAssembler.h:
+ (JSC::ARMAssembler::):
+ (JSC::ARMAssembler::fmrs_r):
+ (JSC::ARMAssembler::ftosid_r):
+ * assembler/MacroAssemblerARM.h:
+ (JSC::MacroAssemblerARM::):
+ (JSC::MacroAssemblerARM::branchDouble):
+ (JSC::MacroAssemblerARM::branchConvertDoubleToInt32):
+
+2009-11-05 Chris Jerdonek <chris.jerdonek@gmail.com>
+
+ Reviewed by Eric Seidel.
+
+ Removed the "this is part of the KDE project" comments from
+ all *.h, *.cpp, *.idl, and *.pm files.
+
+ https://bugs.webkit.org/show_bug.cgi?id=31167
+
+ The maintenance and architecture page in the project wiki lists
+ this as a task.
+
+ This change includes no changes or additions to test cases
+ since the change affects only comments.
+
+ * wtf/wince/FastMallocWince.h:
+
+2009-11-05 Gabor Loki <loki@inf.u-szeged.hu>
+
+ Reviewed by Gavin Barraclough.
+
+ Use ARMv7 specific encoding for immediate constants on ARMv7 target
+ https://bugs.webkit.org/show_bug.cgi?id=31060
+
+ * assembler/ARMAssembler.cpp:
+ (JSC::ARMAssembler::getOp2): Use INVALID_IMM
+ (JSC::ARMAssembler::getImm): Use encodeComplexImm for complex immediate
+ (JSC::ARMAssembler::moveImm): Ditto.
+ (JSC::ARMAssembler::encodeComplexImm): Encode a constant by one or two
+ instructions or a PC relative load.
+ * assembler/ARMAssembler.h: Use INVALID_IMM if a constant cannot be
+ encoded as an immediate constant.
+ (JSC::ARMAssembler::):
+ (JSC::ARMAssembler::movw_r): 16-bit immediate load
+ (JSC::ARMAssembler::movt_r): High halfword 16-bit immediate load
+ (JSC::ARMAssembler::getImm16Op2): Encode immediate constant for
+ movw_r and mowt_r
+
+2009-11-04 Mark Mentovai <mark@chromium.org>
+
+ Reviewed by Mark Rowe.
+
+ Provide TARGETING_TIGER and TARGETING_LEOPARD as analogues to
+ BUILDING_ON_TIGER and BUILDING_ON_LEOPARD. The TARGETING_ macros
+ consider the deployment target; the BUILDING_ON_ macros consider the
+ headers being built against.
+
+ * wtf/Platform.h:
+
+2009-11-04 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ https://bugs.webkit.org/show_bug.cgi?id=31151
+ Fix branchDouble behaviour on ARM THUMB2 JIT.
+
+ The ARMv7 JIT is currently using ARMv7Assembler::ConditionEQ to branch
+ for DoubleEqualOrUnordered, however this is incorrect - ConditionEQ won't
+ branch on unordered operands. Similarly, DoubleLessThanOrUnordered &
+ DoubleLessThanOrEqualOrUnordered use ARMv7Assembler::ConditionLO &
+ ARMv7Assembler::ConditionLS, whereas they should be using
+ ARMv7Assembler::ConditionLT & ARMv7Assembler::ConditionLE.
+
+ Fix these, and fill out the missing DoubleConditions.
+
+ * assembler/MacroAssemblerARMv7.h:
+ (JSC::MacroAssemblerARMv7::):
+ (JSC::MacroAssemblerARMv7::branchDouble):
+
+2009-11-04 Gavin Barraclough <barraclough@apple.com>
+
+ Rubber Stamped by Oliver Hunt.
+
+ Enable native call optimizations on ARMv7. (Existing ARM_TRADITIONAL
+ implementation was generic, worked perfectly, just needed turning on).
+
+ * jit/JITOpcodes.cpp:
+ * wtf/Platform.h:
+
+2009-11-04 Gavin Barraclough <barraclough@apple.com>
+
+ Rubber Stamped by Mark Rowe, Oliver Hunt, and Sam Weinig.
+
+ Add a missing assert to the ARMv7 JIT.
+
+ * assembler/ARMv7Assembler.h:
+ (JSC::ARMThumbImmediate::ARMThumbImmediate):
+
+2009-11-04 Mark Rowe <mrowe@apple.com>
+
+ Rubber-stamped by Oliver Hunt.
+
+ Remove bogus op_ prefix on dumped version of three opcodes.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dump):
+
+2009-11-04 Mark Rowe <mrowe@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Fix dumping of constants in bytecode so that they aren't printed as large positive register numbers.
+
+ We do this by having the registerName function return information about the constant if the register
+ number corresponds to a constant. This requires that registerName, and several functions that call it,
+ be converted to member functions of CodeBlock so that the constant value can be retrieved. The
+ ExecState also needs to be threaded down through these functions so that it can be passed on to
+ constantName when needed.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::constantName):
+ (JSC::CodeBlock::registerName):
+ (JSC::CodeBlock::printUnaryOp):
+ (JSC::CodeBlock::printBinaryOp):
+ (JSC::CodeBlock::printConditionalJump):
+ (JSC::CodeBlock::printGetByIdOp):
+ (JSC::CodeBlock::printPutByIdOp):
+ (JSC::CodeBlock::dump):
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::isConstantRegisterIndex):
+
+2009-11-04 Pavel Heimlich <tropikhajma@gmail.com>
+
+ Reviewed by Alexey Proskuryakov.
+
+ https://bugs.webkit.org/show_bug.cgi?id=30647
+ Solaris build failure due to strnstr.
+
+ * wtf/StringExtras.h: Enable strnstr on Solaris, too.
+
+2009-11-04 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ https://bugs.webkit.org/show_bug.cgi?id=31104
+ Refactor x86-specific behaviour out of the JIT.
+
+ - Add explicit double branch conditions for ordered and unordered comparisons (presently the brehaviour is a mix).
+ - Refactor double to int conversion out into the MacroAssembler.
+ - Remove broken double to int conversion for !JSVALUE32_64 builds - this code was broken and slowing us down, fixing it showed it not to be an improvement.
+ - Remove exclusion of double to int conversion from (1 % X) cases in JSVALUE32_64 builds - if this was of benefit this is no longer the case; simplify.
+
+ * assembler/MacroAssemblerARM.h:
+ (JSC::MacroAssemblerARM::):
+ * assembler/MacroAssemblerARMv7.h:
+ (JSC::MacroAssemblerARMv7::):
+ * assembler/MacroAssemblerX86Common.h:
+ (JSC::MacroAssemblerX86Common::):
+ (JSC::MacroAssemblerX86Common::convertInt32ToDouble):
+ (JSC::MacroAssemblerX86Common::branchDouble):
+ (JSC::MacroAssemblerX86Common::branchConvertDoubleToInt32):
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emitBinaryDoubleOp):
+ (JSC::JIT::emit_op_div):
+ (JSC::JIT::emitSlow_op_jnless):
+ (JSC::JIT::emitSlow_op_jnlesseq):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_jfalse):
+
+2009-11-04 Mark Mentovai <mark@chromium.org>
+
+ Reviewed by Eric Seidel.
+
+ Remove BUILDING_ON_LEOPARD from JavaScriptCore.gyp. This is supposed
+ to be set as needed only in wtf/Platform.h.
+
+ * JavaScriptCore.gyp/JavaScriptCore.gyp:
+
+2009-11-02 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ REGRESSION (r48573): JSC may incorrectly cache chain lookups with a dictionary at the head of the chain
+ https://bugs.webkit.org/show_bug.cgi?id=31045
+
+ Add guards to prevent caching of prototype chain lookups with dictionaries at the
+ head of the chain. Also add a few tighter assertions to cached prototype lookups
+ to catch this in future.
+
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::tryCacheGetByID):
+ (JSC::Interpreter::privateExecute):
+ * jit/JITStubs.cpp:
+ (JSC::JITThunks::tryCacheGetByID):
+
+2009-11-02 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Darin Adler.
+
+ PLATFORM(CF) should be set when building for Qt on Darwin
+ https://bugs.webkit.org/show_bug.cgi?id=23671
+
+ * wtf/Platform.h: Turn on CF support if both QT and DARWIN
+ platforms are defined.
+
+2009-11-02 Dmitry Titov <dimich@chromium.org>
+
+ Reviewed by David Levin.
+
+ Remove threadsafe refcounting from tasks used with WTF::MessageQueue.
+ https://bugs.webkit.org/show_bug.cgi?id=30612
+
+ * wtf/MessageQueue.h:
+ (WTF::MessageQueue::alwaysTruePredicate):
+ (WTF::MessageQueue::~MessageQueue):
+ (WTF::MessageQueue::append):
+ (WTF::MessageQueue::appendAndCheckEmpty):
+ (WTF::MessageQueue::prepend):
+ (WTF::MessageQueue::waitForMessage):
+ (WTF::MessageQueue::waitForMessageFilteredWithTimeout):
+ (WTF::MessageQueue::tryGetMessage):
+ (WTF::MessageQueue::removeIf):
+ The MessageQueue is changed to act as a queue of OwnPtr<DataType>. It takes ownership
+ of posted tasks and passes it to the new owner (in another thread) when the task is fetched.
+ All methods have arguments of type PassOwnPtr<DataType> and return the same type.
+
+ * wtf/Threading.cpp:
+ (WTF::createThread):
+ Superficial change to trigger rebuild of JSC project on Windows,
+ workaround for https://bugs.webkit.org/show_bug.cgi?id=30890
+
+2009-10-30 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Fixed failing layout test: restore a special case I accidentally deleted.
+
+ * runtime/DatePrototype.cpp:
+ (JSC::setNewValueFromDateArgs): In the case of applying a change to a date
+ that is NaN, reset the date to 0 *and* then apply the change; don't just
+ reset the date to 0.
+
+2009-10-30 Geoffrey Garen <ggaren@apple.com>
+
+ Windows build fix: update for object-to-pointer change.
+
+ * runtime/DatePrototype.cpp:
+ (JSC::formatLocaleDate):
+
+2009-10-29 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=30942
+ Use pointers instead of copies to pass GregorianDateTime objects around.
+
+ SunSpider reports a shocking 4.5% speedup on date-format-xparb, and 1.3%
+ speedup on date-format-tofte.
+
+ * runtime/DateInstance.cpp:
+ (JSC::DateInstance::gregorianDateTime):
+ * runtime/DateInstance.h:
+ * runtime/DatePrototype.cpp:
+ (JSC::formatLocaleDate):
+ (JSC::dateProtoFuncToString):
+ (JSC::dateProtoFuncToUTCString):
+ (JSC::dateProtoFuncToISOString):
+ (JSC::dateProtoFuncToDateString):
+ (JSC::dateProtoFuncToTimeString):
+ (JSC::dateProtoFuncGetFullYear):
+ (JSC::dateProtoFuncGetUTCFullYear):
+ (JSC::dateProtoFuncToGMTString):
+ (JSC::dateProtoFuncGetMonth):
+ (JSC::dateProtoFuncGetUTCMonth):
+ (JSC::dateProtoFuncGetDate):
+ (JSC::dateProtoFuncGetUTCDate):
+ (JSC::dateProtoFuncGetDay):
+ (JSC::dateProtoFuncGetUTCDay):
+ (JSC::dateProtoFuncGetHours):
+ (JSC::dateProtoFuncGetUTCHours):
+ (JSC::dateProtoFuncGetMinutes):
+ (JSC::dateProtoFuncGetUTCMinutes):
+ (JSC::dateProtoFuncGetSeconds):
+ (JSC::dateProtoFuncGetUTCSeconds):
+ (JSC::dateProtoFuncGetTimezoneOffset):
+ (JSC::setNewValueFromTimeArgs):
+ (JSC::setNewValueFromDateArgs):
+ (JSC::dateProtoFuncSetYear):
+ (JSC::dateProtoFuncGetYear): Renamed getGregorianDateTime to gregorianDateTime,
+ since it no longer has an out parameter. Uses 0 to indicate invalid dates.
+
+2009-10-30 Zoltan Horvath <zoltan@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ Allow custom memory allocation control for JavaScriptCore's ListHashSet
+ https://bugs.webkit.org/show_bug.cgi?id=30853
+
+ Inherits ListHashSet class from FastAllocBase because it is
+ instantiated by 'new' in WebCore/rendering/RenderBlock.cpp:1813.
+
+ * wtf/ListHashSet.h:
+
+2009-10-30 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Regression: crash enumerating properties of an object with getters or setters
+ https://bugs.webkit.org/show_bug.cgi?id=30948
+
+ Add a guard to prevent us trying to cache property enumeration on
+ objects with getters or setters.
+
+ * runtime/JSPropertyNameIterator.cpp:
+ (JSC::JSPropertyNameIterator::create):
+
+2009-10-30 Roland Steiner <rolandsteiner@chromium.org>
+
+ Reviewed by Eric Seidel.
+
+ Remove ENABLE_RUBY guards as discussed with Dave Hyatt and Maciej Stachowiak.
+
+ Bug 28420 - Implement HTML5 <ruby> rendering
+ (https://bugs.webkit.org/show_bug.cgi?id=28420)
+
+ No new tests (no functional change).
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2009-10-29 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ REGRESSION (r50218-r50262): E*TRADE accounts page is missing content
+ https://bugs.webkit.org/show_bug.cgi?id=30947
+ <rdar://problem/7348833>
+
+ The logic for flagging that a structure has non-enumerable properties
+ was in addPropertyWithoutTransition, rather than in the core Structure::put
+ method. Despite this I was unable to produce a testcase that caused
+ the failure that etrade was experiencing, but the new assertion in
+ getEnumerablePropertyNames triggers on numerous layout tests without
+ the fix, so in effecti all for..in enumeration in any test ends up
+ doing the required consistency check.
+
+ * runtime/Structure.cpp:
+ (JSC::Structure::addPropertyWithoutTransition):
+ (JSC::Structure::put):
+ (JSC::Structure::getEnumerablePropertyNames):
+ (JSC::Structure::checkConsistency):
+
+2009-10-29 Gabor Loki <loki@inf.u-szeged.hu>
+
+ Reviewed by Gavin Barraclough.
+
+ Add cacheFlush support for Thumb-2 on Linux
+ https://bugs.webkit.org/show_bug.cgi?id=30865
+
+ * jit/ExecutableAllocator.h:
+ (JSC::ExecutableAllocator::cacheFlush):
+
+2009-10-28 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ JSC JIT on ARMv7 cannot link jumps >16Mb range
+ https://bugs.webkit.org/show_bug.cgi?id=30891
+
+ Start planing all relative jumps as move-32-bit-immediate-to-register-BX.
+ In the cases where the jump would fall within a relative jump range, use a relative jump.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * assembler/ARMv7Assembler.h:
+ (JSC::ARMv7Assembler::~ARMv7Assembler):
+ (JSC::ARMv7Assembler::LinkRecord::LinkRecord):
+ (JSC::ARMv7Assembler::):
+ (JSC::ARMv7Assembler::executableCopy):
+ (JSC::ARMv7Assembler::linkJump):
+ (JSC::ARMv7Assembler::relinkJump):
+ (JSC::ARMv7Assembler::setInt32):
+ (JSC::ARMv7Assembler::isB):
+ (JSC::ARMv7Assembler::isBX):
+ (JSC::ARMv7Assembler::isMOV_imm_T3):
+ (JSC::ARMv7Assembler::isMOVT):
+ (JSC::ARMv7Assembler::isNOP_T1):
+ (JSC::ARMv7Assembler::isNOP_T2):
+ (JSC::ARMv7Assembler::linkJumpAbsolute):
+ (JSC::ARMv7Assembler::twoWordOp5i6Imm4Reg4EncodedImmFirst):
+ (JSC::ARMv7Assembler::twoWordOp5i6Imm4Reg4EncodedImmSecond):
+ (JSC::ARMv7Assembler::ARMInstructionFormatter::twoWordOp5i6Imm4Reg4EncodedImm):
+ * assembler/MacroAssemblerARMv7.h:
+ (JSC::MacroAssemblerARMv7::makeJump):
+ (JSC::MacroAssemblerARMv7::makeBranch):
+ * jit/JIT.h:
+ * wtf/Platform.h:
+
+2009-10-28 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Improve for..in enumeration performance
+ https://bugs.webkit.org/show_bug.cgi?id=30887
+
+ Improve indexing of an object with a for..in iterator by
+ identifying cases where get_by_val is being used with a iterator
+ as the subscript and replace it with a new get_by_pname
+ bytecode. get_by_pname then optimizes lookups that directly access
+ the base object.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dump):
+ * bytecode/Opcode.h:
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::emitGetByVal):
+ * bytecompiler/BytecodeGenerator.h:
+ (JSC::BytecodeGenerator::pushOptimisedForIn):
+ (JSC::BytecodeGenerator::popOptimisedForIn):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::privateExecute):
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileMainPass):
+ (JSC::JIT::privateCompileSlowCases):
+ * jit/JIT.h:
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::compileGetDirectOffset):
+ (JSC::JIT::emit_op_get_by_pname):
+ (JSC::JIT::emitSlow_op_get_by_pname):
+ * parser/Nodes.cpp:
+ (JSC::ForInNode::emitBytecode):
+ * runtime/JSObject.h:
+ * runtime/JSPropertyNameIterator.cpp:
+ (JSC::JSPropertyNameIterator::create):
+ * runtime/JSPropertyNameIterator.h:
+ (JSC::JSPropertyNameIterator::getOffset):
+ (JSC::JSPropertyNameIterator::JSPropertyNameIterator):
+ * runtime/JSValue.h:
+ (JSC::JSValue::):
+ * runtime/Structure.cpp:
+ (JSC::Structure::addPropertyTransition):
+ (JSC::Structure::changePrototypeTransition):
+ (JSC::Structure::despecifyFunctionTransition):
+ (JSC::Structure::addAnonymousSlotsTransition):
+ (JSC::Structure::getterSetterTransition):
+ (JSC::Structure::toDictionaryTransition):
+ (JSC::Structure::addPropertyWithoutTransition):
+ Track the existence (or not) of non-enumerable properties.
+ * runtime/Structure.h:
+ (JSC::Structure::propertyStorageCapacity):
+ (JSC::Structure::propertyStorageSize):
+ (JSC::Structure::hasNonEnumerableProperties):
+ (JSC::Structure::hasAnonymousSlots):
+
+2009-10-28 Dmitry Titov <dimich@chromium.org>
+
+ Not reviewed, attemp to fix Windows build.
+
+ Touch the cpp file to cause recompile.
+
+ * wtf/Threading.cpp:
+ (WTF::threadEntryPoint):
+
+2009-10-28 Dmitry Titov <dimich@chromium.org>
+
+ Reviewed by David Levin.
+
+ https://bugs.webkit.org/show_bug.cgi?id=30805
+ Add MessageQueue::removeIf(Predicate&) to remove certain tasks without pulling them from the queue.
+ Existing Database tests cover this since Database removes tasks when it is stopped.
+
+ * wtf/MessageQueue.h:
+ (WTF::::removeIf):
+
+2009-10-28 Afonso R. Costa Jr. <afonso.costa@openbossa.org>
+
+ Reviewed by Oliver Hunt.
+
+ [Qt] Enable YARR when YARR_JIT is enabled
+ https://bugs.webkit.org/show_bug.cgi?id=30730
+
+ When enabling or disabling JIT using JAVASCRIPTCORE_JIT, the ENABLE_YARR should
+ be toggled also.
+
+ * JavaScriptCore.pri:
+
+2009-10-24 Martin Robinson <martin.james.robinson@gmail.com>
+
+ Reviewed by Oliver Hunt.
+
+ Fix strict aliasing warning by switching reinterpret_cast to bitwise_cast.
+
+ strict-aliasing warnings in JSFunction.h
+ https://bugs.webkit.org/show_bug.cgi?id=27869
+
+ * runtime/JSFunction.h:
+ (JSC::JSFunction::nativeFunction):
+ (JSC::JSFunction::scopeChain):
+ (JSC::JSFunction::setScopeChain):
+ (JSC::JSFunction::setNativeFunction):
+
+2009-10-28 Jan-Arve Sæther <jan-arve.saether@nokia.com>
+
+ Reviewed by Tor Arne Vestbø.
+
+ Build-fix for 64-bit Windows
+
+ * wtf/Platform.h: Make sure to use WTF_USE_JSVALUE64
+
+2009-10-28 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (build fix!).
+
+ * jit/JIT.h:
+
+2009-10-26 Holger Hans Peter Freyther <zecke@selfish.org>
+
+ Rubber-stamped by Darin Adler.
+
+ Export fastMalloc, fastCalloc, fastRealloc and fastFree on GCC/Unix
+ https://bugs.webkit.org/show_bug.cgi?id=30769
+
+ When using -fvisibility=hidden to hide all internal symbols by default
+ the malloc symbols will be hidden as well. For memory instrumentation
+ it is needed to provide an instrumented version of these symbols and
+ override the normal routines and by changing the visibility back to
+ default this becomes possible.
+
+ The only other solution would be to use system malloc instead of the
+ TCmalloc implementation but this will not allow to analyze memory
+ behavior with the default allocator.
+
+ * wtf/FastMalloc.h: Define WTF_FAST_MALLOC_EXPORT for GCC and !darwin
+
+2009-10-27 Gavin Barraclough <barraclough@apple.com>
+
+ Rubber Stamped by Samuel Q. Weinig.
+
+ Make the asserts protecting the offsets in the JIT more descriptive.
+
+ * jit/JIT.h:
+ * jit/JITCall.cpp:
+ (JSC::JIT::compileOpCall):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emit_op_method_check):
+ (JSC::JIT::compileGetByIdHotPath):
+ (JSC::JIT::compileGetByIdSlowCase):
+ (JSC::JIT::emit_op_put_by_id):
+
+2009-10-27 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ A little bit of refactoring in the date code.
+
+ * JavaScriptCore.exp: Don't export this unused symbol.
+
+ * runtime/DateConstructor.cpp:
+ (JSC::constructDate):
+
+ * runtime/DateInstance.cpp:
+ (JSC::DateInstance::DateInstance):
+ * runtime/DateInstance.h: Removed some unused functions. Changed the default
+ constructor to ensure that a DateInstance is always initialized.
+
+ * runtime/DatePrototype.cpp:
+ (JSC::DatePrototype::DatePrototype): Pass an initializer to our constructor,
+ since it now requires one.
+
+ * wtf/DateMath.cpp:
+ (WTF::msToGregorianDateTime): Only compute our offset from UTC if our
+ output will require it. Otherwise, our offset is 0.
+
+2009-10-27 Geoffrey Garen <ggaren@apple.com>
+
+ Build fix: Mark DateInstaceCache.h private, so other frameworks can see it.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2009-10-27 Geoffrey Garen <ggaren@apple.com>
+
+ Build fix: re-readded this file.
+
+ * runtime/DateInstanceCache.h: Added.
+ (JSC::DateInstanceData::create):
+ (JSC::DateInstanceData::DateInstanceData):
+ (JSC::DateInstanceCache::DateInstanceCache):
+ (JSC::DateInstanceCache::add):
+ (JSC::DateInstanceCache::lookup):
+
+2009-10-27 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Darin Adler and Oliver Hunt.
+
+ https://bugs.webkit.org/show_bug.cgi?id=30800
+ Cache recently computed date data.
+
+ SunSpider reports a ~0.5% speedup, mostly from date-format-tofte.js.
+
+ * GNUmakefile.am:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj: Added new file.
+
+ * runtime/DateInstance.cpp:
+ (JSC::DateInstance::DateInstance):
+ (JSC::DateInstance::getGregorianDateTime): Use the shared cache.
+
+ * runtime/DateInstance.h: Renamed m_cache to m_data, to avoid the confusion
+ of a "cache cache".
+
+ * runtime/DatePrototype.cpp:
+ (JSC::formatLocaleDate):
+ (JSC::dateProtoFuncToString):
+ (JSC::dateProtoFuncToUTCString):
+ (JSC::dateProtoFuncToISOString):
+ (JSC::dateProtoFuncToDateString):
+ (JSC::dateProtoFuncToTimeString):
+ (JSC::dateProtoFuncGetFullYear):
+ (JSC::dateProtoFuncGetUTCFullYear):
+ (JSC::dateProtoFuncToGMTString):
+ (JSC::dateProtoFuncGetMonth):
+ (JSC::dateProtoFuncGetUTCMonth):
+ (JSC::dateProtoFuncGetDate):
+ (JSC::dateProtoFuncGetUTCDate):
+ (JSC::dateProtoFuncGetDay):
+ (JSC::dateProtoFuncGetUTCDay):
+ (JSC::dateProtoFuncGetHours):
+ (JSC::dateProtoFuncGetUTCHours):
+ (JSC::dateProtoFuncGetMinutes):
+ (JSC::dateProtoFuncGetUTCMinutes):
+ (JSC::dateProtoFuncGetSeconds):
+ (JSC::dateProtoFuncGetUTCSeconds):
+ (JSC::dateProtoFuncGetTimezoneOffset):
+ (JSC::setNewValueFromTimeArgs):
+ (JSC::setNewValueFromDateArgs):
+ (JSC::dateProtoFuncSetYear):
+ (JSC::dateProtoFuncGetYear): Pass an ExecState to these functions, so they
+ can access the DateInstanceCache.
+
+ * runtime/JSGlobalData.h: Keep a DateInstanceCache.
+
+2009-10-27 James Robinson <jamesr@chromium.org>
+
+ Reviewed by Darin Fisher.
+
+ Ensures that JavaScriptCore/wtf/CurrentTime.cpp is not built in PLATFORM(CHROMIUM) builds.
+
+ Chromium uses a different method to calculate the current time than is used in
+ JavaScriptCore/wtf/CurrentTime.cpp. This can lead to time skew when calls to currentTime() and Chromium's time
+ function are mixed. In particular, timers can get scheduled in the past which leads to 100% CPU use.
+ See http://code.google.com/p/chromium/issues/detail?id=25892 for an example.
+
+ https://bugs.webkit.org/show_bug.cgi?id=30833
+
+ * JavaScriptCore.gyp/JavaScriptCore.gyp:
+ * wtf/CurrentTime.cpp:
+
+2009-10-27 Peter Varga <pvarga@inf.u-szeged.hu>
+
+ Rubber-stamped by Tor Arne Vestbø.
+
+ Fix typo in RegexInterpreter.cpp and RegexJIT.cpp alterantive to
+ alternative.
+
+ * yarr/RegexInterpreter.cpp:
+ (JSC::Yarr::ByteCompiler::alternativeBodyDisjunction):
+ (JSC::Yarr::ByteCompiler::alternativeDisjunction):
+ (JSC::Yarr::ByteCompiler::emitDisjunction):
+ * yarr/RegexJIT.cpp:
+ (JSC::Yarr::RegexGenerator::generateDisjunction):
+
+2009-10-26 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Darin Adler.
+
+ Make .rc files compile on Windows without depending on MFC headers
+ https://bugs.webkit.org/show_bug.cgi?id=30750
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.rc: Use
+ winresrc.h because it exists even when MFC is not installed, and is
+ all that's needed here.
+
+2009-10-26 Gabor Loki <loki@inf.u-szeged.hu>
+
+ Reviewed by Gavin Barraclough.
+
+ The thunkReturnAddress is on JITStackFrame on ARM JIT as well
+ https://bugs.webkit.org/show_bug.cgi?id=30782
+
+ Move the thunkReturnAddress from top of the stack into the JITStackFrame
+ structure. This is a requirement for JSValue32_64 support on ARM.
+
+ * assembler/MacroAssemblerARM.h:
+ (JSC::MacroAssemblerARM::ret): Return with link register
+ (JSC::MacroAssemblerARM::prepareCall): Store the return address in link register
+ * jit/JIT.h: Remove unused ctiReturnRegister
+ * jit/JITInlineMethods.h: Same as ARMv7
+ (JSC::JIT::restoreArgumentReference): Ditto.
+ (JSC::JIT::restoreArgumentReferenceForTrampoline): Ditto.
+ * jit/JITOpcodes.cpp: Remove ctiReturnRegister related instruction
+ * jit/JITStubs.cpp: Store thunkReturnAddress on JITStackFrame. Use
+ small trampoline functions which handle return addresses for each
+ CTI_STUB_FUNCTION.
+ * jit/JITStubs.h: Store thunkReturnAddress on JITStackFrame
+ (JSC::JITStackFrame::returnAddressSlot): Return with the address of thunkReturnAddress
+ * yarr/RegexJIT.cpp:
+ (JSC::Yarr::RegexGenerator::generateEnter): Remove the unnecessary instruction
+
+2009-10-26 Steve Block <steveblock@google.com>
+
+ Reviewed by Darin Adler.
+
+ Adds ability to disable ReadWriteLock on platforms (eg Android) that use pthreads but do not support pthread_rwlock.
+ https://bugs.webkit.org/show_bug.cgi?id=30713
+
+ * wtf/Platform.h: Modified. Defines HAVE_PTHREAD_RWLOCK for all platforms currently using pthreads.
+ * wtf/Threading.h: Modified. Use pthread_rwlock_t only when HAVE_PTHREAD_RWLOCK is defined.
+ * wtf/ThreadingPthreads.cpp: Modified. Build ReadWriteLock methods only when HAVE_PTHREAD_RWLOCK is defined.
+
+2009-10-24 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Holger Freyther.
+
+ [Qt] [Symbian] Set the capability and memory required to run QtWebKit for Symbian
+ https://bugs.webkit.org/show_bug.cgi?id=30476
+
+ Assign ReadUserData WriteUserData NetworkServices Symbian capabilities
+ to jsc.exe.
+
+ * jsc.pro:
+
+2009-10-23 Steve Block <steveblock@google.com>
+
+ Reviewed by Dmitry Titov.
+
+ Fixes a leak in createThreadInternal on Android.
+ https://bugs.webkit.org/show_bug.cgi?id=30698
+
+ * wtf/ThreadingPthreads.cpp: Modified.
+ (WTF::createThreadInternal): Avoid leaking a ThreadData object on failure.
+
+2009-10-22 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Alexey Proskuryakov.
+
+ Fixed ASSERT when opening Safari's Caches window while the Web Inspector
+ is open.
+
+ * runtime/Collector.cpp:
+ (JSC::typeName): Added two new types to the type name list in the Collector.
+ These types have been around for a while, but nobody remembered to consider them here.
+
+ * runtime/JSCell.h:
+ (JSC::JSCell::isPropertyNameIterator):
+ * runtime/JSPropertyNameIterator.h:
+ (JSC::JSPropertyNameIterator::isPropertyNameIterator): Give the Collector
+ a way to tell if a cell is a JSPropertyNameIterator.
+
+2009-10-22 Steve Falkenburg <sfalken@apple.com>
+
+ Reviewed by Jon Honeycutt.
+
+ https://bugs.webkit.org/show_bug.cgi?id=30686
+ Remove debug-specific def file.
+ Only Debug_All target uses JavaScriptCore_debug.dll naming, and since
+ that target is only used internally, maintaining two files just to
+ suppress a single link warning isn't worthwhile.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: Removed.
+
+2009-10-21 Jon Honeycutt <jhoneycutt@apple.com>
+
+ <rdar://problem/7270320> Screenshots of off-screen plug-ins are blank
+ <rdar://problem/7270314> After halting a transparent PluginView on
+ Windows, the transparency is applied twice
+
+ Reviewed by Dan Bernstein.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ Export WTF::deleteOwnedPtr(HDC).
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+ Ditto.
+
+2009-10-20 Geoffrey Garen <ggaren@apple.com>
+
+ Windows build fix: updated variable name.
+
+ * runtime/DatePrototype.cpp:
+ (JSC::formatLocaleDate):
+
+2009-10-20 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Mark Rowe.
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_next_pname): Slightly tweaked this #ifdef to match the
+ size of a JSValue because m_jsStrings is an array of JSValues.
+
+2009-10-20 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Mark Rowe.
+
+ Fixed a 64-bit regression caused by the fix for
+ https://bugs.webkit.org/show_bug.cgi?id=30570.
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_next_pname): Use TimesEight stepping on 64-bit, since
+ 64-bit pointers are eight bytes long.
+
+2009-10-20 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Refactored DateInstance::msToGregorianDateTime so that a DateInstance's
+ caller doesn't need to supply the DateInstance's own internal value to
+ the DateInstance.
+
+ * runtime/DateInstance.cpp:
+ (JSC::DateInstance::getGregorianDateTime): Renamed from "msToGregorianDateTime".
+
+ * runtime/DateInstance.h:
+ * runtime/DatePrototype.cpp:
+ (JSC::formatLocaleDate):
+ (JSC::dateProtoFuncToString):
+ (JSC::dateProtoFuncToUTCString):
+ (JSC::dateProtoFuncToISOString):
+ (JSC::dateProtoFuncToDateString):
+ (JSC::dateProtoFuncToTimeString):
+ (JSC::dateProtoFuncToLocaleString):
+ (JSC::dateProtoFuncToLocaleDateString):
+ (JSC::dateProtoFuncToLocaleTimeString):
+ (JSC::dateProtoFuncGetTime):
+ (JSC::dateProtoFuncGetFullYear):
+ (JSC::dateProtoFuncGetUTCFullYear):
+ (JSC::dateProtoFuncToGMTString):
+ (JSC::dateProtoFuncGetMonth):
+ (JSC::dateProtoFuncGetUTCMonth):
+ (JSC::dateProtoFuncGetDate):
+ (JSC::dateProtoFuncGetUTCDate):
+ (JSC::dateProtoFuncGetDay):
+ (JSC::dateProtoFuncGetUTCDay):
+ (JSC::dateProtoFuncGetHours):
+ (JSC::dateProtoFuncGetUTCHours):
+ (JSC::dateProtoFuncGetMinutes):
+ (JSC::dateProtoFuncGetUTCMinutes):
+ (JSC::dateProtoFuncGetSeconds):
+ (JSC::dateProtoFuncGetUTCSeconds):
+ (JSC::dateProtoFuncGetTimezoneOffset):
+ (JSC::setNewValueFromTimeArgs):
+ (JSC::setNewValueFromDateArgs):
+ (JSC::dateProtoFuncSetYear):
+ (JSC::dateProtoFuncGetYear): Also renamed "utc" to "outputIsUTC", for clarity.
+
+2009-10-20 Gabor Loki <loki@inf.u-szeged.hu>
+
+ Reviewed by Geoffrey Garen.
+
+ The op_next_pname should use 4 bytes addressing mode in case of JSValue32
+ https://bugs.webkit.org/show_bug.cgi?id=30570
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_next_pname):
+
+2009-10-20 Gabor Loki <loki@inf.u-szeged.hu>
+
+ Reviewed by Oliver Hunt.
+
+ Move OverridesMarkChildren flag from DatePrototype to its parent class
+ https://bugs.webkit.org/show_bug.cgi?id=30372
+
+ * runtime/DateInstance.h:
+ (JSC::DateInstance::createStructure):
+ * runtime/DatePrototype.h:
+
+2009-10-19 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Tightened up some put_by_id_transition code generation.
+ https://bugs.webkit.org/show_bug.cgi?id=30539
+
+ * jit/JIT.h:
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::testPrototype):
+ (JSC::JIT::privateCompilePutByIdTransition): No need to do object type
+ checks or read Structures and prototypes from objects: they're all known
+ constants at compile time.
+
+2009-10-19 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Added a private API for getting a global context from a context, for
+ clients who want to preserve a context for a later callback.
+
+ * API/APICast.h:
+ (toGlobalRef): Added an ASSERT, since this function is used more often
+ than before.
+
+ * API/JSContextRef.cpp:
+ * API/JSContextRefPrivate.h: Added. The new API.
+
+ * API/tests/testapi.c:
+ (print_callAsFunction):
+ (main): Test the new API.
+
+ * JavaScriptCore.exp:
+ * JavaScriptCore.xcodeproj/project.pbxproj: Build and export the new API.
+
+2009-10-17 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Tightened up some instanceof code generation.
+ https://bugs.webkit.org/show_bug.cgi?id=30488
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_instanceof):
+ (JSC::JIT::emitSlow_op_instanceof): No need to do object type checks -
+ cell type checks and ImplementsDefaultHasIntance checks implicitly
+ supersede object type checks.
+
+2009-10-18 Kwang Yul Seo <skyul@company100.net>
+
+ Reviewed by Darin Adler.
+
+ Use _stricmp and _strnicmp instead of deprecated stricmp and strnicmp.
+ https://bugs.webkit.org/show_bug.cgi?id=30474
+
+ stricmp and strnicmp are deprecated beginning in Visual
+ C++ 2005. Use _stricmp and _strnicmp instead in StringExtras.h.
+
+ * wtf/StringExtras.h:
+ (strncasecmp):
+ (strcasecmp):
+
+2009-10-16 Geoffrey Garen <ggaren@apple.com>
+
+ Build fix: apparently we shouldn't export those symbols?
+
+ * JavaScriptCore.exp:
+
+2009-10-16 Geoffrey Garen <ggaren@apple.com>
+
+ Build fix: export some symbols.
+
+ * JavaScriptCore.exp:
+
+2009-10-16 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ structure typeinfo flags should be inherited.
+ https://bugs.webkit.org/show_bug.cgi?id=30468
+
+ Add StructureFlag constant to the various JSC classes and use
+ it for the TypeInfo construction. This allows us to simply
+ accumulate flags by basing each classes StructureInfo on its parents.
+
+ * API/JSCallbackConstructor.h:
+ (JSC::JSCallbackConstructor::createStructure):
+ * API/JSCallbackFunction.h:
+ (JSC::JSCallbackFunction::createStructure):
+ * API/JSCallbackObject.h:
+ (JSC::JSCallbackObject::createStructure):
+ * debugger/DebuggerActivation.h:
+ (JSC::DebuggerActivation::createStructure):
+ * runtime/Arguments.h:
+ (JSC::Arguments::createStructure):
+ * runtime/BooleanObject.h:
+ (JSC::BooleanObject::createStructure):
+ * runtime/DatePrototype.h:
+ (JSC::DatePrototype::createStructure):
+ * runtime/FunctionPrototype.h:
+ (JSC::FunctionPrototype::createStructure):
+ * runtime/GlobalEvalFunction.h:
+ (JSC::GlobalEvalFunction::createStructure):
+ * runtime/InternalFunction.h:
+ (JSC::InternalFunction::createStructure):
+ * runtime/JSActivation.h:
+ (JSC::JSActivation::createStructure):
+ * runtime/JSArray.h:
+ (JSC::JSArray::createStructure):
+ * runtime/JSByteArray.cpp:
+ (JSC::JSByteArray::createStructure):
+ * runtime/JSByteArray.h:
+ * runtime/JSFunction.h:
+ (JSC::JSFunction::createStructure):
+ * runtime/JSGlobalObject.h:
+ (JSC::JSGlobalObject::createStructure):
+ * runtime/JSNotAnObject.h:
+ (JSC::JSNotAnObject::createStructure):
+ * runtime/JSONObject.h:
+ (JSC::JSONObject::createStructure):
+ * runtime/JSObject.h:
+ (JSC::JSObject::createStructure):
+ * runtime/JSStaticScopeObject.h:
+ (JSC::JSStaticScopeObject::createStructure):
+ * runtime/JSVariableObject.h:
+ (JSC::JSVariableObject::createStructure):
+ * runtime/JSWrapperObject.h:
+ (JSC::JSWrapperObject::createStructure):
+ * runtime/MathObject.h:
+ (JSC::MathObject::createStructure):
+ * runtime/NumberConstructor.h:
+ (JSC::NumberConstructor::createStructure):
+ * runtime/NumberObject.h:
+ (JSC::NumberObject::createStructure):
+ * runtime/RegExpConstructor.h:
+ (JSC::RegExpConstructor::createStructure):
+ * runtime/RegExpObject.h:
+ (JSC::RegExpObject::createStructure):
+ * runtime/StringObject.h:
+ (JSC::StringObject::createStructure):
+ * runtime/StringObjectThatMasqueradesAsUndefined.h:
+ (JSC::StringObjectThatMasqueradesAsUndefined::createStructure):
+
+2009-10-16 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Fast for-in enumeration: Cache JSPropertyNameIterator; cache JSStrings
+ in JSPropertyNameIterator; inline more code.
+
+ 1.024x as fast on SunSpider (fasta: 1.43x as fast).
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dump):
+ * bytecode/Opcode.h:
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::emitGetPropertyNames):
+ (JSC::BytecodeGenerator::emitNextPropertyName):
+ * bytecompiler/BytecodeGenerator.h: Added a few extra operands to
+ op_get_pnames and op_next_pname so that we can track iteration state
+ in the register file instead of in the JSPropertyNameIterator. (To be
+ cacheable, the JSPropertyNameIterator must be stateless.)
+
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::tryCachePutByID):
+ (JSC::Interpreter::tryCacheGetByID): Updated for rename to
+ "normalizePrototypeChain" and removal of "isCacheable".
+
+ (JSC::Interpreter::privateExecute): Updated for in-RegisterFile
+ iteration state tracking.
+
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileMainPass):
+ * jit/JIT.h:
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_get_pnames): Updated for in-RegisterFile
+ iteration state tracking.
+
+ (JSC::JIT::emit_op_next_pname): Inlined code generation for op_next_pname.
+
+ * jit/JITStubs.cpp:
+ (JSC::JITThunks::tryCachePutByID):
+ (JSC::JITThunks::tryCacheGetByID): Updated for rename to
+ "normalizePrototypeChain" and removal of "isCacheable".
+
+ (JSC::DEFINE_STUB_FUNCTION):
+ * jit/JITStubs.h:
+ (JSC::): Added has_property and to_object stubs. Removed op_next_pname
+ stub, since has_property is all we need anymore.
+
+ * parser/Nodes.cpp:
+ (JSC::ForInNode::emitBytecode): Updated for in-RegisterFile
+ iteration state tracking.
+
+ * runtime/JSCell.h:
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::getPropertyNames): Don't do caching at this layer
+ anymore, since we don't create a JSPropertyNameIterator at this layer.
+
+ * runtime/JSPropertyNameIterator.cpp:
+ (JSC::JSPropertyNameIterator::create): Do do caching at this layer.
+ (JSC::JSPropertyNameIterator::get): Updated for in-RegisterFile
+ iteration state tracking.
+ (JSC::JSPropertyNameIterator::markChildren): Mark our JSStrings.
+
+ * runtime/JSPropertyNameIterator.h:
+ (JSC::JSPropertyNameIterator::size):
+ (JSC::JSPropertyNameIterator::setCachedStructure):
+ (JSC::JSPropertyNameIterator::cachedStructure):
+ (JSC::JSPropertyNameIterator::setCachedPrototypeChain):
+ (JSC::JSPropertyNameIterator::cachedPrototypeChain):
+ (JSC::JSPropertyNameIterator::JSPropertyNameIterator):
+ (JSC::Structure::setEnumerationCache): Don't store iteration state in
+ a JSPropertyNameIterator. Do cache a JSPropertyNameIterator in a
+ Structure.
+
+ * runtime/JSValue.h:
+ (JSC::asCell):
+ * runtime/MarkStack.h: Make those mischievous #include gods happy.
+
+ * runtime/ObjectConstructor.cpp:
+
+ * runtime/Operations.h:
+ (JSC::normalizePrototypeChain): Renamed countPrototypeChainEntriesAndCheckForProxies
+ to normalizePrototypeChain, since it changes dictionary prototypes to
+ non-dictionary objects.
+
+ * runtime/PropertyNameArray.cpp:
+ (JSC::PropertyNameArray::add):
+ * runtime/PropertyNameArray.h:
+ (JSC::PropertyNameArrayData::PropertyNameArrayData):
+ (JSC::PropertyNameArray::data):
+ (JSC::PropertyNameArray::size):
+ (JSC::PropertyNameArray::begin):
+ (JSC::PropertyNameArray::end): Simplified some code here to help with
+ current and future refactoring.
+
+ * runtime/Protect.h:
+ * runtime/Structure.cpp:
+ (JSC::Structure::~Structure):
+ (JSC::Structure::addPropertyWithoutTransition):
+ (JSC::Structure::removePropertyWithoutTransition): No need to clear
+ the enumeration cache with adding / removing properties without
+ transition. It is an error to add / remove properties without transition
+ once an object has been observed, and we can ASSERT to catch that.
+
+ * runtime/Structure.h:
+ (JSC::Structure::enumerationCache): Changed the enumeration cache to
+ hold a JSPropertyNameIterator.
+
+ * runtime/StructureChain.cpp:
+ * runtime/StructureChain.h:
+ (JSC::StructureChain::head): Removed StructureChain::isCacheable because
+ it was wrong-headed in two ways: (1) It gave up when a prototype was a
+ dictionary, but instead we want un-dictionary heavily accessed
+ prototypes; (2) It folded a test for hasDefaultGetPropertyNames() into
+ a generic test for "cacheable-ness", but hasDefaultGetPropertyNames()
+ is only releavant to for-in caching.
+
+2009-10-16 Steve Falkenburg <sfalken@apple.com>
+
+ Reviewed by Adam Roben.
+
+ Add a Debug_All configuration to build entire stack as debug.
+ Change Debug_Internal to:
+ - stop using _debug suffix for all WebKit/Safari binaries
+ - not use _debug as a DLL naming suffix
+ - use non-debug C runtime lib.
+
+ * JavaScriptCore.vcproj/JavaScriptCore.make: Debug build in makefile should build Debug_All.
+ * JavaScriptCore.vcproj/JavaScriptCore.sln: Add Debug_All configuration.
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add Debug_All configuration.
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj: Renamed single configuration from "Release" to "all".
+ * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: Add Debug_All configuration.
+ * JavaScriptCore.vcproj/WTF/WTF.vcproj: Add Debug_All configuration.
+ * JavaScriptCore.vcproj/jsc/jsc.vcproj: Add Debug_All configuration.
+ * JavaScriptCore.vcproj/testapi/testapi.vcproj: Add Debug_All configuration.
+
+2009-10-16 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Make typeinfo flags default to false
+ https://bugs.webkit.org/show_bug.cgi?id=30372
+
+ Last part -- replace HasDefaultGetPropertyNames with OverridesGetPropertyNames
+ flag.
+
+ * API/JSCallbackConstructor.h:
+ (JSC::JSCallbackConstructor::createStructure):
+ * API/JSCallbackObject.h:
+ (JSC::JSCallbackObject::createStructure):
+ * debugger/DebuggerActivation.h:
+ (JSC::DebuggerActivation::createStructure):
+ * runtime/Arguments.h:
+ (JSC::Arguments::createStructure):
+ * runtime/BooleanObject.h:
+ (JSC::BooleanObject::createStructure):
+ * runtime/DatePrototype.h:
+ (JSC::DatePrototype::createStructure):
+ * runtime/FunctionPrototype.h:
+ (JSC::FunctionPrototype::createStructure):
+ * runtime/GlobalEvalFunction.h:
+ (JSC::GlobalEvalFunction::createStructure):
+ * runtime/JSAPIValueWrapper.h:
+ (JSC::JSAPIValueWrapper::createStructure):
+ * runtime/JSActivation.h:
+ (JSC::JSActivation::createStructure):
+ * runtime/JSArray.h:
+ (JSC::JSArray::createStructure):
+ * runtime/JSByteArray.cpp:
+ (JSC::JSByteArray::createStructure):
+ * runtime/JSFunction.h:
+ (JSC::JSFunction::createStructure):
+ * runtime/JSGlobalObject.h:
+ (JSC::JSGlobalObject::createStructure):
+ * runtime/JSNotAnObject.h:
+ (JSC::JSNotAnObject::createStructure):
+ * runtime/JSONObject.h:
+ (JSC::JSONObject::createStructure):
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::getPropertyNames):
+ * runtime/JSObject.h:
+ (JSC::JSObject::createStructure):
+ * runtime/JSStaticScopeObject.h:
+ (JSC::JSStaticScopeObject::createStructure):
+ * runtime/JSTypeInfo.h:
+ (JSC::TypeInfo::overridesGetPropertyNames):
+ * runtime/JSVariableObject.h:
+ (JSC::JSVariableObject::createStructure):
+ * runtime/JSWrapperObject.h:
+ (JSC::JSWrapperObject::createStructure):
+ * runtime/MathObject.h:
+ (JSC::MathObject::createStructure):
+ * runtime/NumberConstructor.h:
+ (JSC::NumberConstructor::createStructure):
+ * runtime/NumberObject.h:
+ (JSC::NumberObject::createStructure):
+ * runtime/RegExpConstructor.h:
+ (JSC::RegExpConstructor::createStructure):
+ * runtime/RegExpObject.h:
+ (JSC::RegExpObject::createStructure):
+ * runtime/StringObject.h:
+ (JSC::StringObject::createStructure):
+ * runtime/StringObjectThatMasqueradesAsUndefined.h:
+ (JSC::StringObjectThatMasqueradesAsUndefined::createStructure):
+ * runtime/StructureChain.cpp:
+ (JSC::StructureChain::isCacheable):
+
+2009-10-16 Kevin Ollivier <kevino@theolliviers.com>
+
+ wxMSW build fix, we can't use the simple hash there because the PlatformModuleVersion
+ structure differs.
+
+ * wtf/Platform.h:
+
+2009-10-16 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Implement ExecutableAllocator for Symbian
+ https://bugs.webkit.org/show_bug.cgi?id=29946
+
+ Tested with YARR JIT enabled for Symbian;
+ This patch does not (yet) enable YARR JIT by default.
+
+ * JavaScriptCore.pri:
+ * jit/ExecutableAllocator.h:
+ * jit/ExecutableAllocatorSymbian.cpp: Added.
+ (JSC::ExecutableAllocator::intializePageSize):
+ (JSC::ExecutablePool::systemAlloc):
+ (JSC::ExecutablePool::systemRelease):
+
+2009-10-15 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Make typeinfo flags default to false
+ https://bugs.webkit.org/show_bug.cgi?id=30372
+
+ Part 2 -- Reverse the TypeInfo HasDefaultMark flag to OverridesMarkChildren, etc
+
+ * API/JSCallbackConstructor.h:
+ (JSC::JSCallbackConstructor::createStructure):
+ * API/JSCallbackFunction.h:
+ (JSC::JSCallbackFunction::createStructure):
+ * API/JSCallbackObject.h:
+ (JSC::JSCallbackObject::createStructure):
+ * debugger/DebuggerActivation.h:
+ (JSC::DebuggerActivation::createStructure):
+ * runtime/Arguments.h:
+ (JSC::Arguments::createStructure):
+ * runtime/BooleanObject.h:
+ (JSC::BooleanObject::createStructure):
+ * runtime/DatePrototype.h:
+ (JSC::DatePrototype::createStructure):
+ * runtime/FunctionPrototype.h:
+ (JSC::FunctionPrototype::createStructure):
+ * runtime/GetterSetter.h:
+ (JSC::GetterSetter::createStructure):
+ * runtime/GlobalEvalFunction.h:
+ (JSC::GlobalEvalFunction::createStructure):
+ * runtime/InternalFunction.h:
+ (JSC::InternalFunction::createStructure):
+ * runtime/JSAPIValueWrapper.h:
+ (JSC::JSAPIValueWrapper::createStructure):
+ * runtime/JSActivation.h:
+ (JSC::JSActivation::createStructure):
+ * runtime/JSArray.h:
+ (JSC::JSArray::createStructure):
+ (JSC::MarkStack::markChildren):
+ * runtime/JSByteArray.cpp:
+ (JSC::JSByteArray::createStructure):
+ * runtime/JSFunction.h:
+ (JSC::JSFunction::createStructure):
+ * runtime/JSGlobalObject.h:
+ (JSC::JSGlobalObject::createStructure):
+ * runtime/JSNotAnObject.h:
+ (JSC::JSNotAnObject::createStructure):
+ * runtime/JSNumberCell.h:
+ (JSC::JSNumberCell::createStructure):
+ * runtime/JSONObject.h:
+ (JSC::JSONObject::createStructure):
+ * runtime/JSObject.h:
+ (JSC::JSObject::createStructure):
+ * runtime/JSPropertyNameIterator.h:
+ (JSC::JSPropertyNameIterator::createStructure):
+ * runtime/JSStaticScopeObject.h:
+ (JSC::JSStaticScopeObject::createStructure):
+ * runtime/JSString.h:
+ (JSC::JSString::createStructure):
+ * runtime/JSTypeInfo.h:
+ (JSC::TypeInfo::overridesMarkChildren):
+ * runtime/JSVariableObject.h:
+ (JSC::JSVariableObject::createStructure):
+ * runtime/JSWrapperObject.h:
+ (JSC::JSWrapperObject::createStructure):
+ * runtime/MathObject.h:
+ (JSC::MathObject::createStructure):
+ * runtime/NumberConstructor.h:
+ (JSC::NumberConstructor::createStructure):
+ * runtime/NumberObject.h:
+ (JSC::NumberObject::createStructure):
+ * runtime/RegExpConstructor.h:
+ (JSC::RegExpConstructor::createStructure):
+ * runtime/RegExpObject.h:
+ (JSC::RegExpObject::createStructure):
+ * runtime/StringObject.h:
+ (JSC::StringObject::createStructure):
+ * runtime/StringObjectThatMasqueradesAsUndefined.h:
+ (JSC::StringObjectThatMasqueradesAsUndefined::createStructure):
+
+2009-10-14 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Make typeinfo flags default to false
+ https://bugs.webkit.org/show_bug.cgi?id=30372
+
+ Part 1. Reverse the HasStandardGetOwnPropertySlot flag.
+
+ * API/JSCallbackConstructor.h:
+ (JSC::JSCallbackConstructor::createStructure):
+ * API/JSCallbackFunction.h:
+ (JSC::JSCallbackFunction::createStructure):
+ * API/JSCallbackObject.h:
+ (JSC::JSCallbackObject::createStructure):
+ * debugger/DebuggerActivation.h:
+ (JSC::DebuggerActivation::createStructure):
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ * runtime/Arguments.h:
+ (JSC::Arguments::createStructure):
+ * runtime/BooleanObject.h:
+ (JSC::BooleanObject::createStructure):
+ * runtime/DatePrototype.h:
+ (JSC::DatePrototype::createStructure):
+ * runtime/FunctionPrototype.h:
+ (JSC::FunctionPrototype::createStructure):
+ * runtime/GlobalEvalFunction.h:
+ (JSC::GlobalEvalFunction::createStructure):
+ * runtime/InternalFunction.h:
+ (JSC::InternalFunction::createStructure):
+ * runtime/JSActivation.h:
+ (JSC::JSActivation::createStructure):
+ * runtime/JSArray.h:
+ (JSC::JSArray::createStructure):
+ * runtime/JSByteArray.cpp:
+ (JSC::JSByteArray::createStructure):
+ * runtime/JSFunction.h:
+ (JSC::JSFunction::createStructure):
+ * runtime/JSGlobalObject.h:
+ (JSC::JSGlobalObject::createStructure):
+ * runtime/JSNumberCell.h:
+ (JSC::JSNumberCell::createStructure):
+ * runtime/JSONObject.h:
+ (JSC::JSONObject::createStructure):
+ * runtime/JSObject.h:
+ (JSC::JSObject::createStructure):
+ (JSC::JSCell::fastGetOwnPropertySlot):
+ * runtime/JSStaticScopeObject.h:
+ (JSC::JSStaticScopeObject::createStructure):
+ * runtime/JSString.h:
+ (JSC::JSString::createStructure):
+ * runtime/JSTypeInfo.h:
+ (JSC::TypeInfo::overridesGetOwnPropertySlot):
+ * runtime/JSVariableObject.h:
+ (JSC::JSVariableObject::createStructure):
+ * runtime/JSWrapperObject.h:
+ (JSC::JSWrapperObject::createStructure):
+ * runtime/MathObject.h:
+ (JSC::MathObject::createStructure):
+ * runtime/NumberConstructor.h:
+ (JSC::NumberConstructor::createStructure):
+ * runtime/NumberObject.h:
+ (JSC::NumberObject::createStructure):
+ * runtime/RegExpConstructor.h:
+ (JSC::RegExpConstructor::createStructure):
+ * runtime/RegExpObject.h:
+ (JSC::RegExpObject::createStructure):
+ * runtime/StringObject.h:
+ (JSC::StringObject::createStructure):
+ * runtime/StringObjectThatMasqueradesAsUndefined.h:
+ (JSC::StringObjectThatMasqueradesAsUndefined::createStructure):
+
+2009-10-14 Kevin Ollivier <kevino@theolliviers.com>
+2009-10-14 Darin Adler <darin@apple.com>
+
+ Additions so fix for https://bugs.webkit.org/show_bug.cgi?id=18994
+ can build on Windows.
+
+ * wtf/MathExtras.h: Added llround and llroundf for Windows.
+
+2009-10-14 Kevin Ollivier <kevino@theolliviers.com>
+
+ wx build fix. Set ENABLE_PLUGIN_PACKAGE_SIMPLE_HASH for plugins while we're still building stubs.
+
+ * wtf/Platform.h:
+
+2009-10-13 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Refactor ENABLE_PLUGIN_PACKAGE_SIMPLE_HASH
+ https://bugs.webkit.org/show_bug.cgi?id=30278
+
+ Move the definition of ENABLE_PLUGIN_PACKAGE_SIMPLE_HASH
+ from the make system into common code.
+
+ * wtf/Platform.h:
+
+2009-10-13 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Darin Adler.
+
+ ARM compiler does not understand reinterpret_cast<void*>
+ https://bugs.webkit.org/show_bug.cgi?id=29034
+
+ Change reinterpret_cast<void*> to regular C style (void*) cast
+ for the ARM RVCT compiler.
+
+ * assembler/MacroAssemblerCodeRef.h:
+ (JSC::FunctionPtr::FunctionPtr):
+ * jit/JITOpcodes.cpp: Cast to FunctionPtr first
+ instead of directly casting to reinterpret_cast
+ * jit/JITStubCall.h: Ditto + change the type of m_stub
+ from void* to FunctionPtr.
+ (JSC::JITStubCall::JITStubCall):
+ (JSC::JITStubCall::call):
+ * jit/JITStubs.cpp: Ditto.
+ (JSC::DEFINE_STUB_FUNCTION(EncodedJSValue, op_throw)):
+
+2009-10-11 Oliver Hunt <oliver@apple.com>
+
+ Re-enable the JIT.
+
+ * wtf/Platform.h:
+
+2009-10-10 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Support for String.trim(), String.trimLeft() and String.trimRight() methods
+ https://bugs.webkit.org/show_bug.cgi?id=26590
+
+ Implement trim, trimLeft, and trimRight
+
+ * runtime/StringPrototype.cpp:
+ (JSC::isTrimWhitespace):
+ Our normal string whitespace function does not include U+200B which
+ is needed for compatibility with mozilla's implementation of trim.
+ U+200B does not appear to be expected according to spec, however I am
+ choosing to be lax, and match mozilla behavior so have added this
+ exception.
+ (JSC::trimString):
+
+2009-10-09 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Eliminated some legacy bytecode weirdness.
+
+ Use vPC[x] subscripting instead of ++vPC to access instruction operands.
+ This is simpler, and often more efficient.
+
+ To support this, and to remove use of hard-coded offsets in bytecode and
+ JIT code generation and dumping, calculate jump offsets from the beginning
+ of an instruction, rather than the middle or end.
+
+ Also, use OPCODE_LENGTH instead of hard-coded constants for the sizes of
+ opcodes.
+
+ SunSpider reports no change in JIT mode, and a 1.01x speedup in Interpreter
+ mode.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::printConditionalJump):
+ (JSC::CodeBlock::dump):
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::emitJump):
+ (JSC::BytecodeGenerator::emitJumpIfTrue):
+ (JSC::BytecodeGenerator::emitJumpIfFalse):
+ (JSC::BytecodeGenerator::emitJumpIfNotFunctionCall):
+ (JSC::BytecodeGenerator::emitJumpIfNotFunctionApply):
+ (JSC::BytecodeGenerator::emitComplexJumpScopes):
+ (JSC::BytecodeGenerator::emitJumpScopes):
+ (JSC::BytecodeGenerator::emitNextPropertyName):
+ (JSC::BytecodeGenerator::emitCatch):
+ (JSC::BytecodeGenerator::emitJumpSubroutine):
+ (JSC::prepareJumpTableForImmediateSwitch):
+ (JSC::prepareJumpTableForCharacterSwitch):
+ (JSC::prepareJumpTableForStringSwitch):
+ (JSC::BytecodeGenerator::endSwitch):
+ * bytecompiler/Label.h:
+ (JSC::Label::setLocation):
+ (JSC::Label::bind):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::resolve):
+ (JSC::Interpreter::resolveSkip):
+ (JSC::Interpreter::resolveGlobal):
+ (JSC::Interpreter::resolveBase):
+ (JSC::Interpreter::resolveBaseAndProperty):
+ (JSC::Interpreter::createExceptionScope):
+ (JSC::Interpreter::privateExecute):
+ * interpreter/Interpreter.h:
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompile):
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_jnless):
+ (JSC::JIT::emitSlow_op_jnless):
+ (JSC::JIT::emit_op_jnlesseq):
+ (JSC::JIT::emitSlow_op_jnlesseq):
+ (JSC::JIT::emitBinaryDoubleOp):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_jmp):
+ (JSC::JIT::emit_op_loop):
+ (JSC::JIT::emit_op_loop_if_less):
+ (JSC::JIT::emitSlow_op_loop_if_less):
+ (JSC::JIT::emit_op_loop_if_lesseq):
+ (JSC::JIT::emitSlow_op_loop_if_lesseq):
+ (JSC::JIT::emit_op_loop_if_true):
+ (JSC::JIT::emitSlow_op_loop_if_true):
+ (JSC::JIT::emit_op_jfalse):
+ (JSC::JIT::emitSlow_op_jfalse):
+ (JSC::JIT::emit_op_jtrue):
+ (JSC::JIT::emitSlow_op_jtrue):
+ (JSC::JIT::emit_op_jeq_null):
+ (JSC::JIT::emit_op_jneq_null):
+ (JSC::JIT::emit_op_jneq_ptr):
+ (JSC::JIT::emit_op_jsr):
+ (JSC::JIT::emit_op_next_pname):
+ (JSC::JIT::emit_op_jmp_scopes):
+
+2009-10-09 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Migrated some code that didn't belong out of Structure.
+
+ SunSpider says maybe 1.03x faster.
+
+ * runtime/JSCell.h: Nixed Structure::markAggregate, and made marking of
+ a Structure's prototype the direct responsility of the object using it.
+ (Giving Structure a mark function was misleading because it implied that
+ all live structures get marked during GC, when they don't.)
+
+ * runtime/JSGlobalObject.cpp:
+ (JSC::markIfNeeded):
+ (JSC::JSGlobalObject::markChildren): Added code to mark prototypes stored
+ on the global object. Maybe this wasn't necessary, but now we don't have
+ to wonder.
+
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::getPropertyNames):
+ (JSC::JSObject::getOwnPropertyNames):
+ (JSC::JSObject::getEnumerableNamesFromClassInfoTable):
+ * runtime/JSObject.h:
+ (JSC::JSObject::markChildrenDirect):
+ * runtime/PropertyNameArray.h:
+ * runtime/Structure.cpp:
+ * runtime/Structure.h:
+ (JSC::Structure::setEnumerationCache):
+ (JSC::Structure::enumerationCache): Moved property name gathering code
+ from Structure to JSObject because having a Structure iterate its JSObject
+ was a layering violation. A JSObject is implemented using a Structure; not
+ the other way around.
+
+2009-10-09 Mark Rowe <mrowe@apple.com>
+
+ Attempt to fix the GTK release build.
+
+ * GNUmakefile.am: Include Grammar.cpp in release builds now that
+ AllInOneFile.cpp is gone.
+
+2009-10-09 Gabor Loki <loki@inf.u-szeged.hu>
+
+ Rubber-stamped by Eric Seidel.
+
+ Add ARM JIT support for Gtk port (disabled by default)
+ https://bugs.webkit.org/show_bug.cgi?id=30228
+
+ * GNUmakefile.am:
+
+2009-10-08 Geoffrey Garen <ggaren@apple.com>
+
+ Tiger build fix: added a few more variable initializations.
+
+ * runtime/StringPrototype.cpp:
+ (JSC::stringProtoFuncReplace):
+ (JSC::stringProtoFuncSearch):
+
+2009-10-08 Geoffrey Garen <ggaren@apple.com>
+
+ Qt build fix: added missing #include.
+
+ * jsc.cpp:
+
+2009-10-08 Geoffrey Garen <ggaren@apple.com>
+
+ Tiger build fix: initialize variable whose initialization the compiler
+ can't otherwise figure out.
+
+ * runtime/RegExpObject.cpp:
+ (JSC::RegExpObject::match):
+
+2009-10-08 Geoffrey Garen <ggaren@apple.com>
+
+ Windows build fix: updated exports.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+
+2009-10-08 Geoffrey Garen <ggaren@apple.com>
+
+ Tiger build fix: fixed file name case.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2009-10-08 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ At long last, I pronounce the death of AllInOneFile.cpp.
+
+ SunSpider reports a 1.01x speedup.
+
+ * AllInOneFile.cpp: Removed.
+ * GNUmakefile.am:
+ * JavaScriptCore.exp:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.xcodeproj/project.pbxproj: Added missing project files
+ to compilation stages.
+
+ * parser/Grammar.y:
+ * parser/Lexer.cpp:
+ * parser/Lexer.h:
+ (JSC::jscyylex):
+ * runtime/ArrayConstructor.cpp:
+ (JSC::constructArrayWithSizeQuirk):
+ * runtime/Collector.h:
+ * runtime/JSCell.cpp:
+ (JSC::JSCell::operator new):
+ * runtime/JSCell.h:
+ (JSC::JSCell::operator new):
+ * runtime/JSGlobalObject.cpp:
+ (JSC::JSGlobalObject::operator new):
+ * runtime/JSNumberCell.h:
+ (JSC::JSNumberCell::operator new):
+ * runtime/JSString.cpp:
+ * runtime/JSString.h:
+ (JSC::jsString):
+ (JSC::jsSubstring):
+ (JSC::jsOwnedString):
+ * runtime/RegExpConstructor.cpp:
+ * runtime/RegExpConstructor.h:
+ (JSC::RegExpConstructorPrivate::RegExpConstructorPrivate):
+ (JSC::RegExpConstructorPrivate::lastOvector):
+ (JSC::RegExpConstructorPrivate::tempOvector):
+ (JSC::RegExpConstructorPrivate::changeLastOvector):
+ (JSC::RegExpConstructor::performMatch):
+ * runtime/StringPrototype.cpp:
+ (JSC::stringProtoFuncMatch):
+ * yarr/RegexJIT.cpp:
+ * yarr/RegexJIT.h:
+ (JSC::Yarr::executeRegex): Inlined a few things that Shark said
+ were hot, on the presumption that AllInOneFile.cpp used to inline them
+ automatically.
+
+2009-10-08 Zoltan Herczeg <zherczeg@inf.u-szeged.hu>
+
+ Reviewed by Gavin Barraclough.
+
+ Fix for JIT'ed op_call instructions (evals, constructs, etc.)
+ when !ENABLE(JIT_OPTIMIZE_CALL) && USE(JSVALUE32_64)
+
+ https://bugs.webkit.org/show_bug.cgi?id=30201
+
+ * jit/JITCall.cpp:
+ (JSC::JIT::compileOpCall):
+
+2009-10-07 Geoffrey Garen <ggaren@apple.com>
+
+ Windows build fix: removed no longer exported symbol.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+
+2009-10-07 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Fixed <rdar://problem/5751979> Database code takes JSLock on secondary
+ thread, permanently slowing down JavaScript
+
+ Removed the optional lock from Heap::protect, Heap::unprotect, and friends,
+ since WebCore no longer uses it.
+
+ * JavaScriptCore.exp:
+ * runtime/Collector.cpp:
+ (JSC::Heap::protect):
+ (JSC::Heap::unprotect):
+ (JSC::Heap::markProtectedObjects):
+ (JSC::Heap::protectedGlobalObjectCount):
+ (JSC::Heap::protectedObjectCount):
+ (JSC::Heap::protectedObjectTypeCounts):
+ * runtime/Collector.h:
+
+2009-10-07 Zoltan Horvath <zoltan@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ Allow custom memory allocation control for JavaScriptCore's IdentifierArena
+ https://bugs.webkit.org/show_bug.cgi?id=30158
+
+ Inherits IdentifierArena class from FastAllocBase because it has been
+ instantiated by 'new' in JavaScriptCore/parser/ParserArena.cpp:36.
+
+ * parser/ParserArena.h:
+
+2009-10-07 Adam Roben <aroben@apple.com>
+
+ Export DateInstance::info in a way that works on Windows
+
+ Fixes <http://webkit.org/b/30171>
+ fast/dom/Window/window-postmessage-clone.html fails on Windows
+
+ Reviewed by Anders Carlsson.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+ Removed the export of DateInstance::info from here.
+
+ * runtime/DateInstance.h: Use JS_EXPORTDATA to export
+ DateInstance::info, which is the required way of exporting data on
+ Windows.
+
+2009-10-07 Jørgen Lind <jorgen.lind@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ When enabling or disabling the JIT through .qmake.cache, make sure
+ to also toggle ENABLE_YARR_JIT.
+
+ * JavaScriptCore.pri:
+
+2009-10-06 Priit Laes <plaes@plaes.org>
+
+ Reviewed by Gavin Barraclough.
+
+ Linking fails with "relocation R_X86_64_PC32 against symbol
+ `cti_vm_throw'"
+ https://bugs.webkit.org/show_bug.cgi?id=28422
+
+ * jit/JITStubs.cpp:
+ Mark cti_vm_throw symbol as PLT-indirect symbol, so it doesn't end up
+ in text segment causing relocation errors on amd64 architecture.
+ Introduced new define SYMBOL_STRING_RELOCATION for such symbols.
+
+2009-10-06 Oliver Hunt <oliver@apple.com>
+
+ Windows linking fix
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+
+2009-10-06 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by NOBODY (build fix).
+
+ Windows build fix.
+
+ * runtime/DateInstance.cpp:
+
+2009-10-05 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ It should be possible to post (clone) built-in JS objects to Workers
+ https://bugs.webkit.org/show_bug.cgi?id=22878
+
+ Expose helpers to throw correct exceptions during object graph walk
+ used for cloning and add a helper function to create Date instances
+ without going through the JS Date constructor function.
+
+ * JavaScriptCore.exp:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * runtime/DateInstance.cpp:
+ (JSC::DateInstance::DateInstance):
+ * runtime/DateInstance.h:
+ * runtime/ExceptionHelpers.cpp:
+ (JSC::createTypeError):
+ * runtime/ExceptionHelpers.h:
+
+2009-10-06 David Levin <levin@chromium.org>
+
+ Reviewed by Oliver Hunt.
+
+ StringImpl needs a method to get an instance for another thread which doesn't copy the underlying buffer.
+ https://bugs.webkit.org/show_bug.cgi?id=30095
+
+ * wtf/CrossThreadRefCounted.h:
+ Removed an unused function and assert improvement.
+ (WTF::CrossThreadRefCounted::isOwnedByCurrentThread): Moved out common code from asserts.
+ (WTF::CrossThreadRefCounted::ref): Changed assert to use the common method.
+ (WTF::CrossThreadRefCounted::deref): Changed assert to use the common method.
+ (WTF::CrossThreadRefCounted::crossThreadCopy): Since this includes a potentially
+ non-threadsafe operation, add an assert that the class is owned by the current thread.
+
+2009-10-05 Kevin Ollivier <kevino@theolliviers.com>
+
+ wx build fix. Add Symbian files to the list of excludes.
+
+ * wscript:
+
+2009-10-05 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Remove precompiled header from JavaScriptCore compilation to
+ prevent qmake warning during autonomous compilation.
+ https://bugs.webkit.org/show_bug.cgi?id=30069
+
+ * JavaScriptCore.pro:
+
+2009-10-02 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Removed the concept of a "fast access cutoff" in arrays, because it
+ punished some patterns of array access too much, and made things too
+ complex for inlining in some cases.
+
+ 1.3% speedup on SunSpider.
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emitSlow_op_get_by_val):
+ (JSC::JIT::emitSlow_op_put_by_val):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emit_op_get_by_val):
+ (JSC::JIT::emitSlow_op_get_by_val):
+ (JSC::JIT::emit_op_put_by_val):
+ (JSC::JIT::emitSlow_op_put_by_val):
+ * jit/JITStubs.cpp:
+ * jit/JITStubs.h:
+ (JSC::): Check m_vectorLength instead of m_fastAccessCutoff when
+ getting / putting from / to an array. Inline putting past the end of
+ the array.
+
+ * runtime/JSArray.cpp:
+ (JSC::JSArray::JSArray):
+ (JSC::JSArray::getOwnPropertySlot):
+ (JSC::JSArray::getOwnPropertyDescriptor):
+ (JSC::JSArray::put):
+ (JSC::JSArray::putSlowCase):
+ (JSC::JSArray::deleteProperty):
+ (JSC::JSArray::getOwnPropertyNames):
+ (JSC::JSArray::increaseVectorLength):
+ (JSC::JSArray::setLength):
+ (JSC::JSArray::pop):
+ (JSC::JSArray::push):
+ (JSC::JSArray::sort):
+ (JSC::JSArray::fillArgList):
+ (JSC::JSArray::copyToRegisters):
+ (JSC::JSArray::compactForSorting):
+ (JSC::JSArray::checkConsistency):
+ * runtime/JSArray.h:
+ (JSC::JSArray::canGetIndex):
+ (JSC::JSArray::canSetIndex):
+ (JSC::JSArray::setIndex):
+ (JSC::JSArray::markChildrenDirect): Removed m_fastAccessCutoff, and
+ replaced with checks for JSValue() to detect reads and writes from / to
+ uninitialized parts of the array.
+
+2009-10-02 Jonni Rainisto <jonni.rainisto@nokia.com>
+
+ Reviewed by Darin Adler.
+
+ Math.random() gives too low values on Win32 when _CRT_RAND_S is not defined
+ https://bugs.webkit.org/show_bug.cgi?id=29956
+
+ * wtf/RandomNumber.cpp:
+ (WTF::randomNumber): Added PLATFORM(WIN_OS) to handle 15bit rand()
+
+2009-10-02 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Take one branch instead of two to test for JSValue().
+
+ 1.1% SunSpider speedup.
+
+ * jit/JITCall.cpp:
+ (JSC::JIT::compileOpCall):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_to_jsnumber):
+ (JSC::JIT::emit_op_create_arguments):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emitSlow_op_get_by_val):
+ (JSC::JIT::emit_op_put_by_val): Test for the empty value tag, instead
+ of testing for the cell tag with a 0 payload.
+
+ * runtime/JSValue.cpp:
+ (JSC::JSValue::description): Added support for dumping the new empty value,
+ and deleted values, in debug builds.
+
+ * runtime/JSValue.h:
+ (JSC::JSValue::JSValue()): Construct JSValue() with the empty value tag.
+
+ (JSC::JSValue::JSValue(JSCell*)): Convert null pointer to the empty value
+ tag, to avoid having two different c++ versions of null / empty.
+
+ (JSC::JSValue::operator bool): Test for the empty value tag, instead
+ of testing for the cell tag with a 0 payload.
+
+2009-10-02 Steve Falkenburg <sfalken@apple.com>
+
+ Reviewed by Mark Rowe.
+
+ <https://bugs.webkit.org/show_bug.cgi?id=29989>
+ Safari version number shouldn't be exposed in WebKit code
+
+ For a WebKit version of 532.3.4:
+ Product version is: 5.32.3.4 (was 4.0.3.0)
+ File version is: 5.32.3.4 (was 4.532.3.4)
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.rc:
+
+2009-10-02 Tor Arne Vestbø <tor.arne.vestbo@nokia.com>
+
+ Rubber-stamped by Simon Hausmann.
+
+ Fix the Qt on Mac OS X build.
+
+ * wtf/FastMalloc.cpp:
+
+2009-10-02 Jørgen Lind <jorgen.lind@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Allow enabling and disabling of the JIT through a qmake variable.
+
+ Qt's configure may set this variable through .qmake.cache if a
+ commandline option is given and/or the compile test for hwcap.h
+ failed/succeeded.
+
+ * JavaScriptCore.pri:
+
+2009-10-01 Mark Rowe <mrowe@apple.com>
+
+ Fix the Tiger build. Don't unconditionally enable 3D canvas as it is not supported on Tiger.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2009-10-01 Yongjun Zhang <yongjun.zhang@nokia.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=29187
+
+ Don't inline ~ListRefPtr() to work around winscw compiler forward declaration
+ bug regarding templated classes.
+
+ The compiler bug is reported at:
+ https://xdabug001.ext.nokia.com/bugzilla/show_bug.cgi?id=9812
+
+ The change will be reverted when the above bug is fixed in winscw compiler.
+
+ * wtf/ListRefPtr.h:
+ (WTF::::~ListRefPtr):
+
+2009-10-01 Zoltan Horvath <zoltan@webkit.org>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Allow custom memory allocation control for the whole JavaScriptCore
+ https://bugs.webkit.org/show_bug.cgi?id=27029
+
+ Since in JavaScriptCore almost every class which has been instantiated by operator new is
+ inherited from FastAllocBase (bug #20422), we disable customizing global operator new for the Qt-port
+ when USE_SYSTEM_MALLOC=0.
+
+ Add #include <unistd.h> to FastMalloc.cpp because it's used by TCMalloc_PageHeap::scavengerThread().
+ (It's needed for the functionality of TCmalloc.)
+
+ Add TCSystemAlloc.cpp to JavaScriptCore.pri if USE_SYSTEM_MALLOC is disabled.
+
+ * JavaScriptCore.pri:
+ * wtf/FastMalloc.cpp:
+ (WTF::sleep):
+ * wtf/FastMalloc.h:
+
+2009-09-30 Gabor Loki <loki@inf.u-szeged.hu>
+
+ Reviewed by George Staikos.
+
+ Defines two pseudo-platforms for ARM and Thumb-2 instruction set.
+ https://bugs.webkit.org/show_bug.cgi?id=29122
+
+ Introduces WTF_PLATFORM_ARM_TRADITIONAL and WTF_PLATFORM_ARM_THUMB2
+ macros on ARM platforms. The PLATFORM(ARM_THUMB2) should be used
+ when Thumb-2 instruction set is the required target. The
+ PLATFORM(ARM_TRADITIONAL) is for generic ARM instruction set. In
+ case where the code is common the PLATFORM(ARM) have to be used.
+
+ Modified by George Wright <gwright@rim.com> to correctly work
+ with the RVCT-defined __TARGET_ARCH_ARM and __TARGET_ARCH_THUMB
+ compiler macros, as well as adding readability changes.
+
+ * wtf/Platform.h:
+
+2009-09-30 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Devirtualise array toString conversion
+
+ Tweak the implementation of Array.prototype.toString to have a fast path
+ when acting on a true JSArray.
+
+ * runtime/ArrayPrototype.cpp:
+ (JSC::arrayProtoFuncToString):
+
+2009-09-30 Csaba Osztrogonac <oszi@inf.u-szeged.hu>
+
+ Reviewed by Geoffrey Garen.
+
+ Buildfix for platforms using JSVALUE32.
+ https://bugs.webkit.org/show_bug.cgi?id=29915
+
+ After http://trac.webkit.org/changeset/48905 the build broke in JSVALUE32 case.
+ Also removed unreachable code.
+
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_add):
+ - Declaration of "OperandTypes types" moved before first use.
+ - Typos fixed: dst modified to result, regT2 added.
+ - Unreachable code removed.
+ (JSC::JIT::emitSlow_op_add):
+ - Missing declaration of "OperandTypes types" added.
+
+2009-09-30 Janne Koskinen <janne.p.koskinen@digia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Reduce heap size on Symbian from 64MB to 8MB.
+
+ This is not a perfect fix, it requires more fine tuning.
+ But this makes it possible again to debug in the emulator,
+ which is more important in order to be able to fix other
+ run-time issues.
+
+ * runtime/Collector.h:
+
+2009-09-30 Janne Koskinen <janne.p.koskinen@digia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Fix CRASH() macro for Symbian build.
+
+ * wtf/Assertions.h: Added missing }
+
+2009-09-29 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Inlined a few math operations.
+
+ ~1% SunSpider speedup.
+
+ * jit/JIT.h:
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::compileBinaryArithOpSlowCase):
+ (JSC::JIT::emitSlow_op_add):
+ (JSC::JIT::emitSlow_op_mul):
+ (JSC::JIT::emit_op_sub):
+ (JSC::JIT::emitSlow_op_sub): Don't take a stub call when operating on
+ a constant int and a double.
+
+2009-09-28 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Tidy up codeblock sampler
+ https://bugs.webkit.org/show_bug.cgi?id=29836
+
+ Some rather simple refactoring of codeblock sampler so that
+ it's easier for us to use it to find problems in non-jsc
+ environments
+
+ * JavaScriptCore.exp:
+ * bytecode/SamplingTool.h:
+ * debugger/Debugger.cpp:
+ (JSC::evaluateInGlobalCallFrame):
+ * debugger/DebuggerCallFrame.cpp:
+ (JSC::DebuggerCallFrame::evaluate):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::Interpreter):
+ (JSC::Interpreter::execute):
+ (JSC::Interpreter::privateExecute):
+ (JSC::Interpreter::enableSampler):
+ (JSC::Interpreter::dumpSampleData):
+ (JSC::Interpreter::startSampling):
+ (JSC::Interpreter::stopSampling):
+ * interpreter/Interpreter.h:
+ (JSC::Interpreter::sampler):
+ * jit/JIT.h:
+ * jsc.cpp:
+ (runWithScripts):
+ * runtime/Completion.cpp:
+ (JSC::checkSyntax):
+ (JSC::evaluate):
+ * runtime/Executable.h:
+ (JSC::EvalExecutable::EvalExecutable):
+ (JSC::ProgramExecutable::create):
+ (JSC::ProgramExecutable::ProgramExecutable):
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::startSampling):
+ (JSC::JSGlobalData::stopSampling):
+ (JSC::JSGlobalData::dumpSampleData):
+ * runtime/JSGlobalData.h:
+ * runtime/JSGlobalObjectFunctions.cpp:
+ (JSC::globalFuncEval):
+
+2009-09-29 Jeremy Orlow <jorlow@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ Add GYP generated files to svn:ignore
+ https://bugs.webkit.org/show_bug.cgi?id=29895
+
+ The following files are generated by JavaScriptCore's GYP file and should be ignored:
+
+ pcre.mk
+ wtf.scons
+ wtf.mk
+ SConstruct
+ wtf_config.scons
+ wtf_config.mk
+ pcre.scons
+
+ * JavaScriptCore.gyp: Changed property svn:ignore.
+
+2009-09-29 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Standardized an optimization for adding non-numbers.
+
+ SunSpider says maybe a tiny speedup.
+
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_add):
+ (JSC::JIT::emitSlow_op_add):
+
+2009-09-29 Geoffrey Garen <ggaren@apple.com>
+
+ Windows build fix: export a new symbol.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+
+2009-09-28 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Removed virtual destructor from JSGlobalObjectData to eliminate pointer
+ fix-ups when accessing JSGlobalObject::d.
+
+ Replaced with an explicit destructor function pointer.
+
+ 6% speedup on bench-alloc-nonretained.js.
+
+ * JavaScriptCore.exp:
+ * runtime/JSGlobalObject.cpp:
+ (JSC::JSGlobalObject::~JSGlobalObject):
+ (JSC::JSGlobalObject::destroyJSGlobalObjectData):
+ * runtime/JSGlobalObject.h:
+ (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
+ (JSC::JSGlobalObject::JSGlobalObject):
+
+2009-09-29 Janne Koskinen <janne.p.koskinen@digia.com>
+
+ Reviewed by David Kilzer.
+
+ [Qt] Assert messages prints visible in Symbian
+ https://bugs.webkit.org/show_bug.cgi?id=29808
+
+ Asserts use vprintf to print the messages to stderr.
+ In Symbian Open C it is not possible to see stderr so
+ I routed the messages to stdout instead.
+
+ * wtf/Assertions.cpp:
+
+2009-09-29 Janne Koskinen <janne.p.koskinen@digia.com>
+
+ Reviewed by Darin Adler.
+
+ [Qt] Symbian CRASH macro implementation
+
+ Added Symbian specific crash macro that
+ stops to crash line if JIT debugging is used.
+ Additional differentiation of access violation
+ (KERN-EXEC 3) and CRASH panic.
+
+ * wtf/Assertions.h:
+
+2009-09-28 Mark Rowe <mrowe@apple.com>
+
+ Fix the PowerPC build.
+
+ * JavaScriptCore.exp:
+
+2009-09-28 Mark Rowe <mrowe@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ <rdar://problem/7195704> JavaScriptCore fails to mark registers when built for x86_64 using LLVM GCC.
+
+ * runtime/Collector.cpp:
+ (JSC::Heap::markCurrentThreadConservatively): Force jmp_buf to use the appropriate alignment for a pointer
+ to ensure that we correctly interpret the contents of registers during marking.
+
+2009-09-28 Geoffrey Garen <ggaren@apple.com>
+
+ Windows build fix: added new exports.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+
+2009-09-28 Geoffrey Garen <ggaren@apple.com>
+
+ Windows build fix: removed exports that no longer exist.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+
+2009-09-28 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Darin Adler.
+
+ NotNullPassRefPtr: smart pointer optimized for passing references that are not null
+ https://bugs.webkit.org/show_bug.cgi?id=29822
+
+ Added NotNullPassRefPtr, and deployed it in all places that initialize
+ JavaScript objects.
+
+ 2.2% speedup on bench-allocate-nonretained.js.
+
+ * API/JSCallbackConstructor.cpp:
+ (JSC::JSCallbackConstructor::JSCallbackConstructor):
+ * API/JSCallbackConstructor.h:
+ * API/JSCallbackObject.h:
+ * API/JSCallbackObjectFunctions.h:
+ (JSC::JSCallbackObject::JSCallbackObject):
+ * JavaScriptCore.exp:
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::addFunctionDecl):
+ (JSC::CodeBlock::addFunctionExpr):
+ * runtime/ArrayConstructor.cpp:
+ (JSC::ArrayConstructor::ArrayConstructor):
+ * runtime/ArrayConstructor.h:
+ * runtime/ArrayPrototype.cpp:
+ (JSC::ArrayPrototype::ArrayPrototype):
+ * runtime/ArrayPrototype.h:
+ * runtime/BooleanConstructor.cpp:
+ (JSC::BooleanConstructor::BooleanConstructor):
+ * runtime/BooleanConstructor.h:
+ * runtime/BooleanObject.cpp:
+ (JSC::BooleanObject::BooleanObject):
+ * runtime/BooleanObject.h:
+ * runtime/BooleanPrototype.cpp:
+ (JSC::BooleanPrototype::BooleanPrototype):
+ * runtime/BooleanPrototype.h:
+ * runtime/DateConstructor.cpp:
+ (JSC::DateConstructor::DateConstructor):
+ * runtime/DateConstructor.h:
+ * runtime/DateInstance.cpp:
+ (JSC::DateInstance::DateInstance):
+ * runtime/DateInstance.h:
+ * runtime/DatePrototype.cpp:
+ (JSC::DatePrototype::DatePrototype):
+ * runtime/DatePrototype.h:
+ * runtime/ErrorConstructor.cpp:
+ (JSC::ErrorConstructor::ErrorConstructor):
+ * runtime/ErrorConstructor.h:
+ * runtime/ErrorInstance.cpp:
+ (JSC::ErrorInstance::ErrorInstance):
+ * runtime/ErrorInstance.h:
+ * runtime/ErrorPrototype.cpp:
+ (JSC::ErrorPrototype::ErrorPrototype):
+ * runtime/ErrorPrototype.h:
+ * runtime/FunctionConstructor.cpp:
+ (JSC::FunctionConstructor::FunctionConstructor):
+ * runtime/FunctionConstructor.h:
+ * runtime/FunctionPrototype.cpp:
+ (JSC::FunctionPrototype::FunctionPrototype):
+ * runtime/FunctionPrototype.h:
+ * runtime/GlobalEvalFunction.cpp:
+ (JSC::GlobalEvalFunction::GlobalEvalFunction):
+ * runtime/GlobalEvalFunction.h:
+ * runtime/InternalFunction.cpp:
+ (JSC::InternalFunction::InternalFunction):
+ * runtime/InternalFunction.h:
+ (JSC::InternalFunction::InternalFunction):
+ * runtime/JSActivation.cpp:
+ (JSC::JSActivation::JSActivation):
+ * runtime/JSActivation.h:
+ (JSC::JSActivation::JSActivationData::JSActivationData):
+ * runtime/JSArray.cpp:
+ (JSC::JSArray::JSArray):
+ * runtime/JSArray.h:
+ * runtime/JSByteArray.cpp:
+ (JSC::JSByteArray::JSByteArray):
+ * runtime/JSByteArray.h:
+ * runtime/JSFunction.cpp:
+ (JSC::JSFunction::JSFunction):
+ * runtime/JSFunction.h:
+ * runtime/JSGlobalObject.h:
+ (JSC::JSGlobalObject::JSGlobalObject):
+ * runtime/JSONObject.h:
+ (JSC::JSONObject::JSONObject):
+ * runtime/JSObject.h:
+ (JSC::JSObject::JSObject):
+ (JSC::JSObject::setStructure):
+ * runtime/JSVariableObject.h:
+ (JSC::JSVariableObject::JSVariableObject):
+ * runtime/JSWrapperObject.h:
+ (JSC::JSWrapperObject::JSWrapperObject):
+ * runtime/MathObject.cpp:
+ (JSC::MathObject::MathObject):
+ * runtime/MathObject.h:
+ * runtime/NativeErrorConstructor.cpp:
+ (JSC::NativeErrorConstructor::NativeErrorConstructor):
+ * runtime/NativeErrorConstructor.h:
+ * runtime/NativeErrorPrototype.cpp:
+ (JSC::NativeErrorPrototype::NativeErrorPrototype):
+ * runtime/NativeErrorPrototype.h:
+ * runtime/NumberConstructor.cpp:
+ (JSC::NumberConstructor::NumberConstructor):
+ * runtime/NumberConstructor.h:
+ * runtime/NumberObject.cpp:
+ (JSC::NumberObject::NumberObject):
+ * runtime/NumberObject.h:
+ * runtime/NumberPrototype.cpp:
+ (JSC::NumberPrototype::NumberPrototype):
+ * runtime/NumberPrototype.h:
+ * runtime/ObjectConstructor.cpp:
+ (JSC::ObjectConstructor::ObjectConstructor):
+ * runtime/ObjectConstructor.h:
+ * runtime/ObjectPrototype.cpp:
+ (JSC::ObjectPrototype::ObjectPrototype):
+ * runtime/ObjectPrototype.h:
+ * runtime/PropertyNameArray.h:
+ (JSC::PropertyNameArrayData::setCachedPrototypeChain):
+ * runtime/PrototypeFunction.cpp:
+ (JSC::PrototypeFunction::PrototypeFunction):
+ * runtime/PrototypeFunction.h:
+ * runtime/RegExpConstructor.cpp:
+ (JSC::RegExpConstructor::RegExpConstructor):
+ * runtime/RegExpConstructor.h:
+ * runtime/RegExpObject.cpp:
+ (JSC::RegExpObject::RegExpObject):
+ * runtime/RegExpObject.h:
+ (JSC::RegExpObject::RegExpObjectData::RegExpObjectData):
+ * runtime/RegExpPrototype.cpp:
+ (JSC::RegExpPrototype::RegExpPrototype):
+ * runtime/RegExpPrototype.h:
+ * runtime/StringConstructor.cpp:
+ (JSC::StringConstructor::StringConstructor):
+ * runtime/StringConstructor.h:
+ * runtime/StringObject.cpp:
+ (JSC::StringObject::StringObject):
+ * runtime/StringObject.h:
+ * runtime/StringObjectThatMasqueradesAsUndefined.h:
+ (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined):
+ * runtime/StringPrototype.cpp:
+ (JSC::StringPrototype::StringPrototype):
+ * runtime/StringPrototype.h:
+ * wtf/PassRefPtr.h:
+ (WTF::NotNullPassRefPtr::NotNullPassRefPtr):
+ (WTF::NotNullPassRefPtr::~NotNullPassRefPtr):
+ (WTF::NotNullPassRefPtr::get):
+ (WTF::NotNullPassRefPtr::clear):
+ (WTF::NotNullPassRefPtr::releaseRef):
+ (WTF::NotNullPassRefPtr::operator*):
+ (WTF::NotNullPassRefPtr::operator->):
+ (WTF::NotNullPassRefPtr::operator!):
+ (WTF::NotNullPassRefPtr::operator UnspecifiedBoolType):
+ * wtf/RefPtr.h:
+ (WTF::RefPtr::RefPtr):
+ (WTF::operator==):
+
+2009-09-28 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Hard dependency on SSE2 instruction set with JIT
+ https://bugs.webkit.org/show_bug.cgi?id=29779
+
+ Add floating point support checks to op_jfalse and op_jtrue, and
+ fix the logic for the slow case of op_add
+
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emitSlow_op_add):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_jfalse):
+ (JSC::JIT::emit_op_jtrue):
+
+2009-09-28 Yaar Schnitman <yaar@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ Chromium port - recognize we are being built independently
+ of chromium and look for dependencies under webkit/chromium rather
+ than chromium/src.
+
+ https://bugs.webkit.org/show_bug.cgi?id=29722
+
+ * JavaScriptCore.gyp/JavaScriptCore.gyp:
+
+2009-09-28 Jakub Wieczorek <faw217@gmail.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Implement XSLT support with QtXmlPatterns.
+ https://bugs.webkit.org/show_bug.cgi?id=28303
+
+ * wtf/Platform.h: Add a WTF_USE_QXMLQUERY #define.
+
+2009-09-28 Gabor Loki <loki@inf.u-szeged.hu>
+
+ Reviewed by Simon Hausmann.
+
+ Remove __clear_cache which is an internal function of GCC
+ https://bugs.webkit.org/show_bug.cgi?id=28886
+
+ Although __clear_cache is exported from GCC, this is an internal
+ function. GCC makes no promises about it.
+
+ * jit/ExecutableAllocator.h:
+ (JSC::ExecutableAllocator::cacheFlush):
+
+2009-09-28 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Oliver Hunt.
+
+ Fix an absolute path to somewhere in Oliver's machine to a relative path
+ for derived JSONObject.lut.h.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2009-09-28 Joerg Bornemann <joerg.bornemann@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Add ARM version detection for Windows CE.
+
+ * wtf/Platform.h:
+
+2009-09-26 Yongjun Zhang <yongjun.zhang@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Add MarkStackSymbian.cpp to build JavascriptCore for Symbian.
+
+ Re-use Windows shrinkAllocation implementation because Symbian doesn't
+ support releasing part of memory region.
+
+ Use fastMalloc and fastFree to implement allocateStack and releaseStack
+ for Symbian port.
+
+ * JavaScriptCore.pri:
+ * runtime/MarkStack.h:
+ (JSC::MarkStack::MarkStackArray::shrinkAllocation):
+ * runtime/MarkStackSymbian.cpp: Added.
+ (JSC::MarkStack::initializePagesize):
+ (JSC::MarkStack::allocateStack):
+ (JSC::MarkStack::releaseStack):
+
+2009-09-25 Gabor Loki <loki@inf.u-szeged.hu>
+
+ Reviewed by Gavin Barraclough.
+
+ Fix unaligned data access in YARR_JIT on ARMv5 and below.
+ https://bugs.webkit.org/show_bug.cgi?id=29695
+
+ On ARMv5 and below all data access should be naturally aligned.
+ In the YARR_JIT there is a case when character pairs are
+ loaded from the input string, but this data access is not
+ naturally aligned. This fix introduces load32WithUnalignedHalfWords
+ and branch32WithUnalignedHalfWords functions which contain
+ naturally aligned memory loads - half word loads - on ARMv5 and below.
+
+ * assembler/MacroAssemblerARM.cpp:
+ (JSC::MacroAssemblerARM::load32WithUnalignedHalfWords):
+ * assembler/MacroAssemblerARM.h:
+ (JSC::MacroAssemblerARM::load32WithUnalignedHalfWords):
+ (JSC::MacroAssemblerARM::branch32WithUnalignedHalfWords):
+ * assembler/MacroAssemblerARMv7.h:
+ (JSC::MacroAssemblerARMv7::load32WithUnalignedHalfWords):
+ (JSC::MacroAssemblerARMv7::branch32):
+ (JSC::MacroAssemblerARMv7::branch32WithUnalignedHalfWords):
+ * assembler/MacroAssemblerX86Common.h:
+ (JSC::MacroAssemblerX86Common::load32WithUnalignedHalfWords):
+ (JSC::MacroAssemblerX86Common::branch32WithUnalignedHalfWords):
+ * wtf/Platform.h:
+ * yarr/RegexJIT.cpp:
+ (JSC::Yarr::RegexGenerator::generatePatternCharacterPair):
+
+2009-09-25 Jeremy Orlow <jorlow@chromium.org>
+
+ This is breaking Chromium try bots, so I'm counting this as a build fix.
+
+ Add more svn:ignore exceptions. On different platforms, these files are
+ generated with different case for JavaScriptCore. Also there are some
+ wtf project files that get built apparently.
+
+ * JavaScriptCore.gyp: Changed property svn:ignore.
+
+2009-09-25 Ada Chan <adachan@apple.com>
+
+ Build fix.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+
+2009-09-25 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Inlined some object creation code, including lexicalGlobalObject access
+ https://bugs.webkit.org/show_bug.cgi?id=29750
+
+ SunSpider says 0.5% faster.
+
+ 0.8% speedup on bench-alloc-nonretained.js.
+ 2.5% speedup on v8-splay.js.
+
+ * interpreter/CachedCall.h:
+ (JSC::CachedCall::CachedCall):
+ * interpreter/CallFrame.h:
+ (JSC::ExecState::lexicalGlobalObject):
+ (JSC::ExecState::globalThisValue):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::dumpRegisters):
+ (JSC::Interpreter::execute):
+ (JSC::Interpreter::privateExecute):
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ * runtime/FunctionConstructor.cpp:
+ (JSC::constructFunction):
+ * runtime/ScopeChain.cpp:
+ (JSC::ScopeChainNode::print):
+ * runtime/ScopeChain.h:
+ (JSC::ScopeChainNode::ScopeChainNode):
+ (JSC::ScopeChainNode::~ScopeChainNode):
+ (JSC::ScopeChainNode::push):
+ (JSC::ScopeChain::ScopeChain):
+ (JSC::ScopeChain::globalObject): Added a globalObject data member to ScopeChainNode.
+ Replaced accessor function for globalObject() with data member. Replaced
+ globalThisObject() accessor with direct access to globalThis, to match.
+
+ * runtime/JSGlobalObject.cpp:
+ (JSC::JSGlobalObject::init):
+ * runtime/JSGlobalObject.h: Inlined array and object construction.
+
+2009-09-25 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Add ARM version detection rules for Symbian
+ https://bugs.webkit.org/show_bug.cgi?id=29715
+
+ * wtf/Platform.h:
+
+2009-09-24 Xan Lopez <xlopez@igalia.com>
+
+ Reviewed by Mark "Do It!" Rowe.
+
+ Some GCC versions don't like C++-style comments in preprocessor
+ directives, change to C-style to shut them up.
+
+ * wtf/Platform.h:
+
+2009-09-24 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Division is needlessly slow in 64-bit
+ https://bugs.webkit.org/show_bug.cgi?id=29723
+
+ Add codegen for op_div on x86-64
+
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileMainPass):
+ (JSC::JIT::privateCompileSlowCases):
+ * jit/JIT.h:
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::compileBinaryArithOpSlowCase):
+ (JSC::JIT::emit_op_div):
+ (JSC::JIT::emitSlow_op_div):
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::isOperandConstantImmediateDouble):
+ (JSC::JIT::addressFor):
+ (JSC::JIT::emitLoadDouble):
+ (JSC::JIT::emitLoadInt32ToDouble):
+ (JSC::JIT::emitJumpSlowCaseIfNotImmediateNumber):
+
+2009-09-24 Jeremy Orlow <jorlow@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ Add GYP generated files to svn:ignore
+ https://bugs.webkit.org/show_bug.cgi?id=29724
+
+ Adding the following files to the svn:ignore list (all in the
+ JavaScriptCore/JavaScriptCore.gyp directory)
+
+ JavaScriptCore.xcodeproj
+ JavaScriptCore.sln
+ JavaScriptCore.vcproj
+ JavaScriptCore_Debug.rules
+ JavaScriptCore_Release.rules
+ JavaScriptCore_Release - no tcmalloc.rules
+ JavaScriptCore_Purify.rules
+ JavaScriptCore.mk
+ JavaScriptCore_Debug_rules.mk
+ JavaScriptCore_Release_rules.mk
+ JavaScriptCore_Release - no tcmalloc_rules.mk
+ JavaScriptCore_Purify_rules.mk
+ JavaScriptCore.scons
+ JavaScriptCore_main.scons
+
+ * JavaScriptCore.gyp: Changed property svn:ignore.
+
+2009-09-24 Yong Li <yong.li@torchmobile.com>
+
+ Reviewed by Adam Barth.
+
+ Replace platform-dependent code with WTF::currentTime()
+ https://bugs.webkit.org/show_bug.cgi?id=29148
+
+ * jsc.cpp:
+ (StopWatch::start):
+ (StopWatch::stop):
+ (StopWatch::getElapsedMS):
+ * runtime/TimeoutChecker.cpp:
+ (JSC::getCPUTime):
+
+2009-09-24 Mark Rowe <mrowe@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ <rdar://problem/7215058> FastMalloc scavenging thread should be named
+
+ * wtf/FastMalloc.cpp:
+ (WTF::TCMalloc_PageHeap::scavengerThread): Set the thread name.
+ * wtf/Platform.h: Move the knowledge of whether pthread_setname_np exists to here as HAVE(PTHREAD_SETNAME_NP).
+ * wtf/ThreadingPthreads.cpp:
+ (WTF::setThreadNameInternal): Use HAVE(PTHREAD_SETNAME_NP).
+
+2009-09-24 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Renamed clear to removeAll, as suggested by Darin Adler.
+
+ * wtf/HashCountedSet.h:
+ (WTF::::removeAll):
+
+2009-09-24 Mark Rowe <mrowe@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Fix FastMalloc to build with assertions enabled.
+
+ * wtf/FastMalloc.cpp:
+ (WTF::TCMalloc_Central_FreeList::ReleaseToSpans):
+ * wtf/TCSpinLock.h:
+ (TCMalloc_SpinLock::IsHeld):
+
+2009-09-24 Geoffrey Garen <ggaren@apple.com>
+
+ Suggested by Darin Adler.
+
+ Removed some unnecessary parameter names.
+
+ * wtf/HashCountedSet.h:
+
+2009-09-24 Janne Koskinen <janne.p.koskinen@digia.com>
+
+ Reviewed by Simon Hausmann.
+
+ On Windows JSChar is typedef'ed to wchar_t.
+
+ When building with WINSCW for Symbian we need to do the
+ same typedef.
+
+ * API/JSStringRef.h:
+
+2009-09-23 Geoffrey Garen <ggaren@apple.com>
+
+ A piece of my last patch that I forgot.
+
+ * wtf/HashCountedSet.h:
+ (WTF::::clear): Added HashCountedSet::clear.
+
+2009-09-24 Gabor Loki <loki@inf.u-szeged.hu>
+
+ Reviewed by Gavin Barraclough.
+
+ Avoid __clear_cache built-in function if DISABLE_BUILTIN_CLEAR_CACHE define is set
+ https://bugs.webkit.org/show_bug.cgi?id=28886
+
+ There are some GCC packages (for example GCC-2006q3 from CodeSourcery)
+ which contain __clear_cache built-in function only for C while the C++
+ version of __clear_cache is missing on ARM architectures.
+
+ Fixed a small bug in the inline assembly of cacheFlush function on
+ ARM_TRADITIONAL.
+
+ * jit/ExecutableAllocator.h:
+ (JSC::ExecutableAllocator::cacheFlush):
+
+2009-09-23 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Added the ability to swap vectors with inline capacities, so you can
+ store a vector with inline capacity in a hash table.
+
+ * wtf/Vector.h:
+ (WTF::swap):
+ (WTF::VectorBuffer::swap):
+
+2009-09-23 David Kilzer <ddkilzer@apple.com>
+
+ Move definition of USE(PLUGIN_HOST_PROCESS) from WebKitPrefix.h to Platform.h
+
+ Reviewed by Mark Rowe.
+
+ * wtf/Platform.h: Define WTF_USE_PLUGIN_HOST_PROCESS to 1 when
+ building on 64-bit SnowLeopard. Define to 0 elsewhere.
+
+2009-09-22 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Code sampling builds are broken.
+ https://bugs.webkit.org/show_bug.cgi?id=29662
+
+ Fix build.
+
+ * bytecode/EvalCodeCache.h:
+ (JSC::EvalCodeCache::get):
+ * bytecode/SamplingTool.cpp:
+ (JSC::ScriptSampleRecord::sample):
+ (JSC::SamplingTool::doRun):
+ (JSC::SamplingTool::notifyOfScope):
+ (JSC::compareScriptSampleRecords):
+ (JSC::SamplingTool::dump):
+ * bytecode/SamplingTool.h:
+ (JSC::ScriptSampleRecord::ScriptSampleRecord):
+ (JSC::ScriptSampleRecord::~ScriptSampleRecord):
+ (JSC::SamplingTool::SamplingTool):
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::BytecodeGenerator):
+ (JSC::BytecodeGenerator::emitNewFunction):
+ (JSC::BytecodeGenerator::emitNewFunctionExpression):
+ * bytecompiler/BytecodeGenerator.h:
+ (JSC::BytecodeGenerator::makeFunction):
+ * debugger/Debugger.cpp:
+ (JSC::evaluateInGlobalCallFrame):
+ * debugger/DebuggerCallFrame.cpp:
+ (JSC::DebuggerCallFrame::evaluate):
+ * parser/Nodes.cpp:
+ (JSC::ScopeNode::ScopeNode):
+ * runtime/Completion.cpp:
+ (JSC::checkSyntax):
+ (JSC::evaluate):
+ * runtime/Executable.cpp:
+ (JSC::FunctionExecutable::fromGlobalCode):
+ * runtime/Executable.h:
+ (JSC::ScriptExecutable::ScriptExecutable):
+ (JSC::EvalExecutable::EvalExecutable):
+ (JSC::EvalExecutable::create):
+ (JSC::ProgramExecutable::ProgramExecutable):
+ (JSC::FunctionExecutable::create):
+ (JSC::FunctionExecutable::FunctionExecutable):
+ * runtime/JSGlobalObjectFunctions.cpp:
+ (JSC::globalFuncEval):
+
+2009-09-22 Darin Adler <darin@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ * wtf/Forward.h: Added PassOwnPtr.
+
+2009-09-22 Yaar Schnitman <yaar@chromium.org>
+
+ Reviewed by David Levin.
+
+ Ported chromium.org's javascriptcore.gyp for the webkit chromium port.
+
+ https://bugs.webkit.org/show_bug.cgi?id=29617
+
+ * JavaScriptCore.gyp/JavaScriptCore.gyp: Added.
+
+2009-09-22 Thiago Macieira <thiago.macieira@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Fix compilation with WINSCW: no varargs macros
+
+ Disable variadic arguments for WINSCW just like we do
+ for MSVC7.
+
+ * wtf/Assertions.h:
+
+2009-09-22 Kent Hansen <khansen@trolltech.com>
+
+ Reviewed by Simon Hausmann.
+
+ Disable variadic macros on MSVC7.
+
+ This was originally added in r26589 but not extended
+ when LOG_DISABLED/ASSERT_DISABLED was introduced.
+
+ * wtf/Assertions.h:
+
+2009-09-22 Simon Hausmann <simon.hausmann@nokia.com>
+
+ Unreviewed build fix for Windows CE < 5
+
+ Define WINCEBASIC to disable the IsDebuggerPresent() code in
+ wtf/Assertions.cpp.
+
+ * JavaScriptCore.pri:
+
+2009-09-22 Joerg Bornemann <joerg.bornemann@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Fix major memory leak in JavaScriptCore RegisterFile on Windows CE
+
+ https://bugs.webkit.org/show_bug.cgi?id=29367
+
+ On Widows CE we must decommit all committed pages before we release
+ them. See VirtualFree documentation.
+ Desktop Windows behaves much smoother in this situation.
+
+ * interpreter/RegisterFile.cpp:
+ (JSC::RegisterFile::~RegisterFile):
+
+2009-09-21 Greg Bolsinga <bolsinga@apple.com>
+
+ Reviewed by Simon Fraser & Sam Weinig.
+
+ Add ENABLE(ORIENTATION_EVENTS)
+ https://bugs.webkit.org/show_bug.cgi?id=29508
+
+ * wtf/Platform.h: Also sort PLATFORM(IPHONE) #defines.
+
+2009-09-21 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
+
+ Reviewed by Eric Seidel.
+
+ [Fix] SourceCode's uninitialized member
+
+ Potential source of crashes and bugs was fixed. Default constructor
+ didn't initialized m_provider member.
+
+ https://bugs.webkit.org/show_bug.cgi?id=29364
+
+ * parser/SourceCode.h:
+ (JSC::SourceCode::SourceCode):
+
+2009-09-21 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ REGRESSION (r48582): Crash in StructureStubInfo::initPutByIdTransition when reloading trac.webkit.org
+ https://bugs.webkit.org/show_bug.cgi?id=29599
+
+ It is unsafe to attempt to cache new property transitions on
+ dictionaries of any type.
+
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::tryCachePutByID):
+ * jit/JITStubs.cpp:
+ (JSC::JITThunks::tryCachePutByID):
+
+2009-09-21 Oliver Hunt <oliver@apple.com>
+
+ RS=Maciej Stachowiak.
+
+ Re-land SNES fix with corrected assertion.
+
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::resolveGlobal):
+ (JSC::Interpreter::tryCachePutByID):
+ (JSC::Interpreter::tryCacheGetByID):
+ * jit/JITStubs.cpp:
+ (JSC::JITThunks::tryCachePutByID):
+ (JSC::JITThunks::tryCacheGetByID):
+ (JSC::DEFINE_STUB_FUNCTION):
+ * runtime/BatchedTransitionOptimizer.h:
+ (JSC::BatchedTransitionOptimizer::BatchedTransitionOptimizer):
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::removeDirect):
+ * runtime/Structure.cpp:
+ (JSC::Structure::Structure):
+ (JSC::Structure::getEnumerablePropertyNames):
+ (JSC::Structure::despecifyDictionaryFunction):
+ (JSC::Structure::addPropertyTransitionToExistingStructure):
+ (JSC::Structure::addPropertyTransition):
+ (JSC::Structure::removePropertyTransition):
+ (JSC::Structure::toDictionaryTransition):
+ (JSC::Structure::toCacheableDictionaryTransition):
+ (JSC::Structure::toUncacheableDictionaryTransition):
+ (JSC::Structure::fromDictionaryTransition):
+ (JSC::Structure::removePropertyWithoutTransition):
+ * runtime/Structure.h:
+ (JSC::Structure::isDictionary):
+ (JSC::Structure::isUncacheableDictionary):
+ (JSC::Structure::):
+ * runtime/StructureChain.cpp:
+ (JSC::StructureChain::isCacheable):
+
+2009-09-21 Adam Roben <aroben@apple.com>
+
+ Revert r48573, as it caused many assertion failures
+
+ * interpreter/Interpreter.cpp:
+ * jit/JITStubs.cpp:
+ * runtime/BatchedTransitionOptimizer.h:
+ * runtime/JSObject.cpp:
+ * runtime/Structure.cpp:
+ * runtime/Structure.h:
+ * runtime/StructureChain.cpp:
+
+2009-09-21 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk>
+
+ Unreviewed make dist build fix. Missing files.
+
+ * GNUmakefile.am:
+
+2009-09-19 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Sam 'Cabin Boy' Weinig.
+
+ Fix stack alignment with ARM THUMB2 JIT.
+ https://bugs.webkit.org/show_bug.cgi?id=29526
+
+ Stack is currently being decremented by 0x3c, bump this to 0x40 to make this a
+ multiple of 16 bytes.
+
+ * jit/JITStubs.cpp:
+ (JSC::JITThunks::JITThunks):
+ * jit/JITStubs.h:
+
+2009-09-20 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ SNES is too slow
+ https://bugs.webkit.org/show_bug.cgi?id=29534
+
+ The problem was that the emulator used multiple classes with
+ more properties than our dictionary cutoff allowed, this resulted
+ in more or less all critical logic inside the emulator requiring
+ uncached property access.
+
+ Rather than simply bumping the dictionary cutoff, this patch
+ recognises that there are two ways to create a "dictionary"
+ structure. Either by adding a large number of properties, or
+ by removing a property. In the case of adding properties we
+ know all the existing properties will maintain their existing
+ offsets, so we could cache access to those properties, if we
+ know they won't be removed.
+
+ To make this possible, this patch adds the logic required to
+ distinguish a dictionary created by addition from one created
+ by removal. With this logic in place we can now cache access
+ to objects with large numbers of properties.
+
+ SNES performance improved by more than 6x.
+
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::resolveGlobal):
+ (JSC::Interpreter::tryCachePutByID):
+ (JSC::Interpreter::tryCacheGetByID):
+ * jit/JITStubs.cpp:
+ (JSC::JITThunks::tryCachePutByID):
+ (JSC::JITThunks::tryCacheGetByID):
+ (JSC::DEFINE_STUB_FUNCTION):
+ * runtime/BatchedTransitionOptimizer.h:
+ (JSC::BatchedTransitionOptimizer::BatchedTransitionOptimizer):
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::removeDirect):
+ * runtime/Structure.cpp:
+ (JSC::Structure::Structure):
+ (JSC::Structure::getEnumerablePropertyNames):
+ (JSC::Structure::despecifyDictionaryFunction):
+ (JSC::Structure::addPropertyTransitionToExistingStructure):
+ (JSC::Structure::addPropertyTransition):
+ (JSC::Structure::removePropertyTransition):
+ (JSC::Structure::toDictionaryTransition):
+ (JSC::Structure::toCacheableDictionaryTransition):
+ (JSC::Structure::toUncacheableDictionaryTransition):
+ (JSC::Structure::fromDictionaryTransition):
+ (JSC::Structure::removePropertyWithoutTransition):
+ * runtime/Structure.h:
+ (JSC::Structure::isDictionary):
+ (JSC::Structure::isUncacheableDictionary):
+ (JSC::Structure::):
+ * runtime/StructureChain.cpp:
+ (JSC::StructureChain::isCacheable):
+
+2009-09-19 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Implement ES5 Object.create function
+ https://bugs.webkit.org/show_bug.cgi?id=29524
+
+ Implement Object.create. Very simple patch, effectively Object.defineProperties
+ only creating the target object itself.
+
+ * runtime/CommonIdentifiers.h:
+ * runtime/ObjectConstructor.cpp:
+ (JSC::ObjectConstructor::ObjectConstructor):
+ (JSC::objectConstructorCreate):
+
+2009-09-19 Dan Bernstein <mitz@apple.com>
+
+ Fix clean debug builds.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+
+2009-09-19 Joerg Bornemann <joerg.bornemann@nokia.com>
+
+ Reviewed by George Staikos.
+
+ QtWebKit Windows CE compile fix
+
+ https://bugs.webkit.org/show_bug.cgi?id=29379
+
+ There is no _aligned_alloc or _aligned_free on Windows CE.
+ We just use the Windows code that was there before and use VirtualAlloc.
+ But that also means that the BLOCK_SIZE must be 64K as this function
+ allocates on 64K boundaries.
+
+ * runtime/Collector.cpp:
+ (JSC::Heap::allocateBlock):
+ (JSC::Heap::freeBlock):
+ * runtime/Collector.h:
+
+2009-09-19 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Implement ES5 Object.defineProperties function
+ https://bugs.webkit.org/show_bug.cgi?id=29522
+
+ Implement Object.defineProperties. Fairly simple patch, simply makes use of
+ existing functionality used for defineProperty.
+
+ * runtime/CommonIdentifiers.h:
+ * runtime/ObjectConstructor.cpp:
+ (JSC::ObjectConstructor::ObjectConstructor):
+ (JSC::defineProperties):
+ (JSC::objectConstructorDefineProperties):
+
+2009-09-19 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by NOBODY (Build fix).
+
+ Windows build fix part2
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+
+2009-09-19 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by NOBODY (Buildfix).
+
+ Windows build fix part 1.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+
+2009-09-18 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Implement ES5 Object.defineProperty function
+ https://bugs.webkit.org/show_bug.cgi?id=29503
+
+ Implement Object.defineProperty. This requires adding the API to
+ ObjectConstructor, along with a helper function that implements the
+ ES5 internal [[ToPropertyDescriptor]] function. It then adds
+ JSObject::defineOwnProperty that implements the appropriate ES5 semantics.
+ Currently defineOwnProperty uses a delete followed by a put to redefine
+ attributes of a property, clearly this is less efficient than it could be
+ but we can improve this if it needs to be possible in future.
+
+ * JavaScriptCore.exp:
+ * debugger/DebuggerActivation.cpp:
+ (JSC::DebuggerActivation::defineGetter):
+ (JSC::DebuggerActivation::defineSetter):
+ * debugger/DebuggerActivation.h:
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::privateExecute):
+ * jit/JITStubs.cpp:
+ Update defineGetter/Setter calls
+ * runtime/CommonIdentifiers.h:
+ * runtime/JSArray.cpp:
+ (JSC::JSArray::getOwnPropertySlot):
+ * runtime/JSGlobalObject.cpp:
+ (JSC::JSGlobalObject::defineGetter):
+ (JSC::JSGlobalObject::defineSetter):
+ * runtime/JSGlobalObject.h:
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::defineGetter):
+ (JSC::JSObject::defineSetter):
+ (JSC::putDescriptor):
+ (JSC::JSObject::defineOwnProperty):
+ * runtime/JSObject.h:
+ * runtime/ObjectConstructor.cpp:
+ (JSC::ObjectConstructor::ObjectConstructor):
+ (JSC::objectConstructorGetOwnPropertyDescriptor):
+ (JSC::toPropertyDescriptor):
+ (JSC::objectConstructorDefineProperty):
+ * runtime/ObjectPrototype.cpp:
+ (JSC::objectProtoFuncDefineGetter):
+ (JSC::objectProtoFuncDefineSetter):
+ * runtime/PropertyDescriptor.cpp:
+ (JSC::PropertyDescriptor::writable):
+ (JSC::PropertyDescriptor::enumerable):
+ (JSC::PropertyDescriptor::configurable):
+ (JSC::PropertyDescriptor::isDataDescriptor):
+ (JSC::PropertyDescriptor::isGenericDescriptor):
+ (JSC::PropertyDescriptor::isAccessorDescriptor):
+ (JSC::PropertyDescriptor::getter):
+ (JSC::PropertyDescriptor::setter):
+ (JSC::PropertyDescriptor::setDescriptor):
+ (JSC::PropertyDescriptor::setAccessorDescriptor):
+ (JSC::PropertyDescriptor::setWritable):
+ (JSC::PropertyDescriptor::setEnumerable):
+ (JSC::PropertyDescriptor::setConfigurable):
+ (JSC::PropertyDescriptor::setSetter):
+ (JSC::PropertyDescriptor::setGetter):
+ (JSC::PropertyDescriptor::equalTo):
+ (JSC::PropertyDescriptor::attributesEqual):
+ (JSC::PropertyDescriptor::attributesWithOverride):
+ * runtime/PropertyDescriptor.h:
+ (JSC::PropertyDescriptor::PropertyDescriptor):
+ (JSC::PropertyDescriptor::value):
+ (JSC::PropertyDescriptor::setValue):
+ (JSC::PropertyDescriptor::isEmpty):
+ (JSC::PropertyDescriptor::writablePresent):
+ (JSC::PropertyDescriptor::enumerablePresent):
+ (JSC::PropertyDescriptor::configurablePresent):
+ (JSC::PropertyDescriptor::setterPresent):
+ (JSC::PropertyDescriptor::getterPresent):
+ (JSC::PropertyDescriptor::operator==):
+ (JSC::PropertyDescriptor::):
+
+2009-09-18 Gabor Loki <loki@inf.u-szeged.hu>
+
+ Reviewed by Gavin Barraclough.
+
+ Build fix to enable ARM_THUMB2 on Linux
+ https://bugs.webkit.org/show_bug.cgi?id=
+
+ * jit/ExecutableAllocator.h:
+ (JSC::ExecutableAllocator::cacheFlush):
+ * jit/JITStubs.cpp:
+ * wtf/Platform.h:
+
+2009-09-18 Gabor Loki <loki@inf.u-szeged.hu>
+
+ Reviewed by Gavin Barraclough.
+
+ Defines two pseudo-platforms for ARM and Thumb-2 instruction set.
+ https://bugs.webkit.org/show_bug.cgi?id=29122
+
+ Introduces WTF_PLATFORM_ARM_TRADITIONAL and WTF_PLATFORM_ARM_THUMB2
+ macros on ARM platforms. The PLATFORM(ARM_THUMB2) should be used
+ when Thumb-2 instruction set is the required target. The
+ PLATFORM(ARM_TRADITIONAL) is for generic ARM instruction set. In
+ case where the code is common the PLATFORM(ARM) have to be used.
+
+ * assembler/ARMAssembler.cpp:
+ * assembler/ARMAssembler.h:
+ * assembler/ARMv7Assembler.h:
+ * assembler/MacroAssembler.h:
+ * assembler/MacroAssemblerARM.cpp:
+ * assembler/MacroAssemblerARM.h:
+ * assembler/MacroAssemblerCodeRef.h:
+ (JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr):
+ * jit/ExecutableAllocator.h:
+ * jit/JIT.h:
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::beginUninterruptedSequence):
+ (JSC::JIT::preserveReturnAddressAfterCall):
+ (JSC::JIT::restoreReturnAddressBeforeReturn):
+ (JSC::JIT::restoreArgumentReference):
+ (JSC::JIT::restoreArgumentReferenceForTrampoline):
+ * jit/JITOpcodes.cpp:
+ * jit/JITStubs.cpp:
+ (JSC::JITThunks::JITThunks):
+ * jit/JITStubs.h:
+ * wtf/Platform.h:
+ * yarr/RegexJIT.cpp:
+ (JSC::Yarr::RegexGenerator::generateEnter):
+
+2009-09-18 Joerg Bornemann <joerg.bornemann@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Fix the Qt/Windows CE build.
+
+ * JavaScriptCore.pri: Build the ce_time.cpp functions from
+ within Qt externally.
+ * wtf/DateMath.cpp: Removed unnecessary Qt #ifdef, for the
+ Qt build these functions are no external, too.
+
+2009-09-17 Janne Koskinen <janne.p.koskinen@digia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Symbian/WINSCW build fox.
+
+ Repeat Q_OS_WIN wchar_t hack for WINSCW, similar to
+ revision 24774.
+
+ WINSCW defines wchar_t, thus UChar has to be wchar_t
+
+ * wtf/unicode/qt4/UnicodeQt4.h:
+
+2009-09-17 Janne Koskinen <janne.p.koskinen@digia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Symbian/WINSCW build fix.
+
+ https://bugs.webkit.org/show_bug.cgi?id=29186
+
+ WINSCW Template specialisation name in declaration must the be the same as in implementation.
+
+ * runtime/LiteralParser.h:
+
+2009-09-15 Norbert Leser <norbert.leser@nokia.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=27060
+
+ Symbian compiler for emulator target (WINSCW) fails with
+ "illegal operand" for m_attributesInPrevious in structure.ccp
+ (when calling make_pair functions).
+ This error is apparently due to the compiler not properly
+ resolving the unsigned type of the declared bitfield.
+
+ Initial patch explicitly casted m_attributesInPrevious
+ to unsigned, but since bitfield optimization is not critical for
+ the emulator target, this conditional change in header file
+ appears to be least intrusive.
+
+ * runtime/Structure.h:
+
+2009-09-16 Gabor Loki <loki@inf.u-szeged.hu>
+
+ Reviewed by Darin Adler.
+
+ Fix GCC warnings on ARM_THUMB2 platform
+
+ * assembler/ARMv7Assembler.h:
+ (JSC::ARMThumbImmediate::countLeadingZerosPartial):
+ * assembler/MacroAssemblerARMv7.h:
+ (JSC::MacroAssemblerARMv7::branchTruncateDoubleToInt32):
+ (JSC::MacroAssemblerARMv7::moveFixedWidthEncoding):
+
+2009-09-16 Greg Bolsinga <bolsinga@apple.com>
+
+ Add ENABLE(INSPECTOR)
+ https://bugs.webkit.org/show_bug.cgi?id=29260
+
+ Reviewed by David Kilzer.
+
+ * wtf/Platform.h:
+
+2009-09-16 Greg Bolsinga <bolsinga@apple.com>
+
+ Add ENABLE(CONTEXT_MENUS)
+ https://bugs.webkit.org/show_bug.cgi?id=29225
+
+ Reviewed by David Kilzer.
+
+ * wtf/Platform.h:
+
+2009-09-16 Benjamin C Meyer <benjamin.meyer@torchmobile.com>
+
+ Reviewed by Eric Seidel.
+
+ The webkit stdint and stdbool headers exists because
+ the compiler MSVC doesn't include them. The check
+ should not check for PLATFORM(WIN_OS) but for MSVC.
+
+ * os-win32/stdbool.h:
+ * os-win32/stdint.h:
+
+2009-09-16 Greg Bolsinga <bolsinga@apple.com>
+
+ Add ENABLE(DRAG_SUPPORT)
+ https://bugs.webkit.org/show_bug.cgi?id=29233
+
+ Reviewed by David Kilzer.
+
+ * wtf/Platform.h:
+
+2009-09-16 Kevin Ollivier <kevino@theolliviers.com>
+
+ waf build fix after flag was moved to correct place.
+
+ * wscript:
+
+2009-09-16 Tor Arne Vestbø <tor.arne.vestbo@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Build fix for 64-bit Qt on Mac OS X
+
+ * wtf/Platform.h: Use JSVALUE64 on DARWIN, not only on MAC
+
+2009-09-16 Zoltan Herczeg <zherczeg@inf.u-szeged.hu>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Fix wtf/ThreadSpecific.h under Qt to free thread local objects.
+ https://bugs.webkit.org/show_bug.cgi?id=29295
+
+ This is an important fix when JavaScript workers are in use, since
+ unfreed ThreadGlobalDatas leak a big amount of memory (50-100k each).
+ QThreadStorage calls the destructor of a given object, which is the
+ ThreadSpecific::Data. Unlike pthread, Qt is object oriented, and does
+ not support the calling of a static utility function when the thread
+ is about to close. In this patch we call the ThreadSpecific::destroy()
+ utility function from the destructor of ThreadSpecific::Data. Moreover,
+ since Qt resets all thread local values to 0 before the calling of the
+ appropriate destructors, we set back the pointer to its original value.
+ This is necessary because the get() method of the ThreadSpecific
+ object may be called during the exuction of the destructor.
+
+ * wtf/ThreadSpecific.h:
+ (WTF::ThreadSpecific::Data::~Data):
+ (WTF::::~ThreadSpecific):
+ (WTF::::set):
+ (WTF::::destroy):
+
+2009-09-10 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Allow anonymous storage inside JSObject
+ https://bugs.webkit.org/show_bug.cgi?id=29168
+
+ Add the concept of anonymous slots to Structures so that it is
+ possible to store references to values that need marking in the
+ standard JSObject storage buffer. This allows us to reduce the
+ malloc overhead of some objects (by allowing them to store JS
+ values in the inline storage of the object) and reduce the
+ dependence of custom mark functions (if all an objects children
+ are in the standard object property storage there's no need to
+ mark them manually).
+
+ * JavaScriptCore.exp:
+ * runtime/JSObject.h:
+ (JSC::JSObject::putAnonymousValue):
+ (JSC::JSObject::getAnonymousValue):
+ (JSC::JSObject::addAnonymousSlots):
+ * runtime/JSWrapperObject.h:
+ (JSC::JSWrapperObject::createStructure):
+ (JSC::JSWrapperObject::JSWrapperObject):
+ (JSC::JSWrapperObject::setInternalValue):
+ * runtime/PropertyMapHashTable.h:
+ * runtime/Structure.cpp:
+ (JSC::Structure::~Structure):
+ (JSC::Structure::materializePropertyMap):
+ (JSC::Structure::addAnonymousSlotsTransition):
+ (JSC::Structure::copyPropertyTable):
+ (JSC::Structure::put):
+ (JSC::Structure::rehashPropertyMapHashTable):
+ * runtime/Structure.h:
+ (JSC::Structure::propertyStorageSize):
+ (JSC::StructureTransitionTable::reifySingleTransition):
+ * runtime/StructureTransitionTable.h:
+ (JSC::StructureTransitionTable::TransitionTable::addSlotTransition):
+ (JSC::StructureTransitionTable::TransitionTable::removeSlotTransition):
+ (JSC::StructureTransitionTable::TransitionTable::getSlotTransition):
+ (JSC::StructureTransitionTable::getAnonymousSlotTransition):
+ (JSC::StructureTransitionTable::addAnonymousSlotTransition):
+ (JSC::StructureTransitionTable::removeAnonymousSlotTransition):
+
+2009-09-15 Alex Milowski <alex@milowski.com>
+
+ Reviewed by Tor Arne Vestbø.
+
+ Added the ENABLE_MATHML define to the features
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2009-09-15 Csaba Osztrogonac <oszi@inf.u-szeged.hu>
+
+ Reviewed by Tor Arne Vestbø.
+
+ [Qt] Build fix for windows.
+
+ After http://trac.webkit.org/changeset/47795 the MinGW build broke,
+ because MinGW has __mingw_aligned_malloc instead of _aligned_malloc.
+
+ * runtime/Collector.cpp:
+ (JSC::Heap::allocateBlock): MinGW case added.
+ (JSC::Heap::freeBlock): MinGW case added.
+
+2009-09-15 Csaba Osztrogonac <oszi@inf.u-szeged.hu>
+
+ Reviewed by Tor Arne Vestbø.
+
+ [Qt] Build fix for Windows/MinGW
+
+ https://bugs.webkit.org/show_bug.cgi?id=29268
+
+ * wtf/Platform.h: JSVALUE32_64 temporarily disabled on PLATFORM(WIN_OS) with COMPILER(MINGW)
+
+2009-09-14 Gabor Loki <loki@inf.u-szeged.hu>
+
+ Reviewed by Gavin Barraclough.
+
+ Detect VFP at runtime in generic ARM port on Linux platform.
+ https://bugs.webkit.org/show_bug.cgi?id=29076
+
+ * JavaScriptCore.pri:
+ * assembler/MacroAssemblerARM.cpp: Added.
+ (JSC::isVFPPresent):
+ * assembler/MacroAssemblerARM.h:
+ (JSC::MacroAssemblerARM::supportsFloatingPoint):
+
+2009-09-14 Csaba Osztrogonac <oszi@inf.u-szeged.hu>
+
+ Reviewed by Tor Arne Vestbø.
+
+ [Qt] Build fix for windows build.
+
+ * JavaScriptCore.pri: Correct a logic error.
+ * pcre/dftables: Add missing paranthesis for tmpdir function.
+
+2009-09-12 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by NOBODY (Build fix).
+
+ Build fix for windows exports (again).
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+
+2009-09-12 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by NOBODY (Build fix).
+
+ Build fix for windows exports.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+
+2009-09-12 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by NOBODY (Build fix).
+
+ Correct fix for non-allinonefile builds
+
+ * runtime/ObjectConstructor.cpp:
+
+2009-09-12 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by NOBODY (Build fix).
+
+ Fix non-allinonefile builds
+
+ * runtime/ObjectConstructor.cpp:
+
+2009-09-12 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ [ES5] Implement Object.keys
+ https://bugs.webkit.org/show_bug.cgi?id=29170
+
+ This patch basically requires two separate steps, the first is to split getPropertyNames
+ into two functions -- getOwnPropertyNames and getPropertyNames, basically making them behave
+ in the same way as getOwnPropertySlot and getPropertySlot. In essence getOwnPropertyNames
+ produces the list of properties on an object excluding its prototype chain and getPropertyNames
+ just iterates the the object and its prototype chain calling getOwnPropertyNames at each level.
+
+ * API/JSCallbackObject.h:
+ * API/JSCallbackObjectFunctions.h:
+ (JSC::::getOwnPropertyNames):
+ * JavaScriptCore.exp:
+ * debugger/DebuggerActivation.cpp:
+ (JSC::DebuggerActivation::getOwnPropertyNames):
+ * debugger/DebuggerActivation.h:
+ * runtime/CommonIdentifiers.h:
+ * runtime/JSArray.cpp:
+ (JSC::JSArray::getOwnPropertyNames):
+ * runtime/JSArray.h:
+ * runtime/JSByteArray.cpp:
+ (JSC::JSByteArray::getOwnPropertyNames):
+ * runtime/JSByteArray.h:
+ * runtime/JSNotAnObject.cpp:
+ (JSC::JSNotAnObject::getOwnPropertyNames):
+ * runtime/JSNotAnObject.h:
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::getOwnPropertyNames):
+ * runtime/JSObject.h:
+ * runtime/JSVariableObject.cpp:
+ (JSC::JSVariableObject::getOwnPropertyNames):
+ * runtime/JSVariableObject.h:
+ * runtime/ObjectConstructor.cpp:
+ (JSC::ObjectConstructor::ObjectConstructor):
+ (JSC::objectConstructorKeys):
+ * runtime/RegExpMatchesArray.h:
+ (JSC::RegExpMatchesArray::getOwnPropertyNames):
+ * runtime/StringObject.cpp:
+ (JSC::StringObject::getOwnPropertyNames):
+ * runtime/StringObject.h:
+ * runtime/Structure.cpp:
+ (JSC::Structure::getOwnEnumerablePropertyNames):
+ (JSC::Structure::getEnumerablePropertyNames):
+ * runtime/Structure.h:
+
+2009-09-11 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ getPropertyNames caching is invalid when the prototype chain contains objects with custom getPropertyNames
+ https://bugs.webkit.org/show_bug.cgi?id=29214
+
+ Add a flag to TypeInfo to indicate whether a type overrides getPropertyNames.
+ This flag is used to make sure that caching of the property name data is safe.
+
+ * API/JSCallbackConstructor.h:
+ (JSC::JSCallbackConstructor::createStructure):
+ * debugger/DebuggerActivation.h:
+ (JSC::DebuggerActivation::createStructure):
+ * runtime/BooleanObject.h:
+ (JSC::BooleanObject::createStructure):
+ * runtime/DatePrototype.h:
+ (JSC::DatePrototype::createStructure):
+ * runtime/FunctionPrototype.h:
+ (JSC::FunctionPrototype::createStructure):
+ * runtime/JSONObject.h:
+ (JSC::JSONObject::createStructure):
+ * runtime/JSObject.h:
+ (JSC::JSObject::createStructure):
+ * runtime/JSTypeInfo.h:
+ (JSC::TypeInfo::hasDefaultGetPropertyNames):
+ * runtime/JSVariableObject.h:
+ (JSC::JSVariableObject::createStructure):
+ * runtime/JSWrapperObject.h:
+ (JSC::JSWrapperObject::createStructure):
+ * runtime/MathObject.h:
+ (JSC::MathObject::createStructure):
+ * runtime/NumberConstructor.h:
+ (JSC::NumberConstructor::createStructure):
+ * runtime/NumberObject.h:
+ (JSC::NumberObject::createStructure):
+ * runtime/RegExpConstructor.h:
+ (JSC::RegExpConstructor::createStructure):
+ * runtime/RegExpObject.h:
+ (JSC::RegExpObject::createStructure):
+ * runtime/StructureChain.cpp:
+ (JSC::StructureChain::isCacheable):
+
+2009-09-11 Alexey Proskuryakov <ap@webkit.org>
+
+ Reviewed by Geoff Garen.
+
+ https://bugs.webkit.org/show_bug.cgi?id=29207
+ Add checks for using WebCore JS context on secondary threads
+
+ * runtime/JSGlobalData.cpp: (JSC::JSGlobalData::JSGlobalData):
+ * runtime/JSGlobalData.h:
+ Added a new mainThreadOnly flag that WebCore would set.
+
+ * runtime/Collector.cpp: (JSC::Heap::registerThread): JSC API methods always call this,
+ so this is a good place to check that the API isn't used form a wrong thread.
+
+2009-09-11 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Compiling JavaScriptCore on sparc 64 with gcc fails.
+
+ ThreadSafeShared uses the atomic __gnu_cxx::__exchange_and_add with an int,
+ however on sparc 64 the _Atomic_word argument is typedefed to long (8 bytes).
+
+ The patch disables WTF_USE_LOCKFREE_THREADSAFESHARED in ThreadSafeShared to use
+ a mutex instead when compiling for sparc 64 with gcc.
+
+ https://bugs.webkit.org/show_bug.cgi?id=29175
+
+ * wtf/Platform.h:
+ __sparc64__ is not defined on all OS.
+ Uses instead: __sparc__ && __arch64__ || __sparcv9
+ * wtf/Threading.h:
+
+2009-09-11 Prasanth Ullattil <prasanth.ullattil@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Fix compile error on Windows7(64Bit) with latest SDK.
+
+ Added the missing include file.
+
+ * runtime/UString.cpp:
+
+2009-09-11 Joerg Bornemann <joerg.bornemann@trolltech.com>
+
+ Reviewed by Simon Hausmann.
+
+ Qt/Windows CE compile fix, include the executable allocator and
+ markstack implementation in the windows build.
+
+ * JavaScriptCore.pri:
+
+2009-09-08 John Abd-El-Malek <jam@chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ Remove unneeded define for ActiveX.
+ https://bugs.webkit.org/show_bug.cgi?id=29054
+
+ * wtf/Platform.h:
+
+2009-09-10 Mark Rowe <mrowe@apple.com>
+
+ Rubber-stamped by Sam Weinig.
+
+ Update JavaScriptCore and WebKit's FeatureDefines.xcconfig so that they are in sync with WebCore as they need to be.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2009-09-10 Fumitoshi Ukai <ukai@chromium.org>
+
+ Reviewed by Alexey Proskuryakov.
+
+ Export WTF::tryFastMalloc used in WebSocketChannel.
+ https://bugs.webkit.org/show_bug.cgi?id=28038
+
+ * JavaScriptCore.exp:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+
+2009-09-10 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by NOBODY (Build fix).
+
+ Make StructureTransitionTable use an enum for the PtrAndFlags member
+ used for the single transition slot optimisation.
+
+ * runtime/StructureTransitionTable.h:
+ (JSC::StructureTransitionTable::StructureTransitionTable):
+ (JSC::StructureTransitionTable::usingSingleTransitionSlot):
+ (JSC::StructureTransitionTable::):
+
+2009-09-10 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Refactor StructureTransitionTable and Structure to unify handling of the single slot optimization
+ https://bugs.webkit.org/show_bug.cgi?id=29141
+
+ Make StructureTransitionTable encapsulate the single transition slot optimization.
+
+ * runtime/Structure.cpp:
+ (JSC::Structure::Structure):
+ (JSC::Structure::~Structure):
+ (JSC::Structure::addPropertyTransitionToExistingStructure):
+ (JSC::Structure::addPropertyTransition):
+ (JSC::Structure::addPropertyWithoutTransition):
+ (JSC::Structure::removePropertyWithoutTransition):
+ (JSC::Structure::hasTransition):
+ * runtime/Structure.h:
+ (JSC::StructureTransitionTable::contains):
+ (JSC::StructureTransitionTable::get):
+ (JSC::StructureTransitionTable::hasTransition):
+ (JSC::StructureTransitionTable::reifySingleTransition):
+ * runtime/StructureTransitionTable.h:
+ (JSC::StructureTransitionTable::StructureTransitionTable):
+ (JSC::StructureTransitionTable::~StructureTransitionTable):
+ (JSC::StructureTransitionTable::remove):
+ (JSC::StructureTransitionTable::add):
+ (JSC::StructureTransitionTable::table):
+ (JSC::StructureTransitionTable::singleTransition):
+ (JSC::StructureTransitionTable::usingSingleTransitionSlot):
+ (JSC::StructureTransitionTable::setSingleTransition):
+ (JSC::StructureTransitionTable::setTransitionTable):
+ (JSC::StructureTransitionTable::):
+ * wtf/PtrAndFlags.h:
+ (WTF::PtrAndFlags::PtrAndFlags):
+
+2009-09-10 Zoltan Horvath <zoltan@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ Implement fastDeleteSkippingDestructor for FastAllocBase and fastDeleteAllValues for HashSet
+ https://bugs.webkit.org/show_bug.cgi?id=25930
+
+ FastAllocBase has been extended with fastDeleteSkippingDestructor function which
+ releases memory without destructor call. fastDeleteAllValues has been implemented
+ similar as deleteAllValues but it uses fastDelete function to release memory.
+
+ * wtf/FastAllocBase.h:
+ (WTF::fastDeleteSkippingDestructor):
+ * wtf/HashSet.h:
+ (WTF::fastDeleteAllValues):
+
+2009-09-10 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Darin Adler.
+
+ ARM compiler does not understand GCC visibility attribute
+ https://bugs.webkit.org/show_bug.cgi?id=29079
+
+ * API/JSBase.h: Make the test more specific to hit only
+ the GCC compiler
+
+2009-09-10 Adam Barth <abarth@webkit.org>
+
+ Unreviewed revert of the previous change. It broke the tests.
+
+ * wtf/dtoa.cpp:
+ (WTF::dtoa):
+
+2009-09-10 Ben Laurie <benl@google.com>
+
+ Reviewed by Adam Barth.
+
+ <https://bugs.webkit.org/show_bug.cgi?id=26836>
+
+ If dtoa was given a small buffer and the number was either infinite or
+ NaN, then the buffer would be overflowed.
+
+ * wtf/dtoa.cpp:
+
+2009-09-09 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Darin Adler.
+
+ Change reinterpret_cast to static_cast in r48212.
+
+ * jit/ExecutableAllocator.h:
+ (JSC::ExecutableAllocator::cacheFlush):
+
+2009-09-09 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Darin Adler.
+
+ Remove WTF_PLATFORM_FORCE_PACK as it is no longer used
+ https://bugs.webkit.org/show_bug.cgi?id=29066
+
+ * wtf/Platform.h:
+
+2009-09-09 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Ariya Hidayat.
+
+ Implement flushing the instruction cache for Symbian
+ https://bugs.webkit.org/show_bug.cgi?id=29075
+
+ * jit/ExecutableAllocator.h:
+ (JSC::ExecutableAllocator::cacheFlush): Call IMB_Range to flush
+ the instruction cache on Symbian
+
+2009-09-09 Kent Hansen <khansen@trolltech.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=29024
+ Make JavaScriptCore compile on platforms with case-insensitive file systems and typeinfo.h in STL
+
+ These platforms include Microsoft Visual Studio 2003, and Symbian with Metrowerks compiler.
+
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * runtime/JSTypeInfo.h: Copied from JavaScriptCore/runtime/TypeInfo.h.
+ * runtime/Structure.h:
+ * runtime/TypeInfo.h: Removed.
+
+2009-09-08 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ JSON.stringify(Date) loses the milliseconds information
+ https://bugs.webkit.org/show_bug.cgi?id=29063
+
+ Make sure we include milliseconds in the output of toISOString.
+
+ * runtime/DatePrototype.cpp:
+ (JSC::dateProtoFuncToISOString):
+
+2009-09-08 Kevin Ollivier <kevino@theolliviers.com>
+
+ wx build fix, generate derived sources earlier in order to make sure
+ they're found by the build system when generating the list of sources to build.
+
+ * wscript:
+
+2009-09-08 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Build fix when USE(LOCKFREE_THREADSAFESHARED) is not defined
+ https://bugs.webkit.org/show_bug.cgi?id=29011
+
+ * wtf/Threading.h: Use LOCKFREE_THREADSAFESHARED guard for
+ atomicIncrement and atomicDecrement
+
+2009-09-07 Zoltan Horvath <zoltan@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ Allow custom memory allocation control in Yarr's RegexInterpreter
+ https://bugs.webkit.org/show_bug.cgi?id=29025
+
+ Inherits RegexInterpreter classes from FastAllocBase (bug #20422), which has
+ been instantiated by 'new':
+
+ class ByteDisjunction
+ -> instantiated in JavaScriptCore/yarr/RegexInterpreter.cpp:1462
+
+ struct BytecodePattern
+ -> instantiated in JavaScriptCore/yarr/RegexInterpreter.cpp:1279
+
+ * yarr/RegexInterpreter.h:
+
+2009-09-07 Drew Wilson <atwilson@google.com>
+
+ Reverting r48121 to fix Windows build errors.
+
+ * JavaScriptCore.exp:
+
+2009-09-07 Drew Wilson <atwilson@google.com>
+
+ Reviewed by David Levin.
+
+ Enable SHARED_WORKERS by default
+ https://bugs.webkit.org/show_bug.cgi?id=28959
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2009-09-07 Fumitoshi Ukai <ukai@chromium.org>
+
+ Reviewed by Alexey Proskuryakov.
+
+ Export WTF::tryFastMalloc used in WebSocketChannel.
+ https://bugs.webkit.org/show_bug.cgi?id=28038
+
+ * JavaScriptCore.exp:
+
+2009-09-04 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by NOBODY (Build fix).
+
+ Fix windows export files
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+
+2009-09-04 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ [[ToString]] conversion should use the actual toString function for String objects.
+
+ Remove incorrect specialisations of toString conversions on StringObject.
+
+ * JavaScriptCore.exp:
+ * runtime/StringObject.cpp:
+ * runtime/StringObject.h:
+
+2009-09-04 Steve Falkenburg <sfalken@apple.com>
+
+ Windows build fix.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Add new export.
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: Add new export.
+
+2009-09-04 Steve Falkenburg <sfalken@apple.com>
+
+ Windows build fix.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Remove unneeded export.
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: Remove unneeded export.
+
+2009-09-04 Darin Adler <darin@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ DateInstance object collected on ARM JIT (JSValue: WTF_USE_JSVALUE32)
+ https://bugs.webkit.org/show_bug.cgi?id=28909
+
+ Part two.
+
+ Make some improvements to garbage collection code:
+
+ 1) Create a runtime assertion that catches any classes that
+ override markChildren but have the HasDefaultMark bit set.
+ 2) Remove checks of the mark bit outside the MarkStack::append
+ function; they are redundant.
+ 3) Improve the efficiency of the asObject and asArray functions
+ when called on JSCell* to avoid a round trip to JSValue.
+ 4) Make more callers use the checked asCell and asObject
+ casting functions rather than unchecked casts.
+ 5) Removed the JSCell::marked function and other GC-related
+ functions because these operations are no longer things that
+ code other than the core GC code needs to do directly. Fixed
+ callers that were calling them.
+
+ * runtime/Collector.cpp:
+ (JSC::Heap::markConservatively): Removed unneeded call to MarkStack::drain.
+ (JSC::Heap::markProtectedObjects): Removed unneeded check of the mark
+ bit and call to MarkStack::drain.
+ (JSC::Heap::collect): Removed unneeded checks of the mark bit and also
+ changed call to SmallStrings::mark to call markChildren instead to match
+ the rest of the objects.
+ (JSC::typeName): Removed unneeded cast to JSObject*.
+
+ * runtime/JSArray.h:
+ (JSC::asArray): Added an overload for JSCell* and changed the JSValue
+ version to call it. Removed some unneeded casts.
+ (JSC::JSArray::markChildrenDirect): Marked this function inline. It's in
+ a header, and if not marked inline this could lead to linking problems.
+ (JSC::MarkStack::markChildren): Added. This helper function is used by
+ the drain function to avoid repating code. Also added the code here to
+ check fro default mark violations in debug code. If a markChildren
+ function adds something to the mark stack, but the type info claimed
+ hasDefaultMark was true, then we will get an assertion now. Also fixed
+ the assertion about the mark bit to use the Heap function directly
+ because we don't have a JSCell::marked function any more.
+ (JSC::MarkStack::drain): Changed a local variable from "v" to "value",
+ and from "currentCell" to "cell". Changed to call markChildren in two
+ places instead of repeating a chain of if statements twice. Changed
+ code that reads and writes the mark bit to use Heap::isCellMarked and
+ Heap::markCell so we can eliminate the JSCell::marked and
+ JSCell::markCellDirect functions.
+
+ * runtime/JSCell.h: Removed JSCell's markCellDirect and marked member
+ functions. Added a comment explaining that asCell should be deprecated
+ in favor of the JSValue asCell member function.
+ (JSC::MarkStack::append): Added the assertion that catches callers
+ that have set the HasDefaultMark bit incorrectly. Changed
+ code that reads and writes the mark bit to use Heap::isCellMarked and
+ Heap::markCell so we can eliminate the JSCell::marked and
+ JSCell::markCellDirect functions. Moved the overload of
+ MarkStack::append for JSValue here so it can call through to the cell
+ version. The old version had a copy of all the code instead, but that
+ repeated the conversion from JSValue to JSCell* and the check for
+ whether a value is a cell multiple times.
+ (JSC::Structure::markAggregate): Moved this function here to avoid
+ dependencies for Structure.h, since this calls MarkStack::append.
+
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::markChildren): Added code to clear
+ m_isCheckingForDefaultMarkViolation so the marking done by JSObject
+ doesn't trigger the assertion.
+
+ * runtime/JSValue.h: Moved some stray includes that were outside the
+ header guard inside it. Not sure how that happened! Removed the
+ GC-related member functions markChildren, hasChildren, marked, and
+ markDirect.
+
+ * runtime/JSWrapperObject.h: Made markChildren private.
+ (JSC::JSWrapperObject::createStructure): Added. Fixes a bug where the
+ HasDefaultMark bit was set.
+
+ * runtime/MarkStack.h: Added m_isCheckingForDefaultMarkViolation and
+ initialized it to false. Moved the append function body from here to
+ JSCell.h. Added a declaration of a private markChildren function used
+ inside the drain function.
+
+ * runtime/SmallStrings.cpp:
+ (JSC::SmallStrings::markChildren): Changed the name and style of this
+ function to match other functions. This allows us to share the normal
+ mark stack code path.
+
+ * runtime/SmallStrings.h: Changed the name and interface of mark to
+ the more-normal markChildren style.
+
+ * runtime/Structure.h: Moved the body of markAggregate into the
+ JSCell.h to avoid a circular dependency with JSCell.h.
+
+2009-09-04 Darin Adler <darin@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ DateInstance object collected on ARM JIT (JSValue: WTF_USE_JSVALUE32)
+ https://bugs.webkit.org/show_bug.cgi?id=28909
+
+ Part one.
+
+ Make some improvements to garbage collection code:
+
+ 1) Fix the two classes that had the default mark bit set but
+ should not.
+ 2) Remove checks of the mark bit outside the MarkStack::append
+ function; they are redundant.
+ 3) Make more callers use the checked asCell and asObject
+ casting functions rather than unchecked casts.
+ 4) Removed some GC-related functions because these operations are
+ no longer things that code other than the core GC code needs
+ to do directly. Fixed callers that were calling them.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::markAggregate): Removed unneeded check of the mark
+ bit before calling MarkStack::append.
+
+ * interpreter/Register.h: Removed unneeded marked and markChildren
+ functions.
+
+ * jit/JITStubs.cpp:
+ (op_eq): Removed unneeded assertions, instead using checked casting
+ functions such as asObject.
+
+ * runtime/ArgList.h: Added now-needed forward declaration of MarkStack.
+
+ * runtime/GetterSetter.cpp:
+ (JSC::GetterSetter::markChildren): Remmoved unneeded check of the mark bit.
+
+ * runtime/GlobalEvalFunction.h:
+ (JSC::GlobalEvalFunction::createStructure): Added. Fixes a bug where the
+ HasDefaultMark bit was set.
+
+ * runtime/JSCell.cpp:
+ (JSC::JSCell::getObject): Use asObject to avoid a direct static_cast.
+
+ * runtime/JSObject.h:
+ (JSC::asObject): Added an overload for JSCell* and changed the JSValue
+ version to call it.
+ (JSC::JSValue::get): Use asObject to avoid a direct static_cast.
+
+ * runtime/JSWrapperObject.h: Made markChildren private.
+ (JSC::JSWrapperObject::createStructure): Added. Fixes a bug where the
+ HasDefaultMark bit was set. Later we may want to optimize this for
+ wrapper types that never have cells in their internal values, but there
+ is no measured performance regression in SunSpider or V8 doing this
+ all the time.
+
+ * runtime/MarkStack.cpp: Tweaked formatting.
+
+2009-09-04 Kevin Ollivier <kevino@theolliviers.com>
+
+ wx build fix. Switch USE_ defines over to the compiler so that they can be
+ checked by files not including config.h (like WebCorePrefix.h).
+
+ * wtf/Platform.h:
+
+2009-09-03 Yong Li <yong.li@torchmobile.com>
+
+ Reviewed by David Levin.
+
+ Remove unnecessary dependency on unistd.h
+ https://bugs.webkit.org/show_bug.cgi?id=28962
+
+ * runtime/Completion.cpp:
+
+2009-09-03 Fumitoshi Ukai <ukai@chromium.org>
+
+ Reviewed by Eric Seidel.
+
+ Add strnstr for Linux and Windows in StringExtras.h
+ https://bugs.webkit.org/show_bug.cgi?id=28901
+
+ * wtf/StringExtras.h:
+ (strnstr):
+
+2009-09-03 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
+
+ Reviewed by Darin Adler.
+
+ Allow custom memory allocation control for JavaScriptCore's HashEntry class
+ https://bugs.webkit.org/show_bug.cgi?id=27830
+
+ Inherits HashEntry class from FastAllocBase because it has been
+ instantiated by 'new' JavaScriptCore/runtime/Lookup.cpp:32.
+
+ * runtime/Lookup.h:
+
+2009-09-02 Gavin Barraclough <barraclough@apple.com>
+
+ Should crash if JIT code buffer allocation fails.
+
+ https://bugs.webkit.org/show_bug.cgi?id=28926
+ <rdar://problem/7031922>
+
+ * jit/ExecutableAllocatorPosix.cpp:
+ (JSC::ExecutablePool::systemAlloc):
+ * jit/ExecutableAllocatorWin.cpp:
+ (JSC::ExecutablePool::systemAlloc):
+
+2009-09-02 Kevin Ollivier <kevino@theolliviers.com>
+
+ waf build fixes for Windows/MSVC.
+
+ * wscript:
+
+2009-09-02 Kevin Ollivier <kevino@theolliviers.com>
+
+ Build fix for building on Windows.
+
+ * wtf/ThreadingPthreads.cpp:
+
+2009-09-02 Norbert Leser <norbert.leser@nokia.com>
+
+ Reviewed by Eric Seidel.
+
+ Use fastMalloc when neither MMAP nor VIRTUALALLOC are enabled
+
+ RegisterFile constructor currently throws #error when both
+ MMAP and VIRTUALALLOC conditions fail.
+ On any platform that does not provide these features
+ (for instance, Symbian),
+ the fallback should be regular malloc (or fastMalloc).
+ It is functionally equivalent in this case, even though it may
+ have certain drawbacks such as lack of dynamic pre-allocation.
+
+ * interpreter/RegisterFile.cpp:
+ (JSC::RegisterFile::~RegisterFile):
+ * interpreter/RegisterFile.h:
+ (JSC::RegisterFile::RegisterFile):
+
+2009-08-31 Robert Agoston <Agoston.Robert@stud.u-szeged.hu>
+
+ Reviewed by Gavin Barraclough.
+
+ Fixed typo.
+ https://bugs.webkit.org/show_bug.cgi?id=28691
+
+ * parser/Parser.h:
+ (JSC::Parser::parse):
+
+2009-08-27 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ JSON Stringifier does not follow ES5 spec for handling of Number, String and Boolean objects
+ https://bugs.webkit.org/show_bug.cgi?id=28797
+
+ Fixed unwrapBoxedPrimitive to do the right thing, which necessitated a couple of new exception
+ checks, and corrected the logic in gap to correctly convert Number and String objects.
+
+ * runtime/JSONObject.cpp:
+ (JSC::unwrapBoxedPrimitive):
+ (JSC::gap):
+ (JSC::Stringifier::Stringifier):
+ (JSC::Stringifier::appendStringifiedValue):
+
+2009-08-27 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Adam Roben.
+
+ JSON.stringify replacer array does not accept values that are not string primitives.
+ https://bugs.webkit.org/show_bug.cgi?id=28788
+
+ Update the JSON stringifier to initialise its replacer array according to the most
+ recent version of the spec.
+
+ * runtime/Identifier.h:
+ (JSC::Identifier::from):
+ * runtime/JSONObject.cpp:
+ (JSC::Stringifier::Stringifier):
+
+2009-08-27 Alexey Proskuryakov <ap@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ https://bugs.webkit.org/show_bug.cgi?id=28753
+ <rdar://problem/7173448> Excessive number of threads (and a crash)
+
+ * wtf/Threading.h: (WTF::atomicIncrement): Changed atomicIncrement to match decrement
+ and return the new value. Also added using directives for these functions, to match
+ te rest of WTF.
+
+2009-08-27 Brent Fulgham <bfulgham@webkit.org>
+
+ Reviewed by Adam Roben.
+
+ Link the testapi against CFLite when building the WinCairo port.
+
+ * JavaScriptCore.vcproj/testapi/testapi.vcproj: Add new Release_CFLite
+ target. Update all targets to inherit from either the
+ JavaScriptCF.vsprops (Apple target) or the JavaScriptCFLite.vsprops
+ file (WinCairo target).
+ * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops: Remove
+ input file CoreFoundation.lib. This is provided by either the
+ JavaScriptCF.vsprops or JavaScriptCFLite.vsprops file.
+
+2009-08-27 Steve Falkenburg <sfalken@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Fix Windows-specific crash due to missing memory clearing call.
+
+ * runtime/Collector.cpp:
+ (JSC::Heap::allocateBlock):
+
+2009-08-27 Brent Fulgham <bfulgham@webkit.org>
+
+ Build fix: JavaScriptCore_debug.def missing some exports. Apple
+ Windows build does not use this file, so it was not noticed previously.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+
+2009-08-27 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ x86-64 GTK broken due to code offsets changing, pointers sometimes packed into immediates.
+ https://bugs.webkit.org/show_bug.cgi?id=28317
+
+ Missed one, fix part II.
+
+ * assembler/MacroAssemblerX86Common.h:
+ (JSC::MacroAssemblerX86Common::move):
+ * assembler/X86Assembler.h:
+ (JSC::CAN_SIGN_EXTEND_8_32):
+
+2009-08-27 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Adam Roben.
+
+ JSON.stringify replacer array does not accept values that are not string primitives.
+ https://bugs.webkit.org/show_bug.cgi?id=28788
+
+ Update the JSON stringifier to initialise its replacer array according to the most
+ recent version of the spec.
+
+ * runtime/Identifier.h:
+ (JSC::Identifier::from):
+ * runtime/JSONObject.cpp:
+ (JSC::Stringifier::Stringifier):
+
+2009-08-27 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Alexey Proskuryakov.
+
+ JSON parser accepts trailing comma in array literals
+ https://bugs.webkit.org/show_bug.cgi?id=28779
+
+ Update parser to correctly fail if there's a trailing comma.
+
+ * runtime/LiteralParser.cpp:
+ (JSC::LiteralParser::parse):
+
+2009-08-26 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ 'this' in JSON.parse reviver is the global object
+ https://bugs.webkit.org/show_bug.cgi?id=28752
+
+ This is a technically simple change, we merely update the code for calling
+ the reviver function to pass the correct this object. Doing so however
+ exposes the holder to arbitrary mutation by the reviver function so it is
+ necessary for us to now guard all property accesses against the possibility
+ of failure.
+
+ * runtime/JSArray.h:
+ JSON needs to delete a property from the array, so we friend its
+ Walker class so that we can make a non-virtual call to the arrays
+ delete and getOwnPropertySlot methods.
+ * runtime/JSONObject.cpp:
+ (JSC::Walker::callReviver):
+ We need to pass the correct this object
+ (JSC::Walker::walk):
+ Update calls to callReviver, and update property logic logic
+ to correctly handle the holder being mutated by the reviver
+ function.
+
+2009-08-26 Alice Liu <alice.liu@apple.com>
+
+ Windows build fix: added some exported symbols
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+
+2009-08-26 Geoffrey Garen <ggaren@apple.com>
+
+ Windows build fix: Removed some exported symbols that no longer exist.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+
+2009-08-26 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Olliejver Hunt.
+
+ x86-64 GTK broken due to code offsets changing, pointers sometimes packed into immediates.
+ https://bugs.webkit.org/show_bug.cgi?id=28317
+
+ We rely on a slightly OS X specific behaviour, that x86-64 applications have a 4Gb zero page,
+ so pointers are never representable as a 32-bit integer, and always have to be represented by
+ a separate immediate load instruction, rather than within the immediate field of an arithmetic
+ or memory operation.
+
+ We explicitly check for a couple of cases where a value might be representable in 32-bit, but
+ these probably never kick in on Mac OS, and only kick in to hose GTK. Deleting these does not
+ show a performance degradation on SunSpider. Remove.
+
+ * assembler/MacroAssemblerX86_64.h:
+ (JSC::MacroAssemblerX86_64::storePtr):
+ (JSC::MacroAssemblerX86_64::branchPtr):
+
+2009-08-26 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ A bit of Collector refatoring.
+
+ SunSpider says no change. v8 says 1.003x faster (1.02x faster on splay).
+
+ * JavaScriptCore.exp:
+
+ * runtime/JSCell.cpp:
+ (JSC::JSCell::toPrimitive):
+ (JSC::JSCell::getPrimitiveNumber):
+ (JSC::JSCell::toBoolean):
+ (JSC::JSCell::toNumber):
+ (JSC::JSCell::toString):
+ (JSC::JSCell::toObject): Removed pure virtual functions from
+ JSCell, so the collector can construct one. This allowed
+ me to remove a bunch of ASSERT_NOT_REACHED throughout the
+ code, too.
+
+ * runtime/JSCell.h:
+ (JSC::JSCell::JSCell): ditto
+ (JSC::Heap::heap): Inlined this function because it's trivial.
+
+ * JavaScriptCore.exp:
+
+ * runtime/Collector.cpp:
+ (JSC::Heap::destroy):
+ (JSC::Heap::allocateBlock):
+ (JSC::Heap::freeBlock):
+ (JSC::Heap::freeBlocks): Renamed freeHeap to freeBlocks, since
+ it doesn't actually free the Heap object.
+ (JSC::Heap::heapAllocate):
+ (JSC::Heap::sweep):
+ * runtime/Collector.h: Refactored block allocation and destruction
+ into helper functions.
+
+ * runtime/GetterSetter.cpp:
+ * runtime/JSAPIValueWrapper.cpp:
+ * runtime/JSPropertyNameIterator.cpp: Removed dummy implementations
+ of pure virtual functions. (See above.)
+
+=== End re-roll-in of r47738:47740 with Windows crash fixed ===
+
+2009-08-26 Geoffrey Garen <ggaren@apple.com>
+
+ Build fix: start out with a 32-bit value to avoid a shortening warning.
+
+ * runtime/Collector.cpp:
+ (JSC::Heap::sweep):
+
+2009-08-24 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Substantially reduced VM thrash in the GC heap.
+
+ 1.08x faster on v8 (1.60x faster on v8-splay).
+
+ 1.40x faster on bench-alloc-nonretained.
+
+ 1.90x faster on bench-alloc-retained.
+
+ SunSpider says no change.
+
+ * runtime/Collector.cpp:
+ (JSC::Heap::heapAllocate): Fixed a long-standing bug: update a few local
+ variables unconditionally after calling collect(), since they may be used
+ even if we don't "goto scan". (In the bug I saw, usedBlocks got out of
+ sync with heap.usedBlocks).
+ (JSC::Heap::sweep): Keep enough free heap space to accomodate
+ the number of objects we'll allocate before the next GC, plus 25%, for
+ good measure.
+ * runtime/Collector.h: Bumped the block size to 256k. This seems to give
+ the best cache performance, and it prevents us from initiating lots of
+ VM traffic to recover very small chunks of memory.
+
+=== Begin re-roll-in of r47738:47740 with Windows crash fixed ===
+
+2009-08-25 Drew Wilson <atwilson@google.com>
+
+ Reviewed by David Levin.
+
+ postMessage() spec now supports sending arrays of ports
+ https://bugs.webkit.org/show_bug.cgi?id=26902
+
+ Added OwnPtr to VectorTraits so we can store OwnPtrs in Vectors.
+
+ * wtf/VectorTraits.h:
+
+2009-08-26 Xan Lopez <xlopez@igalia.com>
+
+ Rubber-stamped by Gustavo Noronha.
+
+ Remove duplicated files from file list.
+
+ * GNUmakefile.am:
+
+2009-08-26 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by NOBODY (Build fix).
+
+ More export fixes.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+
+2009-08-26 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by NOBODY (Build fix).
+
+ Hopefully fix all the exports from JSC on windows
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+
+2009-08-26 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by NOBODY (Build fixes).
+
+ Forgot I added files to JavaScriptCore.
+
+ * GNUmakefile.am:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.pri:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCoreSources.bkl:
+
+2009-08-25 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ [ES5] Implement getOwnPropertyDescriptor
+ https://bugs.webkit.org/show_bug.cgi?id=28724
+
+ Implement the core runtime support for getOwnPropertyDescriptor.
+ This adds a virtual getOwnPropertyDescriptor method to every class
+ that implements getOwnPropertySlot that shadows the behaviour of
+ getOwnPropertySlot. The alternative would be to make getOwnPropertySlot
+ (or PropertySlots in general) provide property attribute information,
+ but quick testing showed this to be a regression.
+
+ * JavaScriptCore.exp:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * runtime/Arguments.cpp:
+ (JSC::Arguments::getOwnPropertyDescriptor):
+ * runtime/Arguments.h:
+ * runtime/ArrayPrototype.cpp:
+ (JSC::ArrayPrototype::getOwnPropertyDescriptor):
+ * runtime/ArrayPrototype.h:
+ * runtime/CommonIdentifiers.h:
+ * runtime/DatePrototype.cpp:
+ (JSC::DatePrototype::getOwnPropertyDescriptor):
+ * runtime/DatePrototype.h:
+ * runtime/JSArray.cpp:
+ (JSC::JSArray::getOwnPropertyDescriptor):
+ * runtime/JSArray.h:
+ * runtime/JSByteArray.cpp:
+ (JSC::JSByteArray::getOwnPropertyDescriptor):
+ * runtime/JSByteArray.h:
+ * runtime/JSFunction.cpp:
+ (JSC::JSFunction::getOwnPropertyDescriptor):
+ * runtime/JSFunction.h:
+ * runtime/JSGlobalObject.h:
+ (JSC::JSGlobalObject::getOwnPropertyDescriptor):
+ * runtime/JSNotAnObject.cpp:
+ (JSC::JSNotAnObject::getOwnPropertyDescriptor):
+ * runtime/JSNotAnObject.h:
+ * runtime/JSONObject.cpp:
+ (JSC::JSONObject::getOwnPropertySlot):
+ (JSC::JSONObject::getOwnPropertyDescriptor):
+ * runtime/JSONObject.h:
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::getOwnPropertyDescriptor):
+ (JSC::JSObject::getPropertyDescriptor):
+ * runtime/JSObject.h:
+ * runtime/JSString.cpp:
+ (JSC::JSString::getStringPropertyDescriptor):
+ (JSC::JSString::getOwnPropertyDescriptor):
+ * runtime/JSString.h:
+ * runtime/JSVariableObject.cpp:
+ (JSC::JSVariableObject::symbolTableGet):
+ * runtime/JSVariableObject.h:
+ * runtime/Lookup.h:
+ (JSC::getStaticPropertyDescriptor):
+ (JSC::getStaticFunctionDescriptor):
+ (JSC::getStaticValueDescriptor):
+ Add property descriptor equivalents of the lookup
+ table access functions
+
+ * runtime/MathObject.cpp:
+ (JSC::MathObject::getOwnPropertySlot):
+ (JSC::MathObject::getOwnPropertyDescriptor):
+ * runtime/MathObject.h:
+ * runtime/NumberConstructor.cpp:
+ (JSC::NumberConstructor::getOwnPropertyDescriptor):
+ * runtime/NumberConstructor.h:
+ * runtime/ObjectConstructor.cpp:
+ (JSC::ObjectConstructor::ObjectConstructor):
+ (JSC::objectConstructorGetOwnPropertyDescriptor):
+ * runtime/PropertyDescriptor.cpp: Added.
+ (JSC::PropertyDescriptor::writable):
+ (JSC::PropertyDescriptor::enumerable):
+ (JSC::PropertyDescriptor::configurable):
+ (JSC::PropertyDescriptor::hasAccessors):
+ (JSC::PropertyDescriptor::setUndefined):
+ (JSC::PropertyDescriptor::getter):
+ (JSC::PropertyDescriptor::setter):
+ (JSC::PropertyDescriptor::setDescriptor):
+ (JSC::PropertyDescriptor::setAccessorDescriptor):
+ * runtime/PropertyDescriptor.h: Added.
+ (JSC::PropertyDescriptor::PropertyDescriptor):
+ (JSC::PropertyDescriptor::attributes):
+ (JSC::PropertyDescriptor::isValid):
+ (JSC::PropertyDescriptor::value):
+ * runtime/RegExpConstructor.cpp:
+ (JSC::RegExpConstructor::getOwnPropertyDescriptor):
+ * runtime/RegExpConstructor.h:
+ * runtime/RegExpMatchesArray.h:
+ (JSC::RegExpMatchesArray::getOwnPropertyDescriptor):
+ * runtime/RegExpObject.cpp:
+ (JSC::RegExpObject::getOwnPropertyDescriptor):
+ * runtime/RegExpObject.h:
+ * runtime/StringObject.cpp:
+ (JSC::StringObject::getOwnPropertyDescriptor):
+ * runtime/StringObject.h:
+ * runtime/StringPrototype.cpp:
+ (JSC::StringPrototype::getOwnPropertyDescriptor):
+ * runtime/StringPrototype.h:
+
+2009-08-24 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Darin Adler.
+
+ How many copies of the parameters do you need?
+ https://bugs.webkit.org/show_bug.cgi?id=28701
+
+ The function parameters in JSC get copied a lot - and unnecessarily so.
+
+ Originally this happened due to duplicating FunctionBodyNodes on recompilation,
+ though the problem has been exacerbated by copying the parameters from the
+ original function body onto the executable, then back onto the real body that
+ will be generated (this happens on every function). And this is all made worse
+ since the data structures in question are a little ugly - C style arrays of C++
+ objects containing ref counts, so they need a full copy-construct (rather than
+ a simple memcpy).
+
+ This can all be greatly simplified by just punting the parameters off into
+ their own ref-counted object, and forgoing all the copying.
+
+ ~no performance change, possible slight progression.
+
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::BytecodeGenerator):
+ * bytecompiler/BytecodeGenerator.h:
+ (JSC::BytecodeGenerator::makeFunction):
+ * parser/Nodes.cpp:
+ (JSC::FunctionParameters::FunctionParameters):
+ (JSC::FunctionBodyNode::FunctionBodyNode):
+ (JSC::FunctionBodyNode::finishParsing):
+ * parser/Nodes.h:
+ (JSC::FunctionBodyNode::parameters):
+ (JSC::FunctionBodyNode::parameterCount):
+ * runtime/Executable.cpp:
+ (JSC::FunctionExecutable::~FunctionExecutable):
+ (JSC::FunctionExecutable::compile):
+ (JSC::FunctionExecutable::reparseExceptionInfo):
+ (JSC::FunctionExecutable::fromGlobalCode):
+ (JSC::FunctionExecutable::paramString):
+ * runtime/Executable.h:
+ (JSC::FunctionExecutable::FunctionExecutable):
+ (JSC::FunctionExecutable::parameterCount):
+
+2009-08-25 Brent Fulgham <bfulgham@webkit.org>
+
+ Reviewed by NOBODY (Buildfix).
+
+ * JavaScriptCore.vcproj/jsc/jsc.vcproj: Add Debug_CFLite target
+ that inherits from the debug_wincairo property sheet and therefore
+ links to the proper debug library.
+ * JavaScriptCore.vcproj/testapi/testapi.vcproj: Add Debug_CFLite target
+ that inherits from the debug_wincairo property sheet and therefore
+ links to the proper debug library.
+
+2009-08-25 Chris Marrin <cmarrin@apple.com>
+
+ Reviewed by Simon Fraser.
+
+ Export tryFastMalloc for Canvas3D work
+ https://bugs.webkit.org/show_bug.cgi?id=28018
+
+ * JavaScriptCore.exp:
+
+2009-08-25 David Levin <levin@chromium.org>
+
+ Reviewed by Adam Roben.
+
+ PLATFORM(CFNETWORK) should be USE(CFNETWORK).
+ https://bugs.webkit.org/show_bug.cgi?id=28713
+
+ * wtf/Platform.h: Added a #define to catch this issue in the
+ future. The define would generate an error on gcc without the
+ space in the expansion, but Visual C++ needs the space to cause an error.
+
+2009-08-24 Brent Fulgham <bfulgham@webkit.org>
+
+ Reviewed by Steve Falkenburg.
+
+ Revise CFLite Debug build to emit DLL's with _debug label.
+ https://bugs.webkit.org/show_bug.cgi?id=28695.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Modify
+ Cairo debug build to inherit from new debug_cairo property sheet.
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCFLite.vsprops:
+ Modify to look for debug CFLite when in debug build.
+
+2009-08-24 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Adler & Darin Hunt.
+
+ https://bugs.webkit.org/show_bug.cgi?id=28691
+ Do not retain ScopeNodes outside of parsing
+
+ There is now no need for these to exist outside of parsing - their use in the runtime is replaced by Executable types.
+
+ * bytecode/EvalCodeCache.h:
+ (JSC::EvalCodeCache::get):
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::BytecodeGenerator):
+ (JSC::BytecodeGenerator::emitNewFunction):
+ (JSC::BytecodeGenerator::emitNewFunctionExpression):
+ * bytecompiler/BytecodeGenerator.h:
+ (JSC::BytecodeGenerator::makeFunction):
+ * debugger/Debugger.cpp:
+ (JSC::Debugger::recompileAllJSFunctions):
+ (JSC::evaluateInGlobalCallFrame):
+ * debugger/DebuggerCallFrame.cpp:
+ (JSC::DebuggerCallFrame::evaluate):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::execute):
+ (JSC::Interpreter::prepareForRepeatCall):
+ (JSC::Interpreter::privateExecute):
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ * parser/Nodes.cpp:
+ (JSC::ScopeNodeData::ScopeNodeData):
+ (JSC::ProgramNode::create):
+ (JSC::EvalNode::create):
+ (JSC::FunctionBodyNode::create):
+ * parser/Nodes.h:
+ (JSC::ScopeNode::adoptData):
+ (JSC::FunctionBodyNode::parameterCount):
+ * parser/Parser.cpp:
+ * parser/Parser.h:
+ (JSC::Parser::arena):
+ (JSC::Parser::Parser):
+ (JSC::Parser::parse):
+ * runtime/ArrayPrototype.cpp:
+ (JSC::isNumericCompareFunction):
+ (JSC::arrayProtoFuncSort):
+ * runtime/Completion.cpp:
+ (JSC::checkSyntax):
+ (JSC::evaluate):
+ * runtime/Executable.cpp:
+ (JSC::FunctionExecutable::~FunctionExecutable):
+ (JSC::EvalExecutable::compile):
+ (JSC::ProgramExecutable::checkSyntax):
+ (JSC::ProgramExecutable::compile):
+ (JSC::FunctionExecutable::compile):
+ (JSC::EvalExecutable::generateJITCode):
+ (JSC::ProgramExecutable::generateJITCode):
+ (JSC::FunctionExecutable::generateJITCode):
+ (JSC::FunctionExecutable::reparseExceptionInfo):
+ (JSC::EvalExecutable::reparseExceptionInfo):
+ (JSC::FunctionExecutable::recompile):
+ (JSC::FunctionExecutable::fromGlobalCode):
+ (JSC::FunctionExecutable::copyParameters):
+ (JSC::FunctionExecutable::paramString):
+ * runtime/Executable.h:
+ (JSC::ScriptExecutable::ScriptExecutable):
+ (JSC::ScriptExecutable::sourceID):
+ (JSC::ScriptExecutable::sourceURL):
+ (JSC::ScriptExecutable::lineNo):
+ (JSC::ScriptExecutable::lastLine):
+ (JSC::ScriptExecutable::usesEval):
+ (JSC::ScriptExecutable::usesArguments):
+ (JSC::ScriptExecutable::needsActivation):
+ (JSC::ScriptExecutable::recordParse):
+ (JSC::EvalExecutable::bytecode):
+ (JSC::EvalExecutable::jitCode):
+ (JSC::ProgramExecutable::bytecode):
+ (JSC::ProgramExecutable::reparseExceptionInfo):
+ (JSC::ProgramExecutable::jitCode):
+ (JSC::FunctionExecutable::FunctionExecutable):
+ (JSC::FunctionExecutable::make):
+ (JSC::FunctionExecutable::bytecode):
+ (JSC::FunctionExecutable::isGenerated):
+ (JSC::FunctionExecutable::name):
+ (JSC::FunctionExecutable::parameterCount):
+ (JSC::FunctionExecutable::jitCode):
+ * runtime/FunctionConstructor.cpp:
+ (JSC::constructFunction):
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::numericCompareFunction):
+ * runtime/JSGlobalObjectFunctions.cpp:
+ (JSC::globalFuncEval):
+
+2009-08-24 Darin Adler <darin@apple.com>
+
+ * runtime/ObjectPrototype.cpp:
+ (JSC::ObjectPrototype::put): Landed revised version I had tested but forgot
+ to land. Leave out the branch, since we don't need one.
+
+2009-08-24 Darin Adler <darin@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Array index miss case creates a string every time
+ https://bugs.webkit.org/show_bug.cgi?id=28664
+
+ SunSpider test results I saw:
+
+ 0.5% faster overall
+ 1% faster on crypto-aes
+ 20% faster on crypto-md5
+ 13% faster on crypto-sha1
+
+ * runtime/ObjectPrototype.cpp:
+ (JSC::ObjectPrototype::ObjectPrototype): Initialize m_hasNoPropertiesWithUInt32Names
+ to true.
+ (JSC::ObjectPrototype::put): Clearly m_hasNoPropertiesWithUInt32Names if the new
+ property has a name that is the string form of a UInt32.
+ (JSC::ObjectPrototype::getOwnPropertySlot): Don't call JSObject::getOwnPropertySlot
+ if m_hasNoPropertiesWithUInt32Names is true, and it is highly likely to be true.
+
+ * runtime/ObjectPrototype.h: Added declarations for the above.
+
+2009-08-24 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk>
+
+ Unreviewed. Fix a typo in my distcheck build fix.
+
+ * GNUmakefile.am:
+
+2009-08-23 Gustavo Noronha Silva <gns@gnome.org>
+
+ Unreviewed build fix for make distcheck.
+
+ * GNUmakefile.am: Added files required for the build.
+
+2009-08-22 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Mark Rowe.
+
+ REGRESSION(r47639-r47660): Webkit crashes on launch on PowerPC
+ https://bugs.webkit.org/show_bug.cgi?id=28655
+
+ * runtime/JSFunction.cpp:
+ (JSC::JSFunction::JSFunction): Initialize properly with a VPtrHackExecutable.
+ * wtf/Platform.h:
+
+2009-08-22 Darin Adler <darin@apple.com>
+
+ Fix storage leak from syntax tree arena allocation patch.
+
+ * parser/Nodes.h: CommaNode needs to inherit from ParserArenaDeletable
+ because it has a vector.
+
+2009-08-21 Darin Adler <darin@apple.com>
+
+ Fix Qt build.
+
+ * parser/Nodes.cpp:
+ (JSC::ScopeNodeData::ScopeNodeData): Made non-inline again.
+ This is used outside Nodes.cpp so can't be inline unless
+ it is in the header.
+
+2009-08-21 Darin Adler <darin@apple.com>
+
+ Two loose ends from the last commit.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj: Made ParserArena.h
+ and create_hash_table project-internal instead of "private".
+ * runtime/Executable.h: Removed accidentally-added constructor.
+
+2009-08-21 Darin Adler <darin@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Syntax tree nodes should use arena allocation
+ https://bugs.webkit.org/show_bug.cgi?id=25674
+
+ Use an actual arena now. 0.6% speedup on SunSpider.
+
+ New and improved with 100% less leaking of the universe.
+
+ * JavaScriptCore.exp:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+ Removed all exports involving the class FunctionBodyNode, which no
+ longer needs to be used outside JavaScriptCore.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj: Made Nodes.h and
+ Executable.h project-internal instead of "private".
+
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::BytecodeGenerator): Updated since VarStack
+ contains const Identifier* now.
+
+ * parser/Grammar.y: Made identifiers from the lexer be const
+ Identifier* and updated since VarStack contains const Identifier* now.
+
+ * parser/Lexer.cpp:
+ (JSC::Lexer::setCode): Pass in ParserArena, used for identifiers.
+ (JSC::Lexer::makeIdentifier): Changed return type to const Identifier*
+ and changed to call ParserArena.
+ (JSC::Lexer::clear): Removed the code to manage m_identifiers and
+ added code to set m_arena to 0.
+ * parser/Lexer.h: Updated for changes above.
+
+ * parser/NodeConstructors.h:
+ (JSC::ParserArenaFreeable::operator new): Added. Calls allocateFreeable
+ on the arena.
+ (JSC::ParserArenaDeletable::operator new): Changed to call the
+ allocateDeletable function on the arena instead of deleteWithArena.
+ (JSC::PropertyNode::PropertyNode): Added new constructor that makes
+ numeric identifiers. Some day we might want to optimize this for
+ integers so it doesn't create a string for each one.
+ (JSC::ContinueNode::ContinueNode): Initialize m_ident to nullIdentifier
+ since it's now a const Identifier& so it can't be left uninitialized.
+ (JSC::BreakNode::BreakNode): Ditto.
+ (JSC::CaseClauseNode::CaseClauseNode): Updated to use SourceElements*
+ to keep track of the statements rather than a separate statement vector.
+ (JSC::BlockNode::BlockNode): Ditto.
+ (JSC::ForInNode::ForInNode): Initialize m_ident to nullIdentifier.
+
+ * parser/Nodes.cpp: Moved the comment explaining emitBytecode in here.
+ It seemed strangely out of place in the header.
+ (JSC::ThrowableExpressionData::emitThrowError): Added an overload for
+ UString as well as Identifier.
+ (JSC::SourceElements::singleStatement): Added.
+ (JSC::SourceElements::lastStatement): Added.
+ (JSC::RegExpNode::emitBytecode): Changed the throwError code to use
+ the substitution mechanism instead of doing a string append.
+ (JSC::SourceElements::emitBytecode): Added. Replaces the old
+ statementListEmitCode function, since we now keep the SourceElements
+ objects around.
+ (JSC::BlockNode::lastStatement): Added.
+ (JSC::BlockNode::emitBytecode): Changed to use emitBytecode instead of
+ statementListEmitCode.
+ (JSC::CaseClauseNode::emitBytecode): Added.
+ (JSC::CaseBlockNode::emitBytecodeForBlock): Changed to use emitBytecode
+ instead of statementListEmitCode.
+ (JSC::ScopeNodeData::ScopeNodeData): Changed to store the
+ SourceElements* instead of using releaseContentsIntoVector.
+ (JSC::ScopeNode::emitStatementsBytecode): Added.
+ (JSC::ScopeNode::singleStatement): Added.
+ (JSC::ProgramNode::emitBytecode): Call emitStatementsBytecode instead
+ of statementListEmitCode.
+ (JSC::EvalNode::emitBytecode): Ditto.
+ (JSC::FunctionBodyNode::emitBytecode): Call emitStatementsBytecode
+ insetad of statementListEmitCode and check for the return node using
+ the new functions.
+
+ * parser/Nodes.h: Changed VarStack to store const Identifier* instead
+ of Identifier and rely on the arena to control lifetime. Added a new
+ ParserArenaFreeable class. Made ParserArenaDeletable inherit from
+ FastAllocBase instead of having its own operator new. Base the Node
+ class on ParserArenaFreeable. Changed the various Node classes
+ to use const Identifier& instead of Identifier to avoid the need to
+ call their destructors and allow them to function as "freeable" in the
+ arena. Removed extraneous JSC_FAST_CALL on definitions of inline functions.
+ Changed ElementNode, PropertyNode, ArgumentsNode, ParameterNode,
+ CaseClauseNode, ClauseListNode, and CaseBlockNode to use ParserArenaFreeable
+ as a base class since they do not descend from Node. Eliminated the
+ StatementVector type and instead have various classes use SourceElements*
+ instead of StatementVector. This prevents those classes from having to
+ use ParserArenaDeletable to make sure the vector destructor is called.
+
+ * parser/Parser.cpp:
+ (JSC::Parser::parse): Pass the arena to the lexer.
+
+ * parser/Parser.h: Added an include of ParserArena.h, which is no longer
+ included by Nodes.h.
+ (JSC::Parser::parseFunctionFromGlobalCode): Changed to use the
+ singleStatement function, since there is no longer any children function.
+ Removed some unneeded use of RefPtr.
+
+ * parser/ParserArena.cpp:
+ (JSC::ParserArena::ParserArena): Added. Initializes the new members,
+ m_freeableMemory, m_freeablePoolEnd, and m_identifiers.
+ (JSC::ParserArena::freeablePool): Added. Computes the pool pointer,
+ since we store only the current pointer and the end of pool pointer.
+ (JSC::ParserArena::deallocateObjects): Added. Contains the common
+ memory-deallocation logic used by both the destructor and the
+ reset function.
+ (JSC::ParserArena::~ParserArena): Changed to call deallocateObjects.
+ (JSC::ParserArena::reset): Ditto. Also added code to zero out the
+ new structures, and switched to use clear() instead of shrink(0) since
+ we don't really reuse arenas.
+ (JSC::ParserArena::makeNumericIdentifier): Added.
+ (JSC::ParserArena::allocateFreeablePool): Added. Used when the pool
+ is empty.
+ (JSC::ParserArena::isEmpty): Added. No longer inline, which is fine
+ since this is used only for assertions at the moment.
+ (JSC::ParserArena::derefWithArena): Make non-inline.
+
+ * parser/ParserArena.h: Added an actual arena of "freeable" objects,
+ ones that don't need destructors to be called. Also added a separate
+ IdentifierArena object, a segmented vector of identifiers that used
+ to be in the Lexer.
+
+ * runtime/Executable.h: Moved the definition of the
+ FunctionExecutable::make function here. It can't go in JSFunction.h
+ since that header has to be used outside JavaScriptCore and so can't
+ include this, which includes Nodes.h. The function could be moved
+ elswhere if we don't want to include JSFunction.h in this header, but
+ for now this seems to be the best place.
+
+ * runtime/JSFunction.h: Removed the include of Executable.h and
+ definition of the FunctionExecutable::make function.
+
+ * wtf/FastMalloc.cpp: Fixed an incorrect comment.
+
+2009-08-21 Mark Rowe <mrowe@apple.com>
+
+ Fix the non-JIT build.
+
+ * runtime/Executable.cpp:
+ * runtime/Executable.h:
+
+2009-08-21 Gavin Barraclough <barraclough@apple.com>
+
+ Speculative QuickTime build fix.
+
+ * runtime/JSArray.cpp:
+
+2009-08-21 Gavin Barraclough <barraclough@apple.com>
+
+ Speculative QT build fix.
+
+ * runtime/StringPrototype.cpp:
+
+2009-08-21 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Restructure Executable types so that host functions do not hold a FunctionExecutable.
+ https://bugs.webkit.org/show_bug.cgi?id=28621
+
+ All JSFunction objects have a pointer to an Executable*. This is currently always a
+ FunctionExecutable, however this has a couple of drawbacks. Host functions do not
+ store a range of information that the FunctionExecutable provides (source, name,
+ CodeBlock & information presently held on the FunctionBodyNode).
+
+ [ * nearly all... see below! ]
+
+ Instead, make JSFunctions hold a pointer to an ExecutableBase, move fields specific
+ to JS sourced executable types (source, node) into a new subclass (ScriptExecutable),
+ and create a new NativeExecutable type. We now provide a new method in JSFunction
+ to access & downcast to FunctionExecutable, but in doing so we can make an early
+ check (with an ASSERT) to ensure that the Executable read from a function will only
+ be treated as a FunctionExecutable (and thus the JS sepcific fields will only be
+ accessed) if the JSFunction is not a host function.
+
+ There is one JSFunction that currently does not have an Executable, which is the
+ object created to allow us to read out the vtable pointer. By making this change
+ we can also add a new Executable type fror this object (VPtrHackExecutable).
+ Since this means that really all JSFunctions have an Executable we no longer have
+ to null-check m_executable before us it - particularly in isHostFunction().
+
+ This patch removes CacheableEvalExecutable, since all subclasses of ExecutableBase
+ can now be ref-counted - since both JSFunction holds (and ref-counts) an ExecutableBase
+ that might be a FunctionExecutable or a NativeExecutable. This does now mean that all
+ ProgramExecutables and EvalExecutables (unnecessarily) provide an interface to be
+ ref-counted, however this seems less-bad than host functions unnecessarily providing
+ interface to access non-host specific information.
+
+ The class hierarcy has changed from this:
+
+ - ExecutableBase
+ - ProgramExecutable
+ - EvalExecutable
+ - CacheableEvalExecutable (also RefCounted by multiple-inheritance)
+ - FunctionExecutable (also RefCounted by multiple-inheritance, 'special' FunctionExecutable also used for host functions)
+
+ To this:
+
+ - RefCounted
+ - ExecutableBase
+ - NativeExecutable
+ - VPtrHackExecutable
+ - ScriptExecutable
+ - ProgramExecutable
+ - EvalExecutable
+ - FunctionExecutable
+
+ This patch speeds up sunspidey by a couple of ms (presumably due to the changes to isHostFunction()).
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::CodeBlock):
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::ownerExecutable):
+ (JSC::GlobalCodeBlock::GlobalCodeBlock):
+ * bytecode/EvalCodeCache.h:
+ (JSC::EvalCodeCache::get):
+ * debugger/Debugger.cpp:
+ (JSC::Debugger::recompileAllJSFunctions):
+ * interpreter/CachedCall.h:
+ (JSC::CachedCall::CachedCall):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::callEval):
+ (JSC::Interpreter::privateExecute):
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ * profiler/Profiler.cpp:
+ (JSC::createCallIdentifierFromFunctionImp):
+ * runtime/Arguments.h:
+ (JSC::Arguments::getArgumentsData):
+ (JSC::Arguments::Arguments):
+ * runtime/Executable.cpp:
+ (JSC::NativeExecutable::~NativeExecutable):
+ (JSC::VPtrHackExecutable::~VPtrHackExecutable):
+ * runtime/Executable.h:
+ (JSC::ExecutableBase::ExecutableBase):
+ (JSC::ExecutableBase::~ExecutableBase):
+ (JSC::ExecutableBase::isHostFunction):
+ (JSC::NativeExecutable::NativeExecutable):
+ (JSC::VPtrHackExecutable::VPtrHackExecutable):
+ (JSC::ScriptExecutable::ScriptExecutable):
+ (JSC::ScriptExecutable::source):
+ (JSC::ScriptExecutable::sourceID):
+ (JSC::ScriptExecutable::sourceURL):
+ (JSC::ScriptExecutable::lineNo):
+ (JSC::ScriptExecutable::lastLine):
+ (JSC::ScriptExecutable::usesEval):
+ (JSC::ScriptExecutable::usesArguments):
+ (JSC::ScriptExecutable::needsActivation):
+ (JSC::EvalExecutable::EvalExecutable):
+ (JSC::EvalExecutable::create):
+ (JSC::ProgramExecutable::ProgramExecutable):
+ (JSC::FunctionExecutable::FunctionExecutable):
+ * runtime/FunctionPrototype.cpp:
+ (JSC::functionProtoFuncToString):
+ * runtime/JSFunction.cpp:
+ (JSC::JSFunction::JSFunction):
+ (JSC::JSFunction::~JSFunction):
+ (JSC::JSFunction::markChildren):
+ (JSC::JSFunction::getCallData):
+ (JSC::JSFunction::call):
+ (JSC::JSFunction::lengthGetter):
+ (JSC::JSFunction::getConstructData):
+ (JSC::JSFunction::construct):
+ * runtime/JSFunction.h:
+ (JSC::JSFunction::executable):
+ (JSC::JSFunction::jsExecutable):
+ (JSC::JSFunction::isHostFunction):
+
+2009-08-20 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Browser hangs on opening Web Inspector.
+ https://bugs.webkit.org/show_bug.cgi?id=28438
+
+ Code generation needs to be able to walk the entire scopechain in some
+ cases, however the symbol table used by activations was a member of the
+ codeblock. Following recompilation this may no longer exist, leading
+ to a crash or hang on lookup.
+
+ We fix this by introducing a refcounted SymbolTable subclass, SharedSymbolTable,
+ for the CodeBlocks used by function code. This allows activations to
+ maintain ownership of a copy of the symbol table even after recompilation so
+ they can continue to work.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::CodeBlock):
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::symbolTable):
+ (JSC::CodeBlock::sharedSymbolTable):
+ (JSC::GlobalCodeBlock::GlobalCodeBlock):
+ (JSC::FunctionCodeBlock::FunctionCodeBlock):
+ (JSC::FunctionCodeBlock::~FunctionCodeBlock):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::retrieveArguments):
+ * runtime/Executable.cpp:
+ (JSC::EvalExecutable::generateBytecode):
+ (JSC::FunctionExecutable::generateBytecode):
+ (JSC::FunctionExecutable::reparseExceptionInfo):
+ (JSC::EvalExecutable::reparseExceptionInfo):
+ * runtime/JSActivation.h:
+ (JSC::JSActivation::JSActivationData::JSActivationData):
+ (JSC::JSActivation::JSActivationData::~JSActivationData):
+ * runtime/SymbolTable.h:
+
+2009-08-20 Xan Lopez <xlopez@igalia.com>
+
+ Add new file to GTK+ build.
+
+ * GNUmakefile.am:
+
+2009-08-20 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Added a number => string cache.
+
+ 1.07x faster on v8 (1.7x faster on v8-splay).
+ 1.004x faster on SunSpider.
+
+ * runtime/JSCell.h: Moved JSValue::toString to JSString.h.
+ * runtime/JSGlobalData.h: Holds the cache.
+ * runtime/JSNumberCell.cpp:
+ (JSC::JSNumberCell::toString):
+ (JSC::JSNumberCell::toThisString): Removed -0 special case.
+ UString handles this now, since too many clients were
+ special-casing it.
+
+ * runtime/JSString.h:
+ (JSC::JSValue::toString): Use the cache when converting
+ an int or double to string.
+
+ * runtime/Operations.h:
+ (JSC::concatenateStrings): Call toString to take advantage
+ of the cache.
+
+ * runtime/SmallStrings.h:
+ (JSC::NumericStrings::add):
+ (JSC::NumericStrings::lookup): The cache.
+
+ * runtime/UString.cpp:
+ (JSC::UString::from): Added -0 special case mentioned above.
+ Removed appendNumeric because it's mutually exclusive with the
+ cache.
+
+2009-08-20 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ REGRESSION: fast/profiler/call.html is crashing occasionally
+ https://bugs.webkit.org/show_bug.cgi?id=28476
+
+ Using the codeblock for information about how many parameters and
+ locals a function has is unsafe in certain circumstances. The
+ basic scenario is all function code being cleared in response to
+ the debugger or profiler being enabled, and then an activation is
+ marked before its associated function is re-executed.
+
+ To deal with this scenario we store the variable count of a function
+ directly in the FunctionExecutable, and then use that information.
+
+ * runtime/Arguments.h:
+ (JSC::Arguments::getArgumentsData):
+ * runtime/Executable.cpp:
+ (JSC::FunctionExecutable::generateBytecode):
+ * runtime/Executable.h:
+ (JSC::FunctionExecutable::FunctionExecutable):
+ (JSC::FunctionExecutable::variableCount):
+ * runtime/JSActivation.cpp:
+ (JSC::JSActivation::markChildren):
+
+2009-08-20 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Numbering of arguments to emitGetJITStubArg/emitPutJITStubArg incorrect
+ <bug lost in the great bug disasteroony of 08/20/09!>
+
+ The argumentNumber argument to emitGetJITStubArg/emitPutJITStubArg should match
+ the argument number used within the stub functions in JITStubs.cpp, but it doesn't.
+
+ Firstly, all the numbers changed when we added a void* 'reserved' as the first slot
+ (rather than leaving argument 0 unused), and secondly in 32_64 builds the index to
+ peek/poke needs to be multiplies by 2 (since the argument to peek/poke is a number
+ of machine words, and on 32_64 build the argument slots to stub functions are two
+ words wide).
+
+ * jit/JIT.h:
+ * jit/JITCall.cpp:
+ (JSC::JIT::compileOpCallSetupArgs):
+ (JSC::JIT::compileOpConstructSetupArgs):
+ (JSC::JIT::compileOpCallVarargsSetupArgs):
+ (JSC::JIT::compileOpCall):
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::emitPutJITStubArg):
+ (JSC::JIT::emitPutJITStubArgConstant):
+ (JSC::JIT::emitGetJITStubArg):
+ (JSC::JIT::emitPutJITStubArgFromVirtualRegister):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::privateCompileCTIMachineTrampolines):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::privateCompilePutByIdTransition):
+
+2009-08-20 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ REGRESSION: significant slowdown on Celtic Kane "AJAX declaration" subtest
+ https://bugs.webkit.org/show_bug.cgi?id=28332
+
+ Follow up style fixes that were missed in review.
+
+ * runtime/Structure.cpp:
+ (JSC::Structure::hasTransition):
+ * runtime/Structure.h:
+ (JSC::Structure::get):
+ (JSC::StructureTransitionTable::contains):
+ * runtime/StructureTransitionTable.h:
+ (JSC::StructureTransitionTable::add):
+
+2009-08-20 Oliver Hunt <oliver@apple.com>
+
+ Add new exports to windows jsc build
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+
+2009-08-20 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ REGRESSION: significant slowdown on Celtic Kane "AJAX declaration" subtest
+ https://bugs.webkit.org/show_bug.cgi?id=28332
+
+ The method check optimisation made transitions aware of the value being
+ assigned when a transition was assigning a function. This had the side
+ effect of making every assignment of a function expression result in a
+ new transition, and thus a new Structure. The net result of this is that
+ the common JS idiom of
+
+ function MyObject() {
+ this.myFunction = function(...){...};
+ }
+ new MyObject();
+
+ Will produce a unique structure on every iteration, meaning that all
+ caching is defeated and there is a significant amount of structure churn.
+
+ The fix is to return the transition to its original form where it is
+ keyed off a property name + attributes tuple, but have each transition
+ support an optional transition on a specific value.
+
+ * JavaScriptCore.exp:
+ * runtime/JSObject.h:
+ (JSC::JSObject::putDirectInternal):
+ * runtime/Structure.cpp:
+ (JSC::Structure::~Structure):
+ (JSC::Structure::addPropertyTransitionToExistingStructure):
+ (JSC::Structure::addPropertyTransition):
+ (JSC::Structure::hasTransition):
+ * runtime/Structure.h:
+ (JSC::Structure::transitionedFor):
+ (JSC::Structure::hasTransition):
+ (JSC::Structure::):
+ (JSC::StructureTransitionTable::contains):
+ (JSC::StructureTransitionTable::get):
+ * runtime/StructureTransitionTable.h:
+ (JSC::StructureTransitionTableHashTraits::emptyValue):
+ (JSC::StructureTransitionTable::hasTransition):
+ (JSC::StructureTransitionTable::remove):
+ (JSC::StructureTransitionTable::add):
+
+2009-08-20 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Remove FunctionCodeBlock.
+ https://bugs.webkit.org/show_bug.cgi?id=28502
+
+ These only exist to allow JIT code to dereference properties off the
+ CodeBlock for any callee, regardless of whether it is a host function.
+
+ Instead just use the FunctionExecutable. Copy the m_parameters field
+ from the CodeBlock into the Executable, and use this to distinguish
+ between host functions, functions that have been bytecompiled, and
+ functions that have not.
+
+ m_parameters is moved to ExecutableBase rather than FunctionExecutable
+ so that (as a separate change) we can move make a separate class of
+ executable for host code, which is not devived from FunctionExecutable
+ (host code does not feature any of the properties that normal executable
+ do and will provide, such as source, attributes, and a parsed name).
+
+ 1% win on v8 tests, 0.5% on sunspider.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::derefStructures):
+ (JSC::CodeBlock::refStructures):
+ (JSC::CodeBlock::reparseForExceptionInfoIfNecessary):
+ (JSC::CodeBlock::handlerForBytecodeOffset):
+ (JSC::CodeBlock::lineNumberForBytecodeOffset):
+ (JSC::CodeBlock::expressionRangeForBytecodeOffset):
+ (JSC::CodeBlock::getByIdExceptionInfoForBytecodeOffset):
+ (JSC::CodeBlock::functionRegisterForBytecodeOffset):
+ (JSC::CodeBlock::hasGlobalResolveInstructionAtBytecodeOffset):
+ (JSC::CodeBlock::hasGlobalResolveInfoAtBytecodeOffset):
+ * bytecode/CodeBlock.h:
+ (JSC::):
+ (JSC::CodeBlock::source):
+ (JSC::CodeBlock::sourceOffset):
+ (JSC::CodeBlock::evalCodeCache):
+ (JSC::CodeBlock::createRareDataIfNecessary):
+
+ remove NativeCodeBlocks and the NativeCode code type.
+
+ * jit/JIT.cpp:
+ (JSC::JIT::linkCall):
+
+ Revert to previous behaviour (as currently still commented!) that Hhost functions have a null codeblock.
+
+ * jit/JITCall.cpp:
+ (JSC::JIT::compileOpCallInitializeCallFrame):
+ (JSC::JIT::compileOpCallSetupArgs):
+ (JSC::JIT::compileOpCallVarargsSetupArgs):
+ (JSC::JIT::compileOpConstructSetupArgs):
+ (JSC::JIT::compileOpCallVarargs):
+ (JSC::JIT::compileOpCall):
+ (JSC::JIT::compileOpCallSlowCase):
+
+ Bring the 32_64 & non-32_64 JITs into line with each other, callee in regT0.
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::privateCompileCTIMachineTrampolines):
+
+ Rewrite call trampolines to not use the CodeBlock.
+
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+
+ Make call_JSFunction & call_arityCheck return the callee, don't expect to be passed the CodeBlock.
+
+ * runtime/Executable.cpp:
+ (JSC::FunctionExecutable::generateBytecode):
+ (JSC::FunctionExecutable::recompile):
+ (JSC::FunctionExecutable::FunctionExecutable):
+ * runtime/Executable.h:
+ (JSC::ExecutableBase::):
+ (JSC::ExecutableBase::ExecutableBase):
+ (JSC::FunctionExecutable::isHostFunction):
+
+ Add m_numParameters.
+
+ * runtime/JSFunction.cpp:
+ (JSC::JSFunction::~JSFunction):
+
+ Only call generatedBytecode() on JSFunctions non-host FunctionExecutables.
+
+2009-08-20 Yongjun Zhang <yongjun.zhang@nokia.com>
+
+ Reviewed by Eric Seidel.
+
+ https://bugs.webkit.org/show_bug.cgi?id=28054
+
+ Use a helper function to work around winscw compiler forward declaration bug
+ regarding templated classes.
+
+ Add parenthesis around (PassRefPtr::*UnspecifiedBoolType) to make winscw compiler
+ work with the default UnSpecifiedBoolType() operator, which removes the winscw
+ specific bool cast hack.
+
+ * wtf/PassRefPtr.h:
+ (WTF::derefIfNotNull):
+ (WTF::PassRefPtr::~PassRefPtr):
+
+2009-08-19 Yong Li <yong.li@torchmobile.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Change namespace ARM to ARMRegisters
+ X86 to X86Registers to avoid conflict with macros
+ https://bugs.webkit.org/show_bug.cgi?id=28428
+
+ * assembler/ARMAssembler.cpp:
+ * assembler/ARMAssembler.h:
+ * assembler/ARMv7Assembler.h:
+ * assembler/MacroAssemblerARM.h:
+ * assembler/MacroAssemblerARMv7.h:
+ * assembler/MacroAssemblerX86Common.h:
+ * assembler/MacroAssemblerX86_64.h:
+ * assembler/X86Assembler.h:
+ * jit/JIT.h:
+ * jit/JITArithmetic.cpp:
+ * jit/JITInlineMethods.h:
+ * jit/JITOpcodes.cpp:
+ * wrec/WRECGenerator.cpp:
+ * wrec/WRECGenerator.h:
+ * yarr/RegexJIT.cpp:
+
+2009-08-19 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Devirtualise marking
+ https://bugs.webkit.org/show_bug.cgi?id=28294
+
+ We actually need to mark the value in a number object if we're using the
+ 32bit number representation.
+
+ * runtime/NumberObject.h:
+ (JSC::NumberObject::createStructure):
+
+2009-08-19 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Darin Adler.
+
+ We probably shouldn't be keeping the AST for eval nodes around forevar.
+ https://bugs.webkit.org/show_bug.cgi?id=28469
+
+ EvalNodes don't destroyData() (delete their parser data) since they need to hold onto
+ their varStack. Copy a list of variable onto EvalCodeBlock, and this can go away.
+
+ * bytecode/CodeBlock.h:
+ (JSC::EvalCodeBlock::variable):
+ (JSC::EvalCodeBlock::numVariables):
+ (JSC::EvalCodeBlock::adoptVariables):
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::BytecodeGenerator):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::execute):
+ * parser/Nodes.h:
+ * runtime/Executable.cpp:
+ (JSC::EvalExecutable::generateBytecode):
+ * runtime/Executable.h:
+
+2009-08-19 Jungshik Shin <jshin@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ http://bugs.webkit.org/show_bug.cgi?id=28441
+
+ Fix a build issue with ICU 4.2 or later on Windows with Visual C++.
+ Instead of defining all isXXX and toupper/tolower as
+ WTF_Please_use_ASCIICType_instead_of_ctype_see_comment_in_ASCIICType_h,
+ #define them to be different by prepending 'WTF_...ASCIIType_h' with
+ the originial names like 'toupper_WTF_...ASCIIType_h'.
+
+ * wtf/DisallowCType.h:
+
+2009-08-18 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Assigning a function to an object should always use the existing transition, even if the transition is not specialized
+ https://bugs.webkit.org/show_bug.cgi?id=28442
+
+ Check for an unspecialized transition as an alternative to always failing if specialisation does not match.
+
+ * runtime/Structure.cpp:
+ (JSC::Structure::addPropertyTransitionToExistingStructure):
+
+2009-08-18 Dirk Schulze <krit@webkit.org>
+
+ Reviewed by Oliver Hunt.
+
+ Added additional getter to ByteArray with an unsigned char as return.
+ ByteArray can take unsigned char directly now.
+
+ * wtf/ByteArray.h:
+ (WTF::ByteArray::set):
+ (WTF::ByteArray::get):
+
+2009-08-18 Peter Kasting <pkasting@google.com>
+
+ Reviewed by Eric Seidel.
+
+ https://bugs.webkit.org/show_bug.cgi?id=28415
+ Set svn:eol-style CRLF on all .sln and .vcproj files that don't already
+ have it.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj:
+ * JavaScriptCore.vcproj/testapi/testapi.vcproj:
+
+2009-08-18 Xan Lopez <xlopez@igalia.com>
+
+ Try to fix the GTK+ build.
+
+ * GNUmakefile.am:
+
+2009-08-17 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ No, silly runtime, AST nodes are not for you.
+
+ We still use AST nodes (ScopeNodes, particularly FunctionBodyNodes) within
+ the runtime, which means that these nodes must be persisted outside of the
+ arena, contain both parser & runtime data, etc. This is all a bit of a mess.
+
+ Move functionality into a new FunctionExecutable class.
+
+ * API/JSCallbackFunction.cpp:
+ * API/JSObjectRef.cpp:
+ * JavaScriptCore.exp:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::CodeBlock):
+ (JSC::CodeBlock::markAggregate):
+ (JSC::CodeBlock::reparseForExceptionInfoIfNecessary):
+ (JSC::CodeBlock::lineNumberForBytecodeOffset):
+ (JSC::CodeBlock::shrinkToFit):
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::getBytecodeIndex):
+ (JSC::CodeBlock::discardBytecode):
+ (JSC::CodeBlock::instructionCount):
+ (JSC::CodeBlock::getJITCode):
+ (JSC::CodeBlock::executablePool):
+ (JSC::CodeBlock::ownerExecutable):
+ (JSC::CodeBlock::extractExceptionInfo):
+ (JSC::CodeBlock::addFunctionDecl):
+ (JSC::CodeBlock::functionDecl):
+ (JSC::CodeBlock::numberOfFunctionDecls):
+ (JSC::CodeBlock::addFunctionExpr):
+ (JSC::CodeBlock::functionExpr):
+ (JSC::GlobalCodeBlock::GlobalCodeBlock):
+ (JSC::ProgramCodeBlock::ProgramCodeBlock):
+ (JSC::EvalCodeBlock::EvalCodeBlock):
+ (JSC::FunctionCodeBlock::FunctionCodeBlock):
+ (JSC::NativeCodeBlock::NativeCodeBlock):
+ * bytecode/EvalCodeCache.h:
+ * bytecode/SamplingTool.cpp:
+ (JSC::SamplingTool::doRun):
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::BytecodeGenerator):
+ (JSC::BytecodeGenerator::emitNewFunction):
+ (JSC::BytecodeGenerator::emitNewFunctionExpression):
+ * bytecompiler/BytecodeGenerator.h:
+ * debugger/Debugger.cpp:
+ (JSC::Debugger::recompileAllJSFunctions):
+ * interpreter/CachedCall.h:
+ (JSC::CachedCall::CachedCall):
+ * interpreter/CallFrameClosure.h:
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::unwindCallFrame):
+ (JSC::Interpreter::throwException):
+ (JSC::Interpreter::execute):
+ (JSC::Interpreter::prepareForRepeatCall):
+ (JSC::Interpreter::debug):
+ (JSC::Interpreter::privateExecute):
+ (JSC::Interpreter::retrieveLastCaller):
+ * interpreter/Interpreter.h:
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompile):
+ * jit/JIT.h:
+ (JSC::JIT::compile):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::privateCompileCTIMachineTrampolines):
+ (JSC::JIT::emit_op_new_func):
+ (JSC::JIT::emit_op_new_func_exp):
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ * jit/JITStubs.h:
+ (JSC::):
+ * parser/Nodes.cpp:
+ (JSC::FunctionBodyNode::reparseDataIfNecessary):
+ * parser/Nodes.h:
+ (JSC::EvalNode::partialDestroyData):
+ * parser/Parser.h:
+ * profiler/ProfileGenerator.cpp:
+ * profiler/Profiler.cpp:
+ (JSC::Profiler::createCallIdentifier):
+ (JSC::createCallIdentifierFromFunctionImp):
+ * runtime/Arguments.h:
+ (JSC::Arguments::getArgumentsData):
+ (JSC::Arguments::Arguments):
+ (JSC::JSActivation::copyRegisters):
+ * runtime/ArrayPrototype.cpp:
+ (JSC::isNumericCompareFunction):
+ * runtime/CallData.h:
+ (JSC::):
+ * runtime/Collector.cpp:
+ (JSC::Heap::collect):
+ * runtime/ConstructData.h:
+ (JSC::):
+ * runtime/ExceptionHelpers.cpp:
+ (JSC::createUndefinedVariableError):
+ (JSC::createInvalidParamError):
+ (JSC::createNotAConstructorError):
+ (JSC::createNotAFunctionError):
+ (JSC::createNotAnObjectError):
+ * runtime/Executable.cpp: Added.
+ (JSC::EvalExecutable::generateBytecode):
+ (JSC::ProgramExecutable::generateBytecode):
+ (JSC::FunctionExecutable::generateBytecode):
+ (JSC::EvalExecutable::generateJITCode):
+ (JSC::ProgramExecutable::generateJITCode):
+ (JSC::FunctionExecutable::generateJITCode):
+ (JSC::FunctionExecutable::isHostFunction):
+ (JSC::FunctionExecutable::markAggregate):
+ (JSC::FunctionExecutable::reparseExceptionInfo):
+ (JSC::EvalExecutable::reparseExceptionInfo):
+ (JSC::FunctionExecutable::recompile):
+ (JSC::FunctionExecutable::FunctionExecutable):
+ * runtime/Executable.h:
+ (JSC::ExecutableBase::~ExecutableBase):
+ (JSC::ExecutableBase::ExecutableBase):
+ (JSC::ExecutableBase::source):
+ (JSC::ExecutableBase::sourceID):
+ (JSC::ExecutableBase::lastLine):
+ (JSC::ExecutableBase::usesEval):
+ (JSC::ExecutableBase::usesArguments):
+ (JSC::ExecutableBase::needsActivation):
+ (JSC::ExecutableBase::astNode):
+ (JSC::ExecutableBase::generatedJITCode):
+ (JSC::ExecutableBase::getExecutablePool):
+ (JSC::EvalExecutable::EvalExecutable):
+ (JSC::EvalExecutable::bytecode):
+ (JSC::EvalExecutable::varStack):
+ (JSC::EvalExecutable::evalNode):
+ (JSC::EvalExecutable::jitCode):
+ (JSC::ProgramExecutable::ProgramExecutable):
+ (JSC::ProgramExecutable::reparseExceptionInfo):
+ (JSC::ProgramExecutable::bytecode):
+ (JSC::ProgramExecutable::programNode):
+ (JSC::ProgramExecutable::jitCode):
+ (JSC::FunctionExecutable::FunctionExecutable):
+ (JSC::FunctionExecutable::name):
+ (JSC::FunctionExecutable::bytecode):
+ (JSC::FunctionExecutable::generatedBytecode):
+ (JSC::FunctionExecutable::usesEval):
+ (JSC::FunctionExecutable::usesArguments):
+ (JSC::FunctionExecutable::parameterCount):
+ (JSC::FunctionExecutable::paramString):
+ (JSC::FunctionExecutable::isGenerated):
+ (JSC::FunctionExecutable::body):
+ (JSC::FunctionExecutable::jitCode):
+ (JSC::FunctionExecutable::createNativeThunk):
+ * runtime/FunctionConstructor.cpp:
+ (JSC::constructFunction):
+ * runtime/FunctionPrototype.cpp:
+ (JSC::functionProtoFuncToString):
+ * runtime/JSActivation.cpp:
+ (JSC::JSActivation::JSActivation):
+ (JSC::JSActivation::markChildren):
+ (JSC::JSActivation::isDynamicScope):
+ (JSC::JSActivation::argumentsGetter):
+ * runtime/JSActivation.h:
+ (JSC::JSActivation::JSActivationData::JSActivationData):
+ * runtime/JSFunction.cpp:
+ (JSC::JSFunction::isHostFunction):
+ (JSC::JSFunction::JSFunction):
+ (JSC::JSFunction::~JSFunction):
+ (JSC::JSFunction::markChildren):
+ (JSC::JSFunction::getCallData):
+ (JSC::JSFunction::call):
+ (JSC::JSFunction::lengthGetter):
+ (JSC::JSFunction::getConstructData):
+ (JSC::JSFunction::construct):
+ * runtime/JSFunction.h:
+ (JSC::JSFunction::executable):
+ (JSC::FunctionExecutable::make):
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData):
+ (JSC::JSGlobalData::numericCompareFunction):
+ * runtime/JSGlobalData.h:
+
+2009-08-17 Mark Rowe <mrowe@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Fix 300,000+ leaks seen during the regression tests.
+
+ EvalCodeCache::get was heap-allocating an EvalExecutable instance without adopting the initial reference.
+ While fixing this we noticed that EvalExecutable was a RefCounted type that was sometimes stack allocated.
+ To make this cleaner and to prevent clients from attempting to ref a stack-allocated instance, we move the
+ refcounting down to a new CacheableEvalExecutable class that derives from EvalExecutable. EvalCodeCache::get
+ now uses CacheableEvalExecutable::create and avoids the leak.
+
+ * bytecode/EvalCodeCache.h:
+ (JSC::EvalCodeCache::get):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::callEval):
+ * runtime/Executable.h:
+ (JSC::CacheableEvalExecutable::create):
+ (JSC::CacheableEvalExecutable::CacheableEvalExecutable):
+
+2009-08-17 Oliver Hunt <oliver@apple.com>
+
+ RS=Mark Rowe.
+
+ REGRESSION (r47292): Prototype.js is broken by ES5 Arguments changes
+ https://bugs.webkit.org/show_bug.cgi?id=28341
+ <rdar://problem/7145615>
+
+ Reverting r47292. Alas Prototype.js breaks with Arguments inheriting
+ from Array as ES5 attempted. Prototype.js defines $A in terms of a
+ function it places on (among other global objects) the Array prototype,
+ thus breaking $A for arrays.
+
+ * runtime/Arguments.h:
+ (JSC::Arguments::Arguments):
+ * runtime/JSGlobalObject.cpp:
+ (JSC::JSGlobalObject::reset):
+ (JSC::JSGlobalObject::markChildren):
+ * runtime/JSGlobalObject.h:
+ (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
+ * runtime/ObjectPrototype.cpp:
+ (JSC::ObjectPrototype::ObjectPrototype):
+ * runtime/ObjectPrototype.h:
+ * tests/mozilla/ecma_3/Function/arguments-001.js:
+
+2009-08-17 Peter Kasting <pkasting@google.com>
+
+ Reviewed by Steve Falkenburg.
+
+ https://bugs.webkit.org/show_bug.cgi?id=27323
+ Only add Cygwin to the path when it isn't already there. This avoids
+ causing problems for people who purposefully have non-Cygwin versions of
+ executables like svn in front of the Cygwin ones in their paths.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj:
+ * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops:
+ * JavaScriptCore.vcproj/jsc/jscCommon.vsprops:
+ * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops:
+
+2009-08-17 Xan Lopez <xlopez@igalia.com>
+
+ Reviewed by Mark Rowe.
+
+ Fix build with FAST_MALLOC_MATCH_VALIDATION enabled.
+
+ * wtf/FastMalloc.cpp:
+ (WTF::fastMalloc):
+ (WTF::fastCalloc):
+ (WTF::fastRealloc):
+
+2009-08-16 Holger Hans Peter Freyther <zecke@selfish.org>
+
+ Reviewed by Mark Rowe.
+
+ Fix crash on ./ecma_2/RegExp/exec-002.js.
+ https://bugs.webkit.org/show_bug.cgi?id=28353
+
+ Change the order of freeParenthesesDisjunctionContext and
+ popParenthesesDisjunctionContext on all call sites as the pop
+ method is accessing backTrack->lastContext which is the context
+ that is about to be freed.
+
+ * yarr/RegexInterpreter.cpp:
+ (JSC::Yarr::Interpreter::parenthesesDoBacktrack):
+ (JSC::Yarr::Interpreter::backtrackParentheses):
+
+2009-08-16 Holger Hans Peter Freyther <zecke@selfish.org>
+
+ Reviewed by Mark Rowe.
+
+ https://bugs.webkit.org/show_bug.cgi?id=28352
+
+ Fix coding style violations. Use m_ for C++ class members. Remove
+ trailing whitespace on empty lines.
+
+ * yarr/RegexInterpreter.cpp:
+ (JSC::Yarr::Interpreter::ParenthesesDisjunctionContext::ParenthesesDisjunctionContext):
+ (JSC::Yarr::Interpreter::tryConsumeCharacter):
+ (JSC::Yarr::Interpreter::tryConsumeBackReference):
+ (JSC::Yarr::Interpreter::parenthesesDoBacktrack):
+ (JSC::Yarr::Interpreter::backtrackParentheses):
+ (JSC::Yarr::ByteCompiler::ByteCompiler):
+ (JSC::Yarr::ByteCompiler::compile):
+ (JSC::Yarr::ByteCompiler::checkInput):
+ (JSC::Yarr::ByteCompiler::assertionBOL):
+ (JSC::Yarr::ByteCompiler::assertionEOL):
+ (JSC::Yarr::ByteCompiler::assertionWordBoundary):
+ (JSC::Yarr::ByteCompiler::atomPatternCharacter):
+ (JSC::Yarr::ByteCompiler::atomCharacterClass):
+ (JSC::Yarr::ByteCompiler::atomBackReference):
+ (JSC::Yarr::ByteCompiler::atomParenthesesSubpatternBegin):
+ (JSC::Yarr::ByteCompiler::atomParentheticalAssertionBegin):
+ (JSC::Yarr::ByteCompiler::popParenthesesStack):
+ (JSC::Yarr::ByteCompiler::closeAlternative):
+ (JSC::Yarr::ByteCompiler::closeBodyAlternative):
+ (JSC::Yarr::ByteCompiler::atomParenthesesEnd):
+ (JSC::Yarr::ByteCompiler::regexBegin):
+ (JSC::Yarr::ByteCompiler::alterantiveBodyDisjunction):
+ (JSC::Yarr::ByteCompiler::alterantiveDisjunction):
+ (JSC::Yarr::ByteCompiler::emitDisjunction):
+
+2009-08-15 Mark Rowe <mrowe@apple.com>
+
+ Fix the build with JIT disabled.
+
+ * runtime/Arguments.h: Only compile the jitCode method when the JIT is enabled.
+ * runtime/Executable.h: Include PrototypeFunction.h so the compiler knows what
+ NativeFunctionWrapper is when the JIT is disabled.
+
+2009-08-15 Adam Bergkvist <adam.bergkvist@ericsson.com>
+
+ Reviewed by Sam Weinig.
+
+ Added ENABLE_EVENTSOURCE flag.
+ https://bugs.webkit.org/show_bug.cgi?id=14997
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2009-08-14 Gavin Barraclough <barraclough@apple.com>
+
+ * parser/Parser.h:
+ (JSC::EvalExecutable::parse):
+ (JSC::ProgramExecutable::parse):
+ * runtime/Executable.h:
+
+2009-08-14 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Remove AST nodes from use within the Runtime (outside of parsing), stage 1
+ https://bugs.webkit.org/show_bug.cgi?id=28330
+
+ Remove the EvalNode and ProgramNode from use in the runtime. They still exist
+ after this patch, but are hidden behind EvalExecutable and FunctionExecutable,
+ and are also still reachable behind CodeBlock::m_ownerNode.
+
+ The next step will be to beat back FunctionBodyNode in the same fashion.
+ Then remove the usage via CodeBlock, then only construct these nodes only on
+ demand during bytecode generation.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * bytecode/CodeBlock.h:
+ (JSC::GlobalCodeBlock::GlobalCodeBlock):
+ (JSC::GlobalCodeBlock::~GlobalCodeBlock):
+ (JSC::ProgramCodeBlock::ProgramCodeBlock):
+ (JSC::EvalCodeBlock::EvalCodeBlock):
+ (JSC::FunctionCodeBlock::FunctionCodeBlock):
+ (JSC::NativeCodeBlock::NativeCodeBlock):
+ * bytecode/EvalCodeCache.h:
+ (JSC::EvalCodeCache::get):
+ * debugger/Debugger.cpp:
+ (JSC::evaluateInGlobalCallFrame):
+ * debugger/DebuggerCallFrame.cpp:
+ (JSC::DebuggerCallFrame::evaluate):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::callEval):
+ (JSC::Interpreter::execute):
+ * interpreter/Interpreter.h:
+ * parser/Nodes.cpp:
+ (JSC::FunctionBodyNode::createNativeThunk):
+ (JSC::FunctionBodyNode::generateBytecode):
+ (JSC::FunctionBodyNode::bytecodeForExceptionInfoReparse):
+ * parser/Parser.h:
+ (JSC::Parser::parse):
+ (JSC::Parser::reparse):
+ (JSC::Parser::parseFunctionFromGlobalCode):
+ (JSC::::parse):
+ * runtime/Completion.cpp:
+ (JSC::checkSyntax):
+ (JSC::evaluate):
+ * runtime/Error.cpp:
+ (JSC::throwError):
+ * runtime/Error.h:
+ * runtime/Executable.h: Added.
+ (JSC::TemplateExecutable::TemplateExecutable):
+ (JSC::TemplateExecutable::markAggregate):
+ (JSC::TemplateExecutable::sourceURL):
+ (JSC::TemplateExecutable::lineNo):
+ (JSC::TemplateExecutable::bytecode):
+ (JSC::TemplateExecutable::jitCode):
+ (JSC::EvalExecutable::EvalExecutable):
+ (JSC::ProgramExecutable::ProgramExecutable):
+ * runtime/FunctionConstructor.cpp:
+ (JSC::constructFunction):
+ * runtime/FunctionConstructor.h:
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::numericCompareFunction):
+ * runtime/JSGlobalObject.cpp:
+ (JSC::JSGlobalObject::~JSGlobalObject):
+ (JSC::JSGlobalObject::markChildren):
+ * runtime/JSGlobalObject.h:
+ (JSC::JSGlobalObject::codeBlocks):
+ * runtime/JSGlobalObjectFunctions.cpp:
+ (JSC::globalFuncEval):
+
+2009-08-14 Darin Adler <darin@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Rename the confusing isObject(<class>) to inherits(<class>).
+ It still works on non-objects, returning false.
+
+ * runtime/ArrayConstructor.cpp:
+ (JSC::arrayConstructorIsArray): Removed unneeded isObject call
+ and updated remaining isObject call to new name, inherits.
+
+ * runtime/JSCell.h: Renamed isObject(<class>) to inherits(<class>)
+ but more importantly, made it non-virtual (it was already inline)
+ so it is now as fast as JSObject::inherits was.
+
+ * runtime/JSObject.h: Removed inherits function since the one
+ in the base class is fine as-is. Also made various JSCell functions
+ that should not be called on JSObject uncallable by making them
+ both private and not implemented.
+ (JSC::JSCell::inherits): Updated name.
+ (JSC::JSValue::inherits): Ditto.
+
+ * debugger/Debugger.cpp:
+ (JSC::Debugger::recompileAllJSFunctions):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::unwindCallFrame):
+ * runtime/ArrayPrototype.cpp:
+ (JSC::arrayProtoFuncToString):
+ (JSC::arrayProtoFuncToLocaleString):
+ (JSC::arrayProtoFuncConcat):
+ * runtime/BooleanPrototype.cpp:
+ (JSC::booleanProtoFuncToString):
+ (JSC::booleanProtoFuncValueOf):
+ * runtime/DateConstructor.cpp:
+ (JSC::constructDate):
+ * runtime/DatePrototype.cpp:
+ (JSC::dateProtoFuncToString):
+ (JSC::dateProtoFuncToUTCString):
+ (JSC::dateProtoFuncToISOString):
+ (JSC::dateProtoFuncToDateString):
+ (JSC::dateProtoFuncToTimeString):
+ (JSC::dateProtoFuncToLocaleString):
+ (JSC::dateProtoFuncToLocaleDateString):
+ (JSC::dateProtoFuncToLocaleTimeString):
+ (JSC::dateProtoFuncGetTime):
+ (JSC::dateProtoFuncGetFullYear):
+ (JSC::dateProtoFuncGetUTCFullYear):
+ (JSC::dateProtoFuncToGMTString):
+ (JSC::dateProtoFuncGetMonth):
+ (JSC::dateProtoFuncGetUTCMonth):
+ (JSC::dateProtoFuncGetDate):
+ (JSC::dateProtoFuncGetUTCDate):
+ (JSC::dateProtoFuncGetDay):
+ (JSC::dateProtoFuncGetUTCDay):
+ (JSC::dateProtoFuncGetHours):
+ (JSC::dateProtoFuncGetUTCHours):
+ (JSC::dateProtoFuncGetMinutes):
+ (JSC::dateProtoFuncGetUTCMinutes):
+ (JSC::dateProtoFuncGetSeconds):
+ (JSC::dateProtoFuncGetUTCSeconds):
+ (JSC::dateProtoFuncGetMilliSeconds):
+ (JSC::dateProtoFuncGetUTCMilliseconds):
+ (JSC::dateProtoFuncGetTimezoneOffset):
+ (JSC::dateProtoFuncSetTime):
+ (JSC::setNewValueFromTimeArgs):
+ (JSC::setNewValueFromDateArgs):
+ (JSC::dateProtoFuncSetYear):
+ (JSC::dateProtoFuncGetYear):
+ * runtime/FunctionPrototype.cpp:
+ (JSC::functionProtoFuncToString):
+ * runtime/JSActivation.cpp:
+ (JSC::JSActivation::argumentsGetter):
+ * runtime/JSValue.h:
+ * runtime/RegExpConstructor.cpp:
+ (JSC::constructRegExp):
+ * runtime/RegExpPrototype.cpp:
+ (JSC::regExpProtoFuncTest):
+ (JSC::regExpProtoFuncExec):
+ (JSC::regExpProtoFuncCompile):
+ (JSC::regExpProtoFuncToString):
+ * runtime/ScopeChain.cpp:
+ (JSC::ScopeChain::localDepth):
+ * runtime/StringPrototype.cpp:
+ (JSC::stringProtoFuncReplace):
+ (JSC::stringProtoFuncToString):
+ (JSC::stringProtoFuncMatch):
+ (JSC::stringProtoFuncSearch):
+ (JSC::stringProtoFuncSplit):
+ Updated to new name, inherits, from old name, isObject.
+
+2009-07-31 Harald Fernengel <harald.fernengel@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Adding QNX as a platform. Currently only tested with Qt.
+
+ https://bugs.webkit.org/show_bug.cgi?id=27885
+
+ * JavaScriptCore/runtime/Collector.cpp: Added retrieving of stack base
+ since QNX doesn't have the pthread _nt functions
+ * JavaScriptCore/wtf/Platform.h: Added WTF_PLATFORM_QNX and corresponding
+ defines
+ * WebCore/bridge/npapi.h: Build fix for missing typedefs on QNX
+
+2009-08-14 Gabor Loki <loki@inf.u-szeged.hu>
+
+ Reviewed by Simon Hausmann.
+
+ Currently generic ARM and ARMv7 platforms work only with JSVALUE32
+ https://bugs.webkit.org/show_bug.cgi?id=28300
+
+ * wtf/Platform.h:
+
+2009-08-14 Gabor Loki <loki@inf.u-szeged.hu>
+
+ Reviewed by Simon Hausmann.
+
+ Enable JIT on ARM for QT by default
+ https://bugs.webkit.org/show_bug.cgi?id=28259
+
+ * wtf/Platform.h:
+
+2009-08-14 Gabor Loki <loki@inf.u-szeged.hu>
+
+ Reviewed by Simon Hausmann.
+
+ Enable YARR_JIT on ARM for QT by default
+ https://bugs.webkit.org/show_bug.cgi?id=28259
+
+ * wtf/Platform.h:
+
+2009-08-14 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ [ES5] Arguments object should inherit from Array
+ https://bugs.webkit.org/show_bug.cgi?id=28298
+
+ Make the Arguments object conform to the behaviour specified in ES5.
+ The simple portion of this is to make Arguments use Array.prototype
+ as its prototype rather than Object.prototype.
+
+ The spec then requires us to set instance.constructor to the pristine
+ Object constructor, and instance.toString and instance.toLocaleString
+ to the pristine versions from Object.prototype. To do this we now
+ make the ObjectPrototype constructor return its toString and
+ toLocaleString functions (similar to the call and apply functions
+ from FunctionPrototype).
+
+ Oddly enough this reports itself as a slight win, but given the code
+ isn't hit in the tests that claim to have improved I put this down to
+ code motion.
+
+ * runtime/Arguments.h:
+ (JSC::Arguments::Arguments):
+ (JSC::Arguments::initializeStandardProperties):
+ * runtime/JSGlobalObject.cpp:
+ (JSC::JSGlobalObject::reset):
+ (JSC::JSGlobalObject::markChildren):
+ * runtime/JSGlobalObject.h:
+ (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
+ (JSC::JSGlobalObject::objectConstructor):
+ (JSC::JSGlobalObject::objectToStringFunction):
+ (JSC::JSGlobalObject::objectToLocaleStringFunction):
+ * runtime/ObjectPrototype.cpp:
+ (JSC::ObjectPrototype::ObjectPrototype):
+ * runtime/ObjectPrototype.h:
+ * tests/mozilla/ecma_3/Function/arguments-001.js:
+ Update test to new es5 behaviour
+
+2009-08-14 Oliver Hunt <oliver@apple.com>
+
+ Remove MarkStack::drain from the JSC exports file
+
+ MarkStack::drain is now marked inline, the including it in the exports file
+ produces an ld warning
+
+ * JavaScriptCore.exp:
+
+2009-08-13 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Oliver Hunt.
+
+ Remove accidentally left in debugging statement.
+
+ * runtime/JSArray.h:
+ (JSC::MarkStack::drain):
+
+2009-08-13 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ [ES5] Implement Array.isArray
+ https://bugs.webkit.org/show_bug.cgi?id=28296
+
+ Add support for Array.isArray to the Array constructor
+
+ * runtime/ArrayConstructor.cpp:
+ (JSC::ArrayConstructor::ArrayConstructor):
+ (JSC::arrayConstructorIsArray):
+ * runtime/ArrayConstructor.h:
+ * runtime/CommonIdentifiers.h:
+ * runtime/JSArray.h:
+ (JSC::MarkStack::drain):
+ * runtime/JSGlobalObject.cpp:
+ (JSC::JSGlobalObject::reset):
+
+2009-08-13 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by NOBODY (Buildfix).
+
+ Attempt to fix windows build
+
+ * runtime/Collector.cpp:
+
+2009-08-13 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Devirtualise marking
+ https://bugs.webkit.org/show_bug.cgi?id=28294
+
+ Add a bit to TypeInfo to indicate that an object uses the standard
+ JSObject::markChildren method. This allows us to devirtualise marking
+ of most objects (though a branch is still needed). We also add a branch
+ to identify arrays thus devirtualising marking in that case as well.
+
+ In order to make the best use of this devirtualisation I've also reworked
+ the MarkStack::drain() logic to make the iteration more efficient.
+
+ * API/JSCallbackConstructor.h:
+ (JSC::JSCallbackConstructor::createStructure):
+ * API/JSCallbackFunction.h:
+ (JSC::JSCallbackFunction::createStructure):
+ * JavaScriptCore.exp:
+ * runtime/BooleanObject.h:
+ (JSC::BooleanObject::createStructure):
+ * runtime/FunctionPrototype.h:
+ (JSC::FunctionPrototype::createStructure):
+ * runtime/InternalFunction.h:
+ (JSC::InternalFunction::createStructure):
+ * runtime/JSAPIValueWrapper.h:
+ (JSC::JSAPIValueWrapper::JSAPIValueWrapper):
+ * runtime/JSArray.cpp:
+ (JSC::JSArray::markChildren):
+ * runtime/JSArray.h:
+ (JSC::JSArray::markChildrenDirect):
+ (JSC::MarkStack::drain):
+ * runtime/JSByteArray.cpp:
+ (JSC::JSByteArray::createStructure):
+ * runtime/JSCell.h:
+ (JSC::MarkStack::append):
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData):
+ * runtime/JSNumberCell.h:
+ (JSC::JSNumberCell::createStructure):
+ * runtime/JSONObject.h:
+ (JSC::JSONObject::createStructure):
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::markChildren):
+ * runtime/JSObject.h:
+ (JSC::JSObject::markChildrenDirect):
+ (JSC::JSObject::createStructure):
+ * runtime/JSString.h:
+ (JSC::JSString::createStructure):
+ * runtime/JSType.h:
+ (JSC::):
+ * runtime/MarkStack.h:
+ (JSC::MarkStack::MarkStack):
+ (JSC::MarkStack::MarkSet::MarkSet):
+ (JSC::MarkStack::MarkStackArray::last):
+ * runtime/MathObject.h:
+ (JSC::MathObject::createStructure):
+ * runtime/NumberConstructor.h:
+ (JSC::NumberConstructor::createStructure):
+ * runtime/NumberObject.h:
+ (JSC::NumberObject::createStructure):
+ * runtime/RegExpConstructor.h:
+ (JSC::RegExpConstructor::createStructure):
+ * runtime/RegExpObject.h:
+ (JSC::RegExpObject::createStructure):
+ * runtime/StringObjectThatMasqueradesAsUndefined.h:
+ (JSC::StringObjectThatMasqueradesAsUndefined::createStructure):
+ * runtime/TypeInfo.h:
+ (JSC::TypeInfo::hasDefaultMark):
+
+2009-08-13 Darin Adler <darin@apple.com>
+
+ Reviewed by Mark Rowe.
+
+ Some small bits of housekeeping.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj: Make Parser.h
+ project instead of private. Remove JSONObject.lut.h.
+
+ * assembler/ARMAssembler.h: Remove unneeded WTF prefix.
+ * assembler/AssemblerBufferWithConstantPool.h: Ditto.
+ * bytecompiler/BytecodeGenerator.h: Ditto.
+
+ * wtf/SegmentedVector.h: Add a "using" statement as we do
+ with the other WTF headers.
+
+2009-08-13 Darin Adler <darin@apple.com>
+
+ Fix Tiger build.
+
+ * parser/Grammar.y: Use a template function so we can compile
+ setStatementLocation even if it comes before YYLTYPE is defined.
+
+2009-08-13 Darin Adler <darin@apple.com>
+
+ Reviewed by George Staikos.
+
+ Too much use of void* in Grammar.y
+ https://bugs.webkit.org/show_bug.cgi?id=28287
+
+ * parser/Grammar.y: Changed all the helper functions to
+ take a JSGlobalData* instead of a void*. A couple formatting
+ tweaks that I missed when breaking this into pieces.
+
+2009-08-13 Darin Adler <darin@apple.com>
+
+ Reviewed by George Staikos.
+
+ Another part of https://bugs.webkit.org/show_bug.cgi?id=28287
+
+ * parser/Grammar.y: Reduced and sorted includes. Tweaked comment
+ format. Marked a few more functions inline.
+
+2009-08-13 Darin Adler <darin@apple.com>
+
+ Reviewed by George Staikos.
+
+ Another part of https://bugs.webkit.org/show_bug.cgi?id=28287
+
+ * parser/Grammar.y: Pass the number to the PropertyNode instead of
+ first turning it into an Identifier.
+
+ * parser/NodeConstructors.h:
+ (JSC::PropertyNode::PropertyNode): Add an overload that takes a double
+ so the code to convert to a string can be here instead of Grammar.y.
+ * parser/Nodes.h: Ditto.
+
+2009-08-13 Darin Adler <darin@apple.com>
+
+ Reviewed by George Staikos.
+
+ Another part of https://bugs.webkit.org/show_bug.cgi?id=28287
+
+ * parser/Grammar.y: Eliminate the DBG macro.
+
+2009-08-13 Darin Adler <darin@apple.com>
+
+ Reviewed by George Staikos.
+
+ Another part of https://bugs.webkit.org/show_bug.cgi?id=28287
+
+ * parser/Grammar.y: Eliminate the SET_EXCEPTION_LOCATION macro.
+
+2009-08-13 Darin Adler <darin@apple.com>
+
+ Reviewed by George Staikos.
+
+ George asked me to break the patch from
+ https://bugs.webkit.org/show_bug.cgi?id=28287
+ into smaller pieces and land it in stages.
+
+ * parser/Grammar.y: Eliminate the LEXER macro.
+
+2009-08-13 Mark Rowe <mrowe@apple.com>
+
+ Try some more to fix the Windows build.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Export a new symbol.
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: Ditto.
+
+2009-08-13 Mark Rowe <mrowe@apple.com>
+
+ Try and fix the Windows build.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Export a new symbol.
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: Ditto.
+
+2009-08-13 Darin Adler <darin@apple.com>
+
+ Reviewed by David Levin.
+
+ JavaScriptCore tweaks to get ready for the parser arena
+ https://bugs.webkit.org/show_bug.cgi?id=28243
+
+ Eliminate dependencies on Nodes.h outside JavaScriptCore,
+ and cut down on them inside JavaScriptCore.
+
+ Change regular expression parsing to use identifiers as
+ with other strings we parse.
+
+ Fix a couple things that are needed to use const Identifier
+ more, which will be part of the parser arena work.
+
+ * JavaScriptCore.exp: Resorted and updated.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj: Changed
+ CollectorHeapIterator.h to be project-internal.
+
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::emitPushNewScope): Added const.
+ * bytecompiler/BytecodeGenerator.h: Ditto.
+
+ * debugger/Debugger.cpp:
+ (JSC::Debugger::recompileAllJSFunctions): Moved this function
+ here from WebCore. Here is better since it uses so many internals.
+ Removed unimportant optimization for the no listener case.
+ * debugger/Debugger.h: Ditto. Also removed unneeded include
+ and tweaked formatting and comments.
+
+ * debugger/DebuggerCallFrame.cpp:
+ (JSC::DebuggerCallFrame::functionName): Call asFunction instead
+ of doing the unchecked static_cast.
+ (JSC::DebuggerCallFrame::calculatedFunctionName): Ditto.
+
+ * jit/JITStubs.cpp:
+ (JSC::op_call_JSFunction): Call isHostFunction on the body rather
+ than on the JSFunction.
+ (JSC::vm_lazyLinkCall): Ditto.
+ (JSC::op_construct_JSConstruct): Ditto.
+
+ * parser/Grammar.y: Changed callers to use new scanRegExp with
+ out arguments instead of relying on state in the Lexer. And
+ callers that just want to skip a regular expression to use
+ skipRegExp.
+
+ * parser/Lexer.cpp:
+ (JSC::Lexer::scanRegExp): Changed to use out arguments, and to
+ add a prefix argument so we can add in the "=" character as needed.
+ Also rewrote to streamline the logic a bit inspired by suggestions
+ by David Levin.
+ (JSC::Lexer::skipRegExp): Added. Version of the function above that
+ does not actually put the regular expression into a string.
+ (JSC::Lexer::clear): Removed code to clear m_pattern and m_flags.
+ * parser/Lexer.h: Changed scanRegExp to have out arguments. Added
+ skipRegExp. Eliminated pattern, flags, m_pattern, and m_flags.
+
+ * parser/NodeConstructors.h:
+ (JSC::RegExpNode::RegExpNode): Changed to take const Identifier&.
+ * parser/Nodes.cpp:
+ (JSC::RegExpNode::emitBytecode): Changed since m_pattern and
+ m_flags are now Identifier instead of UString.
+ (JSC::FunctionBodyNode::make): Moved this function here instead
+ of putting it in the JSFunction.h header.
+ * parser/Nodes.h: Changed RegExpNode to use Identifier.
+
+ * profiler/Profiler.cpp:
+ (JSC::Profiler::createCallIdentifier): Changed to use isHostFunction
+ on the body instead of on the JSFunction object.
+ * runtime/FunctionPrototype.cpp:
+ (JSC::functionProtoFuncToString): Ditto.
+
+ * runtime/JSFunction.cpp:
+ (JSC::JSFunction::isHostFunction): Moved here from header.
+ (JSC::JSFunction::isHostFunctionNonInline): Added.
+ (JSC::JSFunction::JSFunction): Removed unneeded initialization of
+ m_body to 0.
+ (JSC::JSFunction::setBody): Moved here from header.
+
+ * runtime/JSFunction.h: Removed unneeded includes. Moved private
+ constructor down to the private section. Made virtual functions
+ private. Removed unneeded overload of setBody and moved the body
+ of the function into the .cpp file. Changed assertions to use
+ the non-inline version of isHostFunction.
+
+ * runtime/PropertySlot.cpp:
+ (JSC::PropertySlot::functionGetter): Use asFunction instead
+ of doing the unchecked static_cast.
+
+ * wtf/SegmentedVector.h:
+ (WTF::SegmentedVector::isEmpty): Added.
+
+2009-08-13 Mark Rowe <mrowe@apple.com>
+
+ Rubber-stamped by Darin Adler.
+
+ Use the version of operator new that takes a JSGlobalData when allocating FuncDeclNode and FuncExprNode
+ from within the grammar to prevent these nodes from being leaked.
+
+ * parser/Grammar.y:
+
+2009-08-13 Simon Hausmann <simon.hausmann@nokia.com>
+
+ Reviewed by Ariya Hidayat.
+
+ Remove the special-case for Qt wrt JSVALUE_32 introduced in
+ r46709. It must've been a dependency issue on the bot, as
+ after a manual build all the tests pass on amd64 and ia32.
+
+ * wtf/Platform.h:
+
+2009-08-12 Gabor Loki <loki@inf.u-szeged.hu>
+
+ Reviewed by Gavin Barraclough.
+
+ Add optimize call and property access support for ARM JIT.
+ https://bugs.webkit.org/show_bug.cgi?id=24986
+
+ For tightly coupled sequences the BEGIN_UNINTERRUPTED_SEQUENCE and
+ END_UNINTERRUPTED_SEQUENCE macros have been introduced which ensure
+ space for instructions and constants of the named sequence. This
+ method is vital for those architecture which are using constant pool.
+
+ The 'latePatch' method - which was linked to JmpSrc - is replaced with
+ a port specific solution (each calls are marked to place their address
+ on the constant pool).
+
+ * assembler/ARMAssembler.cpp:
+ (JSC::ARMAssembler::linkBranch):
+ (JSC::ARMAssembler::executableCopy): Add extra align for constant pool.
+ * assembler/ARMAssembler.h:
+ (JSC::ARMAssembler::JmpSrc::JmpSrc):
+ (JSC::ARMAssembler::sizeOfConstantPool):
+ (JSC::ARMAssembler::jmp):
+ (JSC::ARMAssembler::linkCall):
+ * assembler/ARMv7Assembler.h:
+ * assembler/AbstractMacroAssembler.h:
+ * assembler/AssemblerBufferWithConstantPool.h:
+ (JSC::AssemblerBufferWithConstantPool::flushIfNoSpaceFor): Fix the
+ computation of the remaining space.
+ * assembler/MacroAssemblerARM.h:
+ (JSC::MacroAssemblerARM::branch32):
+ (JSC::MacroAssemblerARM::nearCall):
+ (JSC::MacroAssemblerARM::call):
+ (JSC::MacroAssemblerARM::branchPtrWithPatch):
+ (JSC::MacroAssemblerARM::ensureSpace):
+ (JSC::MacroAssemblerARM::sizeOfConstantPool):
+ (JSC::MacroAssemblerARM::prepareCall):
+ * assembler/X86Assembler.h:
+ * jit/JIT.h:
+ * jit/JITCall.cpp:
+ (JSC::JIT::compileOpCall):
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::beginUninterruptedSequence):
+ (JSC::JIT::endUninterruptedSequence):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emit_op_method_check):
+ (JSC::JIT::compileGetByIdHotPath):
+ (JSC::JIT::compileGetByIdSlowCase):
+ (JSC::JIT::emit_op_put_by_id):
+
+2009-08-12 Gavin Barraclough <barraclough@apple.com>
+
+ Rubber Stamped by Dave Kilzer.
+
+ Disable WTF_USE_JSVALUE32_64 on iPhone for now (support not yet added for ARMv7).
+
+ * wtf/Platform.h:
+
+2009-08-12 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Maciej Stachoviak.
+
+ Ooops - moved code that had been accidentally added to op_new_func instead of
+ op_new_func_exp, to where it shoulds be.
+
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::privateExecute):
+ * wtf/Platform.h:
+
+2009-08-12 Ada Chan <adachan@apple.com>
+
+ Added workaround for the limitation that VirtualFree with MEM_RELEASE
+ can only accept the base address returned by VirtualAlloc when the region
+ was reserved and it can only free the entire region, and not a part of it.
+
+ Reviewed by Oliver Hunt.
+
+ * runtime/MarkStack.h:
+ (JSC::MarkStack::MarkStackArray::shrinkAllocation):
+ * runtime/MarkStackWin.cpp:
+ (JSC::MarkStack::releaseStack):
+
+2009-08-12 Balazs Kelemen <kelemen.balazs.3@stud.u-szeged.hu>
+
+ Reviewed by Ariya Hidayat.
+
+ Build fix: use std::numeric_limits<long long>::min() instead of LLONG_MIN
+ since LLONG_MIN is not defined in standard c++.
+
+ * runtime/UString.cpp:
+ (JSC::UString::from):
+
+2009-08-12 Benjamin Otte <otte@gnome.org>
+
+ Reviewed by Jan Alonzo.
+
+ Buildfix for Gtk platforms debug builds.
+
+ * GNUmakefile.am: Choose MarkStackPosix.cpp or MarkStackWin.cpp
+ depending on platform.
+
+2009-08-12 Simon Hausmann <simon.hausmann@nokia.com>
+
+ Prospective build fix for Mac and 32-bit Windows.
+
+ * runtime/UString.cpp: Include wtf/StringExtras.h for snprintf.
+ (JSC::UString::from): Use %lld instead of %I64d for snprintf
+ on non-windows platforms.
+
+2009-08-12 Prasanth Ullattil <prasanth.ullattil@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Fix compile error on 64Bit Windows, when UString::from
+ is called with an intptr_t.
+
+ Added new UString::From overload with long long parameter.
+
+ Thanks to Holger for the long long idea.
+
+ * runtime/UString.cpp:
+ (JSC::UString::from):
+ * runtime/UString.h:
+
+2009-08-11 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Mark Rowe.
+
+ Minor style fixes.
+
+ * runtime/UString.h:
+ (JSC::UString::Rep::createEmptyBuffer):
+ * wtf/FastMalloc.h:
+ (WTF::TryMallocReturnValue::getValue):
+
+2009-08-11 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Make it harder to misuse try* allocation routines
+ https://bugs.webkit.org/show_bug.cgi?id=27469
+
+ Jump through a few hoops to make it much harder to accidentally
+ miss null-checking of values returned by the try-* allocation
+ routines.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * runtime/JSArray.cpp:
+ (JSC::JSArray::putSlowCase):
+ (JSC::JSArray::increaseVectorLength):
+ * runtime/StringPrototype.cpp:
+ (JSC::stringProtoFuncFontsize):
+ (JSC::stringProtoFuncLink):
+ * runtime/UString.cpp:
+ (JSC::allocChars):
+ (JSC::reallocChars):
+ (JSC::expandCapacity):
+ (JSC::UString::Rep::reserveCapacity):
+ (JSC::UString::expandPreCapacity):
+ (JSC::createRep):
+ (JSC::concatenate):
+ (JSC::UString::spliceSubstringsWithSeparators):
+ (JSC::UString::replaceRange):
+ (JSC::UString::append):
+ (JSC::UString::operator=):
+ * runtime/UString.h:
+ (JSC::UString::Rep::createEmptyBuffer):
+ * wtf/FastMalloc.cpp:
+ (WTF::tryFastZeroedMalloc):
+ (WTF::tryFastMalloc):
+ (WTF::tryFastCalloc):
+ (WTF::tryFastRealloc):
+ (WTF::TCMallocStats::tryFastMalloc):
+ (WTF::TCMallocStats::tryFastCalloc):
+ (WTF::TCMallocStats::tryFastRealloc):
+ * wtf/FastMalloc.h:
+ (WTF::TryMallocReturnValue::TryMallocReturnValue):
+ (WTF::TryMallocReturnValue::~TryMallocReturnValue):
+ (WTF::TryMallocReturnValue::operator PossiblyNull<T>):
+ (WTF::TryMallocReturnValue::getValue):
+ * wtf/Platform.h:
+ * wtf/PossiblyNull.h: Added.
+ (WTF::PossiblyNull::PossiblyNull):
+ (WTF::PossiblyNull::~PossiblyNull):
+ (WTF::::getValue):
+
+2009-08-11 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (build fix part deux).
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+
+2009-08-11 Gavin Barraclough <barraclough@apple.com>
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+
+2009-08-11 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Restrict use of FuncDeclNode & FuncExprNode to the parser.
+ https://bugs.webkit.org/show_bug.cgi?id=28209
+
+ These objects were also being referenced from the CodeBlock. By changing this
+ to just retain pointers to FunctionBodyNodes these classes can be restricted to
+ use during parsing.
+
+ No performance impact (or sub-percent progression).
+
+ * JavaScriptCore.exp:
+ Update symbols.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::mark):
+ (JSC::CodeBlock::reparseForExceptionInfoIfNecessary):
+ (JSC::CodeBlock::shrinkToFit):
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::addFunction):
+ (JSC::CodeBlock::function):
+ Unify m_functions & m_functionExpressions into a single Vector<RefPtr<FuncExprNode> >.
+
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::BytecodeGenerator):
+ (JSC::BytecodeGenerator::addConstant):
+ (JSC::BytecodeGenerator::emitNewFunction):
+ (JSC::BytecodeGenerator::emitNewFunctionExpression):
+ * bytecompiler/BytecodeGenerator.h:
+ FunctionStacks now contain FunctionBodyNodes not FuncDeclNodes.
+
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::execute):
+ (JSC::Interpreter::privateExecute):
+ Update to reflect chnages in CodeBlock.
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_new_func_exp):
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ * jit/JITStubs.h:
+ (JSC::):
+ Update to reflect chnages in CodeBlock.
+
+ * parser/Grammar.y:
+ FunctionStacks now contain FunctionBodyNodes not FuncDeclNodes.
+
+ * parser/NodeConstructors.h:
+ (JSC::FuncExprNode::FuncExprNode):
+ (JSC::FuncDeclNode::FuncDeclNode):
+ * parser/Nodes.cpp:
+ (JSC::ScopeNodeData::mark):
+ (JSC::FunctionBodyNode::finishParsing):
+ * parser/Nodes.h:
+ (JSC::FunctionBodyNode::ident):
+ Move m_ident & make methods from FuncDeclNode & FuncExprNode to FunctionBodyNode.
+
+ * runtime/JSFunction.h:
+ (JSC::FunctionBodyNode::make):
+ Make this method inline (was FuncDeclNode::makeFunction).
+
+2009-08-11 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Native JSON.stringify does not omit functions
+ https://bugs.webkit.org/show_bug.cgi?id=28117
+
+ Objects that are callable should be treated as undefined when
+ serialising to JSON.
+
+ * runtime/JSONObject.cpp:
+ (JSC::Stringifier::appendStringifiedValue):
+
+2009-08-11 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ REGRESSION: Hang/crash in BytecodeGenerator::constRegisterFor loading simple page
+ https://bugs.webkit.org/show_bug.cgi?id=28169
+
+ Handle the case where someone has attempted to shadow a property
+ on the global object with a constant.
+
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::constRegisterFor):
+ * parser/Nodes.cpp:
+ (JSC::ConstDeclNode::emitCodeSingle):
+
+2009-08-11 John Gregg <johnnyg@google.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Desktop Notifications API
+ https://bugs.webkit.org/show_bug.cgi?id=25463
+
+ Adds ENABLE_NOTIFICATION flag.
+
+ * Configurations/FeatureDefines.xcconfig:
+ * wtf/Platform.h:
+
+2009-08-11 Maxime Simon <simon.maxime@gmail.com>
+
+ Reviewed by Eric Seidel.
+
+ Modifications on JavaScriptCore to allow Haiku port.
+ https://bugs.webkit.org/show_bug.cgi?id=28121
+
+ * runtime/Collector.cpp: Haiku doesn't have sys/mman.h, using OS.h instead.
+ (JSC::currentThreadStackBase): Haiku uses its own threading system.
+ * wtf/Platform.h: Defining all Haiku platform values.
+ * wtf/haiku/MainThreadHaiku.cpp: Adding a missing header (NotImplemented.h).
+
+2009-08-11 Jessie Berlin <jberlin@apple.com>
+
+ Reviewed by Adam Roben.
+
+ Fix windows build.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+
+2009-08-11 Csaba Osztrogonac <oszi@inf.u-szeged.hu>
+
+ Reviewed by Tor Arne Vestbø.
+
+ Buildfix for Qt-win platforms.
+
+ * JavaScriptCore.pri: Choose MarkStackPosix.cpp or MarkStackWin.cpp depend on platform.
+
+2009-08-10 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by NOBODY (And another build fix).
+
+ Add new exports for MSVC
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2009-08-10 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by NOBODY (yet another build fix).
+
+ Remove obsolete entries from MSVC exports file
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+
+2009-08-10 Oliver Hunt <oliver@apple.com>
+
+ Add includes needed for non-allinonefile builds
+
+ * runtime/GetterSetter.h:
+ * runtime/ScopeChain.h:
+
+2009-08-10 Oliver Hunt <oliver@apple.com>
+
+ Fix export file for last build fix
+
+ * JavaScriptCore.exp:
+
+2009-08-10 Oliver Hunt <oliver@apple.com>
+
+ Hoist page size initialization into platform specific code.
+
+ * jit/ExecutableAllocatorPosix.cpp:
+ * jit/ExecutableAllocatorWin.cpp:
+ * runtime/MarkStack.h:
+ (JSC::MarkStack::pageSize):
+ * runtime/MarkStackPosix.cpp:
+ (JSC::MarkStack::initializePagesize):
+ * runtime/MarkStackWin.cpp:
+ (JSC::MarkStack::initializePagesize):
+
+2009-08-07 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Stack overflow crash in JavaScript garbage collector mark pass
+ https://bugs.webkit.org/show_bug.cgi?id=12216
+
+ Make the GC mark phase iterative by using an explicit mark stack.
+ To do this marking any single object is performed in multiple stages
+ * The object is appended to the MarkStack, this sets the marked
+ bit for the object using the new markDirect() function, and then
+ returns
+ * When the MarkStack is drain()ed the object is popped off the stack
+ and markChildren(MarkStack&) is called on the object to collect
+ all of its children. drain() then repeats until the stack is empty.
+
+ Additionally I renamed a number of methods from 'mark' to 'markAggregate'
+ in order to make it more clear that marking of those object was not
+ going to result in an actual recursive mark.
+
+ * GNUmakefile.am
+ * JavaScriptCore.exp:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.pri:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::markAggregate):
+ * bytecode/CodeBlock.h:
+ * bytecode/EvalCodeCache.h:
+ (JSC::EvalCodeCache::markAggregate):
+ * debugger/DebuggerActivation.cpp:
+ (JSC::DebuggerActivation::markChildren):
+ * debugger/DebuggerActivation.h:
+ * interpreter/Register.h:
+ * interpreter/RegisterFile.h:
+ (JSC::RegisterFile::markGlobals):
+ (JSC::RegisterFile::markCallFrames):
+ * parser/Nodes.cpp:
+ (JSC::ScopeNodeData::markAggregate):
+ (JSC::EvalNode::markAggregate):
+ (JSC::FunctionBodyNode::markAggregate):
+ * parser/Nodes.h:
+ (JSC::ScopeNode::markAggregate):
+ * runtime/ArgList.cpp:
+ (JSC::MarkedArgumentBuffer::markLists):
+ * runtime/ArgList.h:
+ * runtime/Arguments.cpp:
+ (JSC::Arguments::markChildren):
+ * runtime/Arguments.h:
+ * runtime/Collector.cpp:
+ (JSC::Heap::markConservatively):
+ (JSC::Heap::markCurrentThreadConservativelyInternal):
+ (JSC::Heap::markCurrentThreadConservatively):
+ (JSC::Heap::markOtherThreadConservatively):
+ (JSC::Heap::markStackObjectsConservatively):
+ (JSC::Heap::markProtectedObjects):
+ (JSC::Heap::collect):
+ * runtime/Collector.h:
+ * runtime/GetterSetter.cpp:
+ (JSC::GetterSetter::markChildren):
+ * runtime/GetterSetter.h:
+ (JSC::GetterSetter::GetterSetter):
+ (JSC::GetterSetter::createStructure):
+ * runtime/GlobalEvalFunction.cpp:
+ (JSC::GlobalEvalFunction::markChildren):
+ * runtime/GlobalEvalFunction.h:
+ * runtime/JSActivation.cpp:
+ (JSC::JSActivation::markChildren):
+ * runtime/JSActivation.h:
+ * runtime/JSArray.cpp:
+ (JSC::JSArray::markChildren):
+ * runtime/JSArray.h:
+ * runtime/JSCell.h:
+ (JSC::JSCell::markCellDirect):
+ (JSC::JSCell::markChildren):
+ (JSC::JSValue::markDirect):
+ (JSC::JSValue::markChildren):
+ (JSC::JSValue::hasChildren):
+ (JSC::MarkStack::append):
+ (JSC::MarkStack::drain):
+ * runtime/JSFunction.cpp:
+ (JSC::JSFunction::markChildren):
+ * runtime/JSFunction.h:
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData):
+ * runtime/JSGlobalData.h:
+ * runtime/JSGlobalObject.cpp:
+ (JSC::markIfNeeded):
+ (JSC::JSGlobalObject::markChildren):
+ * runtime/JSGlobalObject.h:
+ * runtime/JSNotAnObject.cpp:
+ (JSC::JSNotAnObject::markChildren):
+ * runtime/JSNotAnObject.h:
+ * runtime/JSONObject.cpp:
+ (JSC::Stringifier::markAggregate):
+ (JSC::JSONObject::markStringifiers):
+ * runtime/JSONObject.h:
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::markChildren):
+ (JSC::JSObject::defineGetter):
+ (JSC::JSObject::defineSetter):
+ * runtime/JSObject.h:
+ * runtime/JSPropertyNameIterator.cpp:
+ (JSC::JSPropertyNameIterator::markChildren):
+ * runtime/JSPropertyNameIterator.h:
+ (JSC::JSPropertyNameIterator::createStructure):
+ (JSC::JSPropertyNameIterator::JSPropertyNameIterator):
+ (JSC::JSPropertyNameIterator::create):
+ * runtime/JSStaticScopeObject.cpp:
+ (JSC::JSStaticScopeObject::markChildren):
+ * runtime/JSStaticScopeObject.h:
+ * runtime/JSType.h:
+ (JSC::):
+ * runtime/JSValue.h:
+ * runtime/JSWrapperObject.cpp:
+ (JSC::JSWrapperObject::markChildren):
+ * runtime/JSWrapperObject.h:
+ * runtime/MarkStack.cpp: Added.
+ (JSC::MarkStack::compact):
+ * runtime/MarkStack.h: Added.
+ (JSC::):
+ (JSC::MarkStack::MarkStack):
+ (JSC::MarkStack::append):
+ (JSC::MarkStack::appendValues):
+ (JSC::MarkStack::~MarkStack):
+ (JSC::MarkStack::MarkSet::MarkSet):
+ (JSC::MarkStack::pageSize):
+
+ MarkStackArray is a non-shrinking, mmap-based vector type
+ used for storing objects to be marked.
+ (JSC::MarkStack::MarkStackArray::MarkStackArray):
+ (JSC::MarkStack::MarkStackArray::~MarkStackArray):
+ (JSC::MarkStack::MarkStackArray::expand):
+ (JSC::MarkStack::MarkStackArray::append):
+ (JSC::MarkStack::MarkStackArray::removeLast):
+ (JSC::MarkStack::MarkStackArray::isEmpty):
+ (JSC::MarkStack::MarkStackArray::size):
+ (JSC::MarkStack::MarkStackArray::shrinkAllocation):
+ * runtime/MarkStackPosix.cpp: Added.
+ (JSC::MarkStack::allocateStack):
+ (JSC::MarkStack::releaseStack):
+ * runtime/MarkStackWin.cpp: Added.
+ (JSC::MarkStack::allocateStack):
+ (JSC::MarkStack::releaseStack):
+
+ * runtime/ScopeChain.h:
+ * runtime/ScopeChainMark.h:
+ (JSC::ScopeChain::markAggregate):
+ * runtime/SmallStrings.cpp:
+ (JSC::SmallStrings::mark):
+ * runtime/Structure.h:
+ (JSC::Structure::markAggregate):
+
+2009-08-10 Mark Rowe <mrowe@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Fix hundreds of "pointer being freed was not allocated" errors seen on the build bot.
+
+ * wtf/FastMalloc.h: Implement nothrow variants of the delete and delete[] operators since
+ we implement the nothrow variants of new and new[]. The nothrow variant of delete is called
+ explicitly in the implementation of std::sort which was resulting in FastMalloc-allocated
+ memory being passed to the system allocator to free.
+
+2009-08-10 Jan Michael Alonzo <jmalonzo@webkit.org>
+
+ [Gtk] Unreviewed build fix. Move JSAPIValueWrapper.cpp/.h in the debug
+ section. This file is already part of AllInOneFile in Release builds.
+
+ * GNUmakefile.am:
+
+2009-08-10 Darin Adler <darin@apple.com>
+
+ * wtf/FastMalloc.h: Fix build.
+
+2009-08-10 Darin Adler <darin@apple.com>
+
+ Reviewed by Mark Rowe.
+
+ FastMalloc.h has cross-platform code but marked as WinCE-only
+ https://bugs.webkit.org/show_bug.cgi?id=28160
+
+ 1) The support for nothrow was inside #if PLATFORM(WINCE) even though it is
+ not platform-specific.
+ 2) The code tried to override operator delete nothrow, which does not exist.
+ 3) The code in the header checks the value of USE_SYSTEM_MALLOC, but the code
+ in FastMalloc.cpp checks only if the macro is defined.
+
+ * wtf/FastMalloc.h: See above.
+ * wtf/FastMalloc.cpp: Ditto.
+
+2009-08-10 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Anders Carlsson.
+
+ Fix an annoying indentation issue.
+
+ * runtime/DateConstructor.cpp:
+ (JSC::constructDate):
+
+2009-08-10 Xan Lopez <xlopez@igalia.com>
+
+ Unreviewed build fix.
+
+ Add new files to makefile.
+
+ * GNUmakefile.am:
+
+2009-08-10 Simon Hausmann <simon.hausmann@nokia.com>
+
+ Fix compilation with the interpreter instead of the JIT by including
+ PrototypeFunction.h as forward-declared through NativeFunctionWrapper.h.
+
+ * runtime/ObjectConstructor.cpp:
+
+2009-08-09 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by George Staikos.
+
+ JSON.stringify replacer returning undefined does not omit object properties
+ https://bugs.webkit.org/show_bug.cgi?id=28118
+
+ Correct behaviour of stringify when using a replacer function that returns
+ undefined. This is a simple change to move the undefined value check to
+ after the replacer function is called. This means that the replacer function
+ is now called for properties with the value undefined, however i've confirmed
+ that this behaviour is correct.
+
+ In addition I've made the cyclic object exception have a more useful error
+ message.
+
+ * runtime/JSONObject.cpp:
+ (JSC::Stringifier::appendStringifiedValue):
+
+2009-08-08 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Eric Seidel and Sam Weinig.
+
+ [ES5] Implement Object.getPrototypeOf
+ https://bugs.webkit.org/show_bug.cgi?id=28114
+
+ Implement getPrototypeOf
+
+ * runtime/CommonIdentifiers.h:
+ * runtime/JSGlobalObject.cpp:
+ (JSC::JSGlobalObject::reset):
+ * runtime/ObjectConstructor.cpp:
+ (JSC::ObjectConstructor::ObjectConstructor):
+ (JSC::objectConsGetPrototypeOf):
+ * runtime/ObjectConstructor.h:
+
+2009-08-07 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
+
+ Reviewed by Eric Seidel.
+
+ Allow custom memory allocation control for Noncopyable class
+ https://bugs.webkit.org/show_bug.cgi?id=27879
+
+ Several classes which are inherited from Noncopyable are instantiated by
+ operator new, so Noncopyable class has been inherited from FastAllocBase.
+
+ * wtf/Noncopyable.h:
+
+2009-08-07 George Staikos <george.staikos@torchmobile.com>
+
+ Reviewed by Eric Seidel.
+
+ https://bugs.webkit.org/show_bug.cgi?id=27305
+ Implement WinCE-specific unicode layer.
+ Written by George Staikos <george.staikos@torchmobile.com>
+ with bug fixes by Yong Li <yong.li@torchmobile.com>
+ refactored by Joe Mason <joe.mason@torchmobile.com>
+
+ * wtf/Platform.h:
+ * wtf/unicode/Unicode.h:
+ * wtf/unicode/wince/UnicodeWince.cpp: Added.
+ (WTF::Unicode::toLower):
+ (WTF::Unicode::toUpper):
+ (WTF::Unicode::foldCase):
+ (WTF::Unicode::isPrintableChar):
+ (WTF::Unicode::isSpace):
+ (WTF::Unicode::isLetter):
+ (WTF::Unicode::isUpper):
+ (WTF::Unicode::isLower):
+ (WTF::Unicode::isDigit):
+ (WTF::Unicode::isPunct):
+ (WTF::Unicode::toTitleCase):
+ (WTF::Unicode::direction):
+ (WTF::Unicode::category):
+ (WTF::Unicode::decompositionType):
+ (WTF::Unicode::combiningClass):
+ (WTF::Unicode::mirroredChar):
+ (WTF::Unicode::digitValue):
+ * wtf/unicode/wince/UnicodeWince.h: Added.
+ (WTF::Unicode::):
+ (WTF::Unicode::isSeparatorSpace):
+ (WTF::Unicode::isHighSurrogate):
+ (WTF::Unicode::isLowSurrogate):
+ (WTF::Unicode::isArabicChar):
+ (WTF::Unicode::hasLineBreakingPropertyComplexContext):
+ (WTF::Unicode::umemcasecmp):
+ (WTF::Unicode::surrogateToUcs4):
+
+2009-08-07 Yongjun Zhang <yongjun.zhang@nokia.com>
+
+ Reviewed by Eric Seidel.
+
+ https://bugs.webkit.org/show_bug.cgi?id=28069
+
+ Add inline to help winscw compiler resolve specialized argument in
+ templated functions.
+
+ * runtime/LiteralParser.cpp:
+ (JSC::LiteralParser::Lexer::lexString):
+
+2009-08-07 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
+
+ Reviewed by Eric Seidel.
+
+ Allow custom memory allocation control for RegExpObjectData struct
+ http://bugs.webkit.org/show_bug.cgi?id=26750
+
+ Inherits RegExpObjectData struct from FastAllocBase because
+ it has been instantiated by 'new' in JavaScriptCore/runtime/RegExpObject.cpp:62
+
+ * runtime/RegExpObject.h:
+
+2009-08-06 Norbert Leser <norbert.leser@nokia.com>
+
+ Reviewed by Darin Adler.
+
+ Updated patch for bug #27059:
+ Symbian platform always uses little endian encoding,
+ regardless of compiler.
+ We need to make sure that we correctly detect EABI architecture
+ for armv5 targets on Symbian,
+ where __EABI__ is set but not __ARM_EABI__
+
+ * wtf/Platform.h:
+
+2009-08-06 Adam Barth <abarth@webkit.org>
+
+ Unreviewed revert.
+
+ http://bugs.webkit.org/show_bug.cgi?id=27879
+
+ Revert 46877 because it broke GTK.
+
+ * wtf/Noncopyable.h:
+
+2009-08-06 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Make get_by_id/put_by_id/method_check/call defer optimization using a data flag rather than a code modification.
+ ( https://bugs.webkit.org/show_bug.cgi?id=27635 )
+
+ This improves performance of ENABLE(ASSEMBLER_WX_EXCLUSIVE) builds by 2-2.5%, reducing the overhead to about 2.5%.
+ (No performance impact with ASSEMBLER_WX_EXCLUSIVE disabled).
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::printStructureStubInfo):
+ - Make StructureStubInfo store the type as an integer, rather than an OpcodeID.
+
+ * bytecode/CodeBlock.h:
+ (JSC::):
+ (JSC::CallLinkInfo::seenOnce):
+ (JSC::CallLinkInfo::setSeen):
+ (JSC::MethodCallLinkInfo::seenOnce):
+ (JSC::MethodCallLinkInfo::setSeen):
+ - Change a pointer in CallLinkInfo/MethodCallLinkInfo to use a PtrAndFlags, use a flag to track when an op has been executed once.
+
+ * bytecode/StructureStubInfo.cpp:
+ (JSC::StructureStubInfo::deref):
+ - Make StructureStubInfo store the type as an integer, rather than an OpcodeID.
+
+ * bytecode/StructureStubInfo.h:
+ (JSC::StructureStubInfo::StructureStubInfo):
+ (JSC::StructureStubInfo::initGetByIdSelf):
+ (JSC::StructureStubInfo::initGetByIdProto):
+ (JSC::StructureStubInfo::initGetByIdChain):
+ (JSC::StructureStubInfo::initGetByIdSelfList):
+ (JSC::StructureStubInfo::initGetByIdProtoList):
+ (JSC::StructureStubInfo::initPutByIdTransition):
+ (JSC::StructureStubInfo::initPutByIdReplace):
+ (JSC::StructureStubInfo::seenOnce):
+ (JSC::StructureStubInfo::setSeen):
+ - Make StructureStubInfo store the type as an integer, rather than an OpcodeID, add a flag to track when an op has been executed once.
+
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::emitGetById):
+ (JSC::BytecodeGenerator::emitPutById):
+ - Make StructureStubInfo store the type as an integer, rather than an OpcodeID.
+
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileCTIMachineTrampolines):
+ (JSC::JIT::unlinkCall):
+ - Remove the "don't lazy link" stage of calls.
+
+ * jit/JIT.h:
+ (JSC::JIT::compileCTIMachineTrampolines):
+ - Remove the "don't lazy link" stage of calls.
+
+ * jit/JITCall.cpp:
+ (JSC::JIT::compileOpCallSlowCase):
+ - Remove the "don't lazy link" stage of calls.
+
+ * jit/JITStubs.cpp:
+ (JSC::JITThunks::JITThunks):
+ (JSC::JITThunks::tryCachePutByID):
+ (JSC::JITThunks::tryCacheGetByID):
+ (JSC::JITStubs::DEFINE_STUB_FUNCTION):
+ (JSC::JITStubs::getPolymorphicAccessStructureListSlot):
+ - Remove the "don't lazy link" stage of calls, and the "_second" stage of get_by_id/put_by_id/method_check.
+
+ * jit/JITStubs.h:
+ (JSC::JITThunks::ctiStringLengthTrampoline):
+ (JSC::JITStubs::):
+ - Remove the "don't lazy link" stage of calls, and the "_second" stage of get_by_id/put_by_id/method_check.
+
+ * wtf/PtrAndFlags.h:
+ (WTF::PtrAndFlags::PtrAndFlags):
+ (WTF::PtrAndFlags::operator!):
+ (WTF::PtrAndFlags::operator->):
+ - Add ! and -> operators, add constuctor with pointer argument.
+
+2009-08-06 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
+
+ Reviewed by Adam Barth.
+
+ Allow custom memory allocation control for Noncopyable class
+ https://bugs.webkit.org/show_bug.cgi?id=27879
+
+ Several classes which inherited from Noncopyable are instantiated by
+ operator new, so Noncopyable class has been inherited from FastAllocBase.
+
+ * wtf/Noncopyable.h:
+
+2009-08-06 Mark Rowe <mrowe@apple.com>
+
+ Rubber-stamped by Sam Weinig.
+
+ Add explicit dependencies for our build verification scripts to ensure that they always run after linking has completed.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2009-08-06 Mark Rowe <mrowe@apple.com>
+
+ Bring a little order to our otherwise out of control lives.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2009-08-06 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
+
+ Reviewed by Darin Adler.
+
+ Allow custom memory allocation control for JavaScriptCore's PolymorphicAccessStructureList struct
+ https://bugs.webkit.org/show_bug.cgi?id=27877
+
+ Inherits PolymorphicAccessStructureList struct from FastAllocBase because it has been instantiated by
+ 'new' in JavaScriptCore/jit/JITStubs.cpp:1229.
+
+ * bytecode/Instruction.h:
+
+2009-08-05 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
+
+ Reviewed by Darin Adler.
+
+ Allow custom memory allocation control for JavaScriptCore's ScopeNodeData struct
+ https://bugs.webkit.org/show_bug.cgi?id=27875
+
+ Inherits ScopeNodeData struct from FastAllocBase because it has been instantiated by
+ 'new' in JavaScriptCore/parser/Nodes.cpp:1848.
+
+ * parser/Nodes.h:
+
+2009-08-05 Zoltan Herczeg <zherczeg@inf.u-szeged.hu>
+
+ Reviewed by Gavin Barraclough.
+
+ Add floating point support for generic ARM port.
+ https://bugs.webkit.org/show_bug.cgi?id=24986
+
+ * assembler/ARMAssembler.cpp:
+ (JSC::ARMAssembler::doubleTransfer):
+ * assembler/ARMAssembler.h:
+ (JSC::ARM::):
+ (JSC::ARMAssembler::):
+ (JSC::ARMAssembler::faddd_r):
+ (JSC::ARMAssembler::fsubd_r):
+ (JSC::ARMAssembler::fmuld_r):
+ (JSC::ARMAssembler::fcmpd_r):
+ (JSC::ARMAssembler::fdtr_u):
+ (JSC::ARMAssembler::fdtr_d):
+ (JSC::ARMAssembler::fmsr_r):
+ (JSC::ARMAssembler::fsitod_r):
+ (JSC::ARMAssembler::fmstat):
+ * assembler/MacroAssemblerARM.h:
+ (JSC::MacroAssemblerARM::):
+ (JSC::MacroAssemblerARM::supportsFloatingPoint):
+ (JSC::MacroAssemblerARM::loadDouble):
+ (JSC::MacroAssemblerARM::storeDouble):
+ (JSC::MacroAssemblerARM::addDouble):
+ (JSC::MacroAssemblerARM::subDouble):
+ (JSC::MacroAssemblerARM::mulDouble):
+ (JSC::MacroAssemblerARM::convertInt32ToDouble):
+ (JSC::MacroAssemblerARM::branchDouble):
+ * jit/JIT.h:
+
+2009-08-05 Zoltan Herczeg <zherczeg@inf.u-szeged.hu>
+
+ Reviewed by Gavin Barraclough.
+
+ Add JIT support for generic ARM port without optimizations.
+ https://bugs.webkit.org/show_bug.cgi?id=24986
+
+ All JIT optimizations are disabled.
+
+ Signed off by Zoltan Herczeg <zherczeg@inf.u-szeged.hu>
+ Signed off by Gabor Loki <loki@inf.u-szeged.hu>
+
+ * assembler/ARMAssembler.cpp:
+ (JSC::ARMAssembler::baseIndexTransfer32):
+ * assembler/AbstractMacroAssembler.h:
+ (JSC::AbstractMacroAssembler::Imm32::Imm32):
+ * assembler/MacroAssemblerARM.h:
+ (JSC::MacroAssemblerARM::store32):
+ (JSC::MacroAssemblerARM::move):
+ (JSC::MacroAssemblerARM::branch32):
+ (JSC::MacroAssemblerARM::add32):
+ (JSC::MacroAssemblerARM::sub32):
+ (JSC::MacroAssemblerARM::load32):
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::getBytecodeIndex):
+ * jit/JIT.h:
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::restoreArgumentReference):
+ * jit/JITOpcodes.cpp:
+ * jit/JITStubs.cpp:
+ * jit/JITStubs.h:
+ (JSC::JITStackFrame::returnAddressSlot):
+ * wtf/Platform.h:
+
+2009-08-04 Gavin Barraclough <barraclough@apple.com>
+
+ Rubber Stamped by Oiver Hunt.
+
+ Revert r46643 since this breaks the Yarr::Interpreter running the v8 tests.
+ https://bugs.webkit.org/show_bug.cgi?id=27874
+
+ * yarr/RegexInterpreter.cpp:
+ (JSC::Yarr::Interpreter::allocDisjunctionContext):
+ (JSC::Yarr::Interpreter::freeDisjunctionContext):
+ (JSC::Yarr::Interpreter::allocParenthesesDisjunctionContext):
+ (JSC::Yarr::Interpreter::freeParenthesesDisjunctionContext):
+
+2009-08-04 Oliver Hunt <oliver@apple.com>
+
+ PPC64 Build fix
+
+ * wtf/Platform.h:
+
+2009-08-04 Benjamin C Meyer <benjamin.meyer@torchmobile.com>
+
+ Reviewed by Adam Treat
+
+ Explicitly include limits.h header when using INT_MAX and INT_MIN
+
+ * interpreter/Interpreter.cpp
+
+2009-08-03 Harald Fernengel <harald.fernengel@nokia.com>
+
+ Reviewed by Darin Adler.
+
+ Fix compile error for ambigous call to abs()
+ https://bugs.webkit.org/show_bug.cgi?id=27873
+
+ Fix ambiguity in abs(long int) call by calling labs() instead
+
+ * wtf/DateMath.cpp: replace call to abs() with labs()
+
+2009-08-03 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Eric Seidel.
+
+ [Qt] Consolidate common gcc flags to WebKit.pri
+ https://bugs.webkit.org/show_bug.cgi?id=27934
+
+ * JavaScriptCore.pro:
+
+2009-08-03 Ada Chan <adachan@apple.com>
+
+ Fixed the Tiger build.
+
+ * wtf/FastMalloc.cpp:
+
+2009-08-03 Ada Chan <adachan@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Don't use background thread to scavenge memory on Tiger until we figure out why it causes a crash.
+ https://bugs.webkit.org/show_bug.cgi?id=27900
+
+ * wtf/FastMalloc.cpp:
+
+2009-08-03 Fumitoshi Ukai <ukai@chromium.org>
+
+ Reviewed by Jan Alonzo.
+
+ Fix build break on Gtk/x86_64.
+ https://bugs.webkit.org/show_bug.cgi?id=27936
+
+ Use JSVALUE64 for X86_64 LINUX, except Qt.
+
+ * wtf/Platform.h:
+
+2009-08-02 Xan Lopez <xlopez@igalia.com>
+
+ Fix the GTK+ build.
+
+ * wtf/Platform.h:
+
+2009-08-02 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Disabled JSVALUE32_64 on Qt builds, since all layout tests mysteriously
+ crash with it enabled.
+
+ * wtf/Platform.h:
+
+2009-08-02 Geoffrey Garen <ggaren@apple.com>
+
+ Qt build fix.
+
+ Added JSAPIValueWrapper.cpp to the build.
+
+ * JavaScriptCore.pri:
+
+2009-08-02 Geoffrey Garen <ggaren@apple.com>
+
+ Windows build fix.
+
+ Exported symbols for JSAPIValueWrapper.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+
+2009-08-02 Geoffrey Garen <ggaren@apple.com>
+
+ GTK build fix.
+
+ * jit/JITStubs.cpp: #include <stdarg.h>, for a definition of va_start.
+
+2009-08-02 Geoffrey Garen <ggaren@apple.com>
+
+ Qt build fix.
+
+ * runtime/Collector.cpp: #include <limits.h>, for a definition of ULONG_MAX.
+
+2009-08-02 Geoffrey Garen <ggaren@apple.com>
+
+ Windows build fix: Nixed JSImmediate::prototype, JSImmediate::toObject,
+ and JSImmediate::toThisObject, and removed their exported symbols.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+ * runtime/JSImmediate.cpp:
+ * runtime/JSImmediate.h:
+
+2009-08-02 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Mark Rowe.
+
+ Enabled JSVALUE32_64 by default on all platforms other than x86_64 (which uses JSVALUE64).
+
+ * wtf/Platform.h:
+
+2009-08-02 Kevin Ollivier <kevino@theolliviers.com>
+
+ Reviewed by Jan Alonzo.
+
+ Script for building the JavaScriptCore library for wx.
+ https://bugs.webkit.org/show_bug.cgi?id=27619
+
+ * wscript: Added.
+
+2009-08-02 Yong Li <yong.li@torchmobile.com>
+
+ Reviewed by George Staikos.
+
+ DateMath depends on strftime and localtime, which need to be imported manually on WinCE
+ https://bugs.webkit.org/show_bug.cgi?id=26558
+
+ * wtf/DateMath.cpp:
+
+2009-08-01 David Kilzer <ddkilzer@apple.com>
+
+ wtf/Threading.h: added include of Platform.h
+
+ Reviewed by Mark Rowe.
+
+ * wtf/Threading.h: Added #include "Platform.h" since this header
+ uses PLATFORM() and other macros.
+
+2009-08-01 Mark Rowe <mrowe@apple.com>
+
+ Rubber-stamped by Oliver Hunt.
+
+ Roll out r46668 as it was misinformed. ScopeChain is only used with placement new.
+
+ * runtime/ScopeChain.h:
+
+2009-08-01 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
+
+ Allow custom memory allocation control for JavaScriptCore's HashMap class
+ http://bugs.webkit.org/show_bug.cgi?id=27871
+
+ Inherits HashMap class from FastAllocBase because it has been
+ instantiated by 'new' in JavaScriptCore/API/JSClassRef.cpp:148.
+
+ * wtf/RefPtrHashMap.h:
+ (WTF::):
+
+2009-08-01 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
+
+ Allow custom memory allocation control for JavaScriptCore's ScopeChain class
+ https://bugs.webkit.org/show_bug.cgi?id=27834
+
+ Inherits ScopeChain class from FastAllocBase because it has been
+ instantiated by 'new' in JavaScriptCore/runtime/JSFunction.h:109.
+
+ * runtime/ScopeChain.h:
+
+2009-08-01 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
+
+ Reviewed by Darin Adler.
+
+ Allow custom memory allocation control for JavaScriptCore's RegExpConstructorPrivate struct
+ https://bugs.webkit.org/show_bug.cgi?id=27833
+
+ Inherits RegExpConstructorPrivate class from FastAllocBase because it has been
+ instantiated by 'new' in JavaScriptCore/runtime/RegExpConstructor.cpp:152.
+
+ * runtime/RegExpConstructor.cpp:
+
+2009-07-31 Yong Li <yong.li@torchmobile.com>
+
+ Reviewed by George Staikos.
+
+ Resurrect the old GetTickCount implementation of currentTime, controlled by WTF_USE_QUERY_PERFORMANCE_COUNTER
+ currentSystemTime taken from older WebKit; currentTime written by Yong Li <yong.li@torchmobile.com>; cleanup by Joe Mason <joe.mason@torchmobile.com>
+ https://bugs.webkit.org/show_bug.cgi?id=27848
+
+ * wtf/CurrentTime.cpp:
+ (WTF::currentSystemTime): get current time with GetCurrentFT
+ (WTF::currentTime): track msec elapsed since first currentSystemTime call using GetTickCount
+ * wtf/Platform.h:
+
+2009-07-31 Ada Chan <adachan@apple.com>
+
+ Fixes the Windows release-PGO build.
+
+ Reviewed by Jon Honeycutt.
+
+ * JavaScriptCore.vcproj/WTF/WTF.vcproj: Suppresses the warning about unreachable code that we get by adding "return 0" to WTF::TCMalloc_PageHeap::runScavengerThread().
+ * wtf/FastMalloc.cpp:
+ (WTF::TCMalloc_PageHeap::runScavengerThread): Fixes the error about the method not returning a value in the release-PGO build.
+
+2009-07-31 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
+
+ Change malloc to fastMalloc and free to fastFree in Yarr's RegexInterpreter.cpp
+ https://bugs.webkit.org/show_bug.cgi?id=27874
+
+ Use fastMalloc and fastFree instead of malloc and free in RegexInterpreter.cpp's methods.
+
+ * yarr/RegexInterpreter.cpp:
+ (JSC::Yarr::Interpreter::allocDisjunctionContext):
+ (JSC::Yarr::Interpreter::freeDisjunctionContext):
+ (JSC::Yarr::Interpreter::allocParenthesesDisjunctionContext):
+ (JSC::Yarr::Interpreter::freeParenthesesDisjunctionContext):
+
+2009-07-30 Xan Lopez <xlopez@igalia.com>
+
+ Reviewed by Jan Alonzo.
+
+ Fix compiler warning.
+
+ GCC does not like C++-style comments in preprocessor directives.
+
+ * wtf/Platform.h:
+
+2009-07-30 John McCall <rjmccall@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Optimize the X86_64 trampolines: avoid the need for filler arguments
+ and move the stub-args area closer to the stack pointer.
+
+ * jit/JIT.h: adjust patch offsets because of slight code-size change
+ * jit/JITCode.h:
+ (JSC::JITCode::execute): don't pass filler args
+ * jit/JITStubs.cpp:
+ (ctiTrampoline): (X86_64): push args onto stack, use args directly
+ (ctiVMThrowTrampoline): (X86_64): adjust %rsp by correct displacement
+ (ctiOpThrowNotCaught): (X86_64): adjust %rsp by correct displacement
+ * jit/JITStubs.h:
+ (JITStackFrame): (X86_64): move args area earlier
+ (ctiTrampoline): remove filler args from prototype
+
+2009-07-30 Gavin Barraclough <barraclough@apple.com>
+
+ Temporarily revert r46618 since this is b0rking on Linux.
+
+2009-07-23 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Make get_by_id/put_by_id/method_check/call defer optimization using a data flag rather than a code modification.
+ ( https://bugs.webkit.org/show_bug.cgi?id=27635 )
+
+ This improves performance of ENABLE(ASSEMBLER_WX_EXCLUSIVE) builds by 2-2.5%, reducing the overhead to about 2.5%.
+ (No performance impact with ASSEMBLER_WX_EXCLUSIVE disabled).
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::printStructureStubInfo):
+ - Make StructureStubInfo store the type as an integer, rather than an OpcodeID.
+
+ * bytecode/CodeBlock.h:
+ (JSC::):
+ (JSC::CallLinkInfo::seenOnce):
+ (JSC::CallLinkInfo::setSeen):
+ (JSC::MethodCallLinkInfo::seenOnce):
+ (JSC::MethodCallLinkInfo::setSeen):
+ - Change a pointer in CallLinkInfo/MethodCallLinkInfo to use a PtrAndFlags, use a flag to track when an op has been executed once.
+
+ * bytecode/StructureStubInfo.cpp:
+ (JSC::StructureStubInfo::deref):
+ - Make StructureStubInfo store the type as an integer, rather than an OpcodeID.
+
+ * bytecode/StructureStubInfo.h:
+ (JSC::StructureStubInfo::StructureStubInfo):
+ (JSC::StructureStubInfo::initGetByIdSelf):
+ (JSC::StructureStubInfo::initGetByIdProto):
+ (JSC::StructureStubInfo::initGetByIdChain):
+ (JSC::StructureStubInfo::initGetByIdSelfList):
+ (JSC::StructureStubInfo::initGetByIdProtoList):
+ (JSC::StructureStubInfo::initPutByIdTransition):
+ (JSC::StructureStubInfo::initPutByIdReplace):
+ (JSC::StructureStubInfo::seenOnce):
+ (JSC::StructureStubInfo::setSeen):
+ - Make StructureStubInfo store the type as an integer, rather than an OpcodeID, add a flag to track when an op has been executed once.
+
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::emitGetById):
+ (JSC::BytecodeGenerator::emitPutById):
+ - Make StructureStubInfo store the type as an integer, rather than an OpcodeID.
+
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileCTIMachineTrampolines):
+ (JSC::JIT::unlinkCall):
+ - Remove the "don't lazy link" stage of calls.
+
+ * jit/JIT.h:
+ (JSC::JIT::compileCTIMachineTrampolines):
+ - Remove the "don't lazy link" stage of calls.
+
+ * jit/JITCall.cpp:
+ (JSC::JIT::compileOpCallSlowCase):
+ - Remove the "don't lazy link" stage of calls.
+
+ * jit/JITStubs.cpp:
+ (JSC::JITThunks::JITThunks):
+ (JSC::JITThunks::tryCachePutByID):
+ (JSC::JITThunks::tryCacheGetByID):
+ (JSC::JITStubs::DEFINE_STUB_FUNCTION):
+ (JSC::JITStubs::getPolymorphicAccessStructureListSlot):
+ - Remove the "don't lazy link" stage of calls, and the "_second" stage of get_by_id/put_by_id/method_check.
+
+ * jit/JITStubs.h:
+ (JSC::JITThunks::ctiStringLengthTrampoline):
+ (JSC::JITStubs::):
+ - Remove the "don't lazy link" stage of calls, and the "_second" stage of get_by_id/put_by_id/method_check.
+
+ * wtf/PtrAndFlags.h:
+ (WTF::PtrAndFlags::PtrAndFlags):
+ (WTF::PtrAndFlags::operator!):
+ (WTF::PtrAndFlags::operator->):
+ - Add ! and -> operators, add constuctor with pointer argument.
+
+2009-07-30 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Fixed failing tests seen on Windows buildbot.
+
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ * jit/JITStubs.h:
+ (JSC::): Use "int" instead of "bool" to guarantee a 32-bit result,
+ regardless of compiler. gcc on mac uses 32-bit values for bool,
+ but gcc on linux and MSVC on Windows use 8-bit values.
+
+2009-07-30 Geoffrey Garen <ggaren@apple.com>
+
+ Windows build fix: added missing symbols on Windows.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+
+2009-07-30 Geoffrey Garen <ggaren@apple.com>
+
+ Windows build fix: removed stale symbols on Windows.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+
+=== End merge of nitro-extreme branch 2009-07-30 ===
+
+2009-07-20 Geoffrey Garen <ggaren@apple.com>
+
+ Fixed a post-review typo in r46066 that caused tons of test failures.
+
+ SunSpider reports no change.
+
+ * runtime/JSArray.cpp:
+ (JSC::JSArray::JSArray): Initialize the full vector capacity, to avoid
+ uninitialized members at the end.
+
+2009-07-20 Geoffrey Garen <ggaren@apple.com>
+
+ Windows WebKit build fix: Added some missing exports.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+
+2009-07-17 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Get the branch working on windows.
+ https://bugs.webkit.org/show_bug.cgi?id=27391
+
+ SunSpider says 0.3% faster.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: Updated
+ MSVC export lists to fix linker errors.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added / removed
+ new / old project files.
+
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileCTIMachineTrampolines): Used #pragma pack to tell
+ MSVC that these structures represent actual memory layout, and should not be
+ automatically aligned. Changed the return value load to load a 64bit quantity
+ into the canonical registers.
+
+ * jit/JIT.h: Moved OBJECT_OFFSETOF definition to StdLibExtras.h because
+ it's needed by more than just the JIT, and it supplements a standard library
+ macro (offsetof).
+
+ * jit/JITCall.cpp:
+ (JSC::JIT::compileOpCallInitializeCallFrame): Fixed an incorrectly signed
+ cast to resolve an MSVC warning.
+
+ * jit/JITStubs.h: Used #pragma pack to tell MSVC that these structures
+ represent actual memory layout, and should not be automatically aligned.
+
+ * runtime/JSArray.cpp:
+ (JSC::JSArray::JSArray): Replaced memset_pattern8 with a for loop, since
+ memset_pattern8 is not portable. (I verified that this version of the loop
+ gives the best performance / generated code in GCC.)
+
+ * runtime/JSObject.h:
+ (JSC::JSObject::JSObject): Removed accidental usage of FIELD_OFFSET --
+ OBJECT_OFFSETOF is our new macro name. (FIELD_OFFSET conflicts with a
+ definition in winnt.h.)
+
+ * runtime/JSValue.cpp: Added some headers needed by non-all-in-one builds.
+
+ * runtime/JSValue.h:
+ (JSC::JSValue::): Made the tag signed, to match MSVC's signed enum values.
+ (GCC doesn't seem to care one way or the other.)
+
+ * wtf/MainThread.cpp: Moved the StdLibExtras.h #include -- I did this a
+ while ago to resolve a conflict with winnt.h. I can't remember if it's truly
+ still needed, but what the heck.
+
+ * wtf/StdLibExtras.h: Moved OBJECT_OFFSETOF definition here.
+
+2009-07-06 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig (?).
+
+ Fixed an assertion seen during the stress test.
+
+ Don't assume that, if op1 is constant, op2 is not, and vice versa. Sadly,
+ not all constants get folded.
+
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_jnless):
+ (JSC::JIT::emitSlow_op_jnless):
+ (JSC::JIT::emit_op_jnlesseq):
+ (JSC::JIT::emitSlow_op_jnlesseq):
+
+2009-07-06 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Include op_convert_this in result caching.
+
+ No change on SunSpider or v8.
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_convert_this):
+
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ * jit/JITStubs.h:
+ (JSC::): Made the op_convert_this JIT stub return an EncodedJSValue, so
+ to maintain the result caching contract that { tag, payload } can be
+ found in { regT1, regT0 }.
+
+2009-07-06 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Implemented result chaining.
+
+ 1% faster on SunSpider. 4%-5% faster on v8.
+
+ * assembler/MacroAssemblerX86Common.h:
+ (JSC::MacroAssemblerX86Common::move):
+ * assembler/X86Assembler.h:
+ (JSC::X86Assembler::movl_rr): Added an optimization to eliminate
+ no-op mov instructions, to simplify chaining.
+
+ * jit/JIT.cpp:
+ (JSC::JIT::JIT):
+ * jit/JIT.h: Added data members and helper functions for recording
+ chained results. We record both a mapping from virtual to machine register
+ and the opcode for which the mapping is valid, to help ensure that the
+ mapping isn't used after the mapped register has been stomped by other
+ instructions.
+
+ * jit/JITCall.cpp:
+ (JSC::JIT::compileOpCallVarargs):
+ (JSC::JIT::compileOpCallVarargsSlowCase):
+ (JSC::JIT::emit_op_ret):
+ (JSC::JIT::emit_op_construct_verify):
+ (JSC::JIT::compileOpCall):
+ (JSC::JIT::compileOpCallSlowCase): Chain function call results.
+
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::emitLoadTag):
+ (JSC::JIT::emitLoadPayload):
+ (JSC::JIT::emitLoad):
+ (JSC::JIT::emitLoad2):
+ (JSC::JIT::isLabeled):
+ (JSC::JIT::map):
+ (JSC::JIT::unmap):
+ (JSC::JIT::isMapped):
+ (JSC::JIT::getMappedPayload):
+ (JSC::JIT::getMappedTag): Use helper functions when loading virtual
+ registers into machine registers, in case the loads can be eliminated
+ by chaining.
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_mov):
+ (JSC::JIT::emit_op_end):
+ (JSC::JIT::emit_op_instanceof):
+ (JSC::JIT::emit_op_get_global_var):
+ (JSC::JIT::emit_op_put_global_var):
+ (JSC::JIT::emit_op_get_scoped_var):
+ (JSC::JIT::emit_op_put_scoped_var):
+ (JSC::JIT::emit_op_to_primitive):
+ (JSC::JIT::emit_op_resolve_global):
+ (JSC::JIT::emit_op_jneq_ptr):
+ (JSC::JIT::emit_op_next_pname):
+ (JSC::JIT::emit_op_to_jsnumber):
+ (JSC::JIT::emit_op_catch): Chain results from these opcodes.
+
+ (JSC::JIT::emit_op_profile_will_call):
+ (JSC::JIT::emit_op_profile_did_call): Load the profiler into regT2 to
+ avoid stomping a chained result.
+
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emit_op_method_check):
+ (JSC::JIT::emit_op_get_by_val):
+ (JSC::JIT::emit_op_get_by_id): Chain results from these opcodes.
+
+ * jit/JITStubCall.h:
+ (JSC::JITStubCall::addArgument): Always use { regT1, regT0 }, to facilitate
+ chaining.
+
+ (JSC::JITStubCall::call): Unmap all mapped registers, since our callee
+ stub might stomp them.
+
+2009-07-01 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Gavin Barraclough.
+
+ Don't reload values in emitBinaryDoubleOp.
+
+ SunSpider reports a 0.6% progression.
+
+ * jit/JIT.h:
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_jnless):
+ (JSC::JIT::emit_op_jnlesseq):
+ (JSC::JIT::emitBinaryDoubleOp):
+
+2009-07-01 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ Convert op_div to load op1 and op2 up front.
+
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_div):
+
+2009-07-01 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ Don't emit code in emitBinaryDoubleOp if code is unreachable, observable
+ via an empty (unlinked) jumplist passed in. This only effects op_jnless
+ and op_jnlesseq at present.
+
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emitSlow_op_jnless):
+ (JSC::JIT::emitSlow_op_jnlesseq):
+ (JSC::JIT::emitBinaryDoubleOp):
+
+2009-07-01 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Converted op_mod to put { tag, payload } in { regT1, regT0 }, and
+ tidied up its constant case.
+
+ SunSpider reports a 0.2% regression, but a micro-benchmark of op_mod
+ shows a 12% speedup, and the SunSpider test that uses op_mod most should
+ benefit a lot from result caching in the end, since it almost always
+ performs (expression) % constant.
+
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_mod):
+ (JSC::JIT::emitSlow_op_mod):
+
+2009-06-30 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ Converted some more arithmetic ops to put { tag, payload } in
+ { regT1, regT0 }.
+
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_mul):
+ (JSC::JIT::emitSlow_op_mul):
+
+2009-06-30 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Converted some more arithmetic ops to put { tag, payload } in
+ { regT1, regT0 }, and added a case for subtract constant.
+
+ SunSpider says no change. v8 says 0.3% slower.
+
+ * jit/JIT.h:
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_add):
+ (JSC::JIT::emitAdd32Constant):
+ (JSC::JIT::emitSlow_op_add):
+ (JSC::JIT::emit_op_sub):
+ (JSC::JIT::emitSub32Constant):
+ (JSC::JIT::emitSlow_op_sub):
+
+2009-06-30 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Remove more uses of addressFor(), load double constants directly from
+ the constantpool in the CodeBlock, rather than from the register file.
+
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emitAdd32Constant):
+ (JSC::JIT::emitBinaryDoubleOp):
+
+2009-06-30 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Fixed a bug in postfix ops, where we would treat x = x++ and x = x--
+ as a no-op, even if x were not an int, and the ++/-- could have side-effects.
+
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_post_inc):
+ (JSC::JIT::emitSlow_op_post_inc):
+ (JSC::JIT::emit_op_post_dec):
+ (JSC::JIT::emitSlow_op_post_dec):
+
+2009-06-30 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Converted some arithmetic ops to put { tag, payload } in
+ { regT1, regT0 }.
+
+ SunSpider says 0.7% faster. v8 says no change.
+
+ * jit/JIT.h:
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_jnless):
+ (JSC::JIT::emit_op_jnlesseq):
+ (JSC::JIT::emit_op_lshift):
+ (JSC::JIT::emit_op_rshift):
+ (JSC::JIT::emit_op_bitand):
+ (JSC::JIT::emit_op_bitor):
+ (JSC::JIT::emit_op_bitxor):
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::isOperandConstantImmediateInt):
+ (JSC::JIT::getOperandConstantImmediateInt):
+
+2009-06-30 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Start removing cases of addressFor().
+
+ * jit/JIT.h:
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emitAdd32Constant):
+ (JSC::JIT::emitBinaryDoubleOp):
+ (JSC::JIT::emit_op_div):
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::emitLoadDouble):
+ (JSC::JIT::emitLoadInt32ToDouble):
+ (JSC::JIT::emitStoreDouble):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_jfalse):
+ (JSC::JIT::emit_op_jtrue):
+
+2009-06-30 Geoffrey Garen <ggaren@apple.com>
+
+ Rolled back in my last patch with regression fixed.
+
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileSlowCases):
+ * jit/JIT.h:
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_loop_if_less):
+ (JSC::JIT::emit_op_loop_if_lesseq):
+ (JSC::JIT::emit_op_resolve_global):
+ (JSC::JIT::emitSlow_op_resolve_global):
+ (JSC::JIT::emit_op_eq):
+ (JSC::JIT::emitSlow_op_eq):
+ (JSC::JIT::emit_op_neq):
+ (JSC::JIT::emitSlow_op_neq):
+
+2009-06-30 Geoffrey Garen <ggaren@apple.com>
+
+ Rolled out my last patch because it was a 2% SunSpider regression.
+
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileSlowCases):
+ * jit/JIT.h:
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_loop_if_less):
+ (JSC::JIT::emit_op_loop_if_lesseq):
+ (JSC::JIT::emit_op_resolve_global):
+ (JSC::JIT::emit_op_eq):
+ (JSC::JIT::emitSlow_op_eq):
+ (JSC::JIT::emit_op_neq):
+ (JSC::JIT::emitSlow_op_neq):
+
+2009-06-30 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Gavin "Sam Weinig" Barraclough.
+
+ Standardized the rest of our opcodes to put { tag, payload } in
+ { regT1, regT0 } where possible.
+
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileSlowCases):
+ * jit/JIT.h:
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_loop_if_less):
+ (JSC::JIT::emit_op_loop_if_lesseq):
+ (JSC::JIT::emit_op_resolve_global):
+ (JSC::JIT::emitSlow_op_resolve_global):
+ (JSC::JIT::emit_op_eq):
+ (JSC::JIT::emitSlow_op_eq):
+ (JSC::JIT::emit_op_neq):
+ (JSC::JIT::emitSlow_op_neq):
+
+2009-06-30 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Geoffrey Garen.
+
+ Replace calls to store32(tagFor()) and store32(payloadFor())
+ with emitStoreInt32(), emitStoreBool(), and emitStoreCell().
+
+ * jit/JIT.h:
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_negate):
+ (JSC::JIT::emit_op_lshift):
+ (JSC::JIT::emit_op_rshift):
+ (JSC::JIT::emit_op_bitand):
+ (JSC::JIT::emitBitAnd32Constant):
+ (JSC::JIT::emit_op_bitor):
+ (JSC::JIT::emitBitOr32Constant):
+ (JSC::JIT::emit_op_bitxor):
+ (JSC::JIT::emitBitXor32Constant):
+ (JSC::JIT::emit_op_bitnot):
+ (JSC::JIT::emit_op_post_inc):
+ (JSC::JIT::emit_op_post_dec):
+ (JSC::JIT::emit_op_pre_inc):
+ (JSC::JIT::emit_op_pre_dec):
+ (JSC::JIT::emit_op_add):
+ (JSC::JIT::emitAdd32Constant):
+ (JSC::JIT::emit_op_sub):
+ (JSC::JIT::emitSub32ConstantLeft):
+ (JSC::JIT::emitSub32ConstantRight):
+ (JSC::JIT::emit_op_mul):
+ (JSC::JIT::emitSlow_op_mul):
+ (JSC::JIT::emit_op_div):
+ (JSC::JIT::emit_op_mod):
+ * jit/JITCall.cpp:
+ (JSC::JIT::emit_op_load_varargs):
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::emitStoreInt32):
+ (JSC::JIT::emitStoreCell):
+ (JSC::JIT::emitStoreBool):
+ (JSC::JIT::emitStore):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_instanceof):
+ (JSC::JIT::emit_op_not):
+ (JSC::JIT::emit_op_eq):
+ (JSC::JIT::emitSlow_op_eq):
+ (JSC::JIT::emit_op_neq):
+ (JSC::JIT::emitSlow_op_neq):
+ (JSC::JIT::compileOpStrictEq):
+ (JSC::JIT::emit_op_eq_null):
+ (JSC::JIT::emit_op_neq_null):
+ * jit/JITStubCall.h:
+ (JSC::JITStubCall::call):
+
+2009-06-30 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Standardized the rest of the property access instructions to put { tag,
+ payload } in { regT1, regT0 }.
+
+ Small v8 speedup, 0.2% SunSpider slowdown.
+
+ * jit/JIT.h:
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::emitLoad):
+ (JSC::JIT::emitLoad2):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emit_op_get_by_val):
+ (JSC::JIT::emitSlow_op_get_by_val):
+ (JSC::JIT::emit_op_put_by_val):
+ (JSC::JIT::emitSlow_op_put_by_val):
+ (JSC::JIT::emit_op_put_by_id):
+ (JSC::JIT::emitSlow_op_put_by_id):
+ (JSC::JIT::patchPutByIdReplace):
+
+2009-06-29 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Gavin Barraclough.
+
+ Various cleanups.
+ - Use fpRegT* instead of X86::xmm*.
+ - Use a switch statement in emitBinaryDoubleOp instead of a bunch of
+ if/elses.
+
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emitAdd32Constant):
+ (JSC::JIT::emitBinaryDoubleOp):
+ (JSC::JIT::emit_op_div):
+
+2009-06-29 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ Add inline code dealing with doubles for op_jfalse and op_jtrue.
+
+ * assembler/MacroAssemblerX86Common.h:
+ (JSC::MacroAssemblerX86Common::):
+ (JSC::MacroAssemblerX86Common::zeroDouble):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_jfalse):
+ (JSC::JIT::emit_op_jtrue):
+
+2009-06-28 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Standardized op_get_by_id to put { tag, payload } in { regT1, regT0 }.
+
+ SunSpider and v8 report maybe 0.2%-0.4% regressions, but the optimization
+ this enables will win much more than that back.
+
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileCTIMachineTrampolines):
+ * jit/JIT.h:
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emit_op_method_check):
+ (JSC::JIT::emit_op_get_by_id):
+ (JSC::JIT::compileGetByIdHotPath):
+ (JSC::JIT::compileGetByIdSlowCase):
+ (JSC::JIT::patchGetByIdSelf):
+ (JSC::JIT::privateCompilePatchGetArrayLength):
+ (JSC::JIT::privateCompileGetByIdProto):
+ (JSC::JIT::privateCompileGetByIdSelfList):
+ (JSC::JIT::privateCompileGetByIdProtoList):
+ (JSC::JIT::privateCompileGetByIdChainList):
+ (JSC::JIT::privateCompileGetByIdChain):
+
+2009-06-26 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Standardized op_call to put { tag, payload } in { regT1, regT0 }.
+
+ SunSpider and v8 report no change.
+
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileCTIMachineTrampolines):
+ * jit/JITCall.cpp:
+ (JSC::JIT::compileOpCallInitializeCallFrame):
+ (JSC::JIT::compileOpCallSetupArgs):
+ (JSC::JIT::compileOpConstructSetupArgs):
+ (JSC::JIT::compileOpCallVarargsSetupArgs):
+ (JSC::JIT::compileOpCallVarargs):
+ (JSC::JIT::compileOpCall):
+ (JSC::JIT::compileOpCallSlowCase):
+
+2009-06-26 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ Handle multiplying by zero a little better by
+ inlining the case that both operands are non-negative
+ into the slowpath.
+
+ * assembler/MacroAssemblerX86Common.h:
+ (JSC::MacroAssemblerX86Common::branchOr32):
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_mul):
+ (JSC::JIT::emitSlow_op_mul):
+
+2009-06-25 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Optimize x++ to ++x inside for loops.
+
+ Sadly, no measurable speedup, but this should help with result chaining.
+
+ * parser/Nodes.cpp:
+ (JSC::ForNode::emitBytecode):
+
+2009-06-25 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Standardized some more opcodes to put { tag, payload } in { regT1, regT0 }.
+
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emitSlow_op_bitnot):
+ (JSC::JIT::emit_op_post_inc):
+
+2009-06-25 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Standardized some more opcodes to put { tag, payload } in { regT1, regT0 }.
+
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_bitnot):
+ (JSC::JIT::emit_op_post_dec):
+ (JSC::JIT::emit_op_pre_inc):
+ (JSC::JIT::emitSlow_op_pre_inc):
+ (JSC::JIT::emit_op_pre_dec):
+ (JSC::JIT::emitSlow_op_pre_dec):
+
+2009-06-25 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Standardized some more opcodes to put { tag, payload } in { regT1, regT0 }.
+
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_negate):
+ (JSC::JIT::emitSlow_op_negate):
+ * jit/JITCall.cpp:
+ (JSC::JIT::emit_op_construct_verify):
+ (JSC::JIT::emitSlow_op_construct_verify):
+
+2009-06-25 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Standardized some more opcodes to put { tag, payload } in { regT1, regT0 }.
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_loop_if_true):
+ (JSC::JIT::emit_op_jfalse):
+ (JSC::JIT::emit_op_jtrue):
+ (JSC::JIT::emit_op_jeq_null):
+ (JSC::JIT::emit_op_jneq_null):
+ (JSC::JIT::emit_op_eq_null):
+ (JSC::JIT::emit_op_neq_null):
+
+2009-06-25 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig (sort of, maybe).
+
+ Fixed some ASSERTs in http/tests/security.
+
+ These ASSERTs were introduced by http://trac.webkit.org/changeset/45057,
+ but the underlying problem was actually older. http://trac.webkit.org/changeset/45057
+ just exposed the problem by enabling optimization in more cases.
+
+ The ASSERTs fired because we tested PropertySlot::slotBase() for validity,
+ but slotBase() ASSERTs if it's invalid, so we would ASSERT before
+ the test could happen. Solution: Remove the ASSERT. Maybe it was valid
+ once, but it clearly goes against a pattern we've deployed of late.
+
+ The underlying problem was that WebCore would re-use a PropertySlot in
+ the case of a forwarding access, and the second use would not completely
+ overwrite the first use. Solution: Make sure to overwrite m_offset when
+ setting a value on a PropertySlot. (Other values already get implicitly
+ overwritten during reuse.)
+
+ * runtime/PropertySlot.h:
+ (JSC::PropertySlot::PropertySlot):
+ (JSC::PropertySlot::setValueSlot):
+ (JSC::PropertySlot::setValue):
+ (JSC::PropertySlot::setRegisterSlot):
+ (JSC::PropertySlot::setUndefined):
+ (JSC::PropertySlot::slotBase):
+ (JSC::PropertySlot::clearOffset):
+
+2009-06-24 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Enable JIT_OPTIMIZE_METHOD_CALLS on the branch, implementation matches current implemenatation in ToT.
+
+ * jit/JIT.h:
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emit_op_method_check):
+ (JSC::JIT::emitSlow_op_method_check):
+ (JSC::JIT::emit_op_get_by_id):
+ (JSC::JIT::compileGetByIdHotPath):
+ (JSC::JIT::emitSlow_op_get_by_id):
+ (JSC::JIT::compileGetByIdSlowCase):
+
+2009-06-23 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Bit off a tiny bit more of standardizing opcode behavior to help with result
+ caching.
+
+ SunSpider reports no change, v8 maybe a tiny speedup.
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_to_jsnumber):
+ (JSC::JIT::emitSlow_op_to_jsnumber):
+ (JSC::JIT::emit_op_convert_this):
+ (JSC::JIT::emitSlow_op_convert_this):
+
+2009-06-23 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Bit off a tiny bit more of standardizing opcode behavior to help with result
+ caching -- including removing my old enemy, op_resolve_function, because
+ it was non-standard, and removing it felt better than helping it limp along.
+
+ SunSpider reports no change, v8 maybe a tiny speedup.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dump):
+ * bytecode/Opcode.h:
+ * bytecompiler/BytecodeGenerator.cpp:
+ * bytecompiler/BytecodeGenerator.h:
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::privateExecute):
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileMainPass):
+ * jit/JIT.h:
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_get_scoped_var):
+ (JSC::JIT::emit_op_put_scoped_var):
+ (JSC::JIT::emit_op_to_primitive):
+ (JSC::JIT::emitSlow_op_to_primitive):
+ * jit/JITStubs.cpp:
+ * jit/JITStubs.h:
+ * parser/Nodes.cpp:
+ (JSC::FunctionCallResolveNode::emitBytecode):
+
+2009-06-23 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Bit off a tiny bit of standardizing opcode behavior to help with result
+ caching.
+
+ 0.6% SunSpider speedup. 0.3% v8 speedup.
+
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::emitLoad): Accomodate a base register that overlaps with payload
+ by loading tag before payload, to avoid stomping base/payload.
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_mov): Abide by the standard "tag in regT1, payload in
+ regT0" semantics.
+
+ (JSC::JIT::emit_op_get_global_var):
+ (JSC::JIT::emit_op_put_global_var): Ditto. Also, removed some irrelevent
+ loads while I was at it. The global object's "d" pointer never changes
+ after construction.
+
+2009-06-23 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Remove 'arguments' field from Register union (again).
+ This time do so without breaking tests (radical, I know).
+
+ * interpreter/CallFrame.h:
+ (JSC::ExecState::optionalCalleeArguments):
+ (JSC::ExecState::setArgumentCount):
+ (JSC::ExecState::init):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::dumpRegisters):
+ (JSC::Interpreter::unwindCallFrame):
+ (JSC::Interpreter::privateExecute):
+ (JSC::Interpreter::retrieveArguments):
+ * interpreter/Register.h:
+ (JSC::Register::withInt):
+ (JSC::Register::):
+ (JSC::Register::Register):
+ (JSC::Register::i):
+ * jit/JITStubs.cpp:
+ (JSC::JITStubs::cti_op_tear_off_arguments):
+ * runtime/Arguments.h:
+ (JSC::JSActivation::copyRegisters):
+ (JSC::Register::arguments):
+ * runtime/JSActivation.cpp:
+ (JSC::JSActivation::argumentsGetter):
+ * runtime/JSActivation.h:
+
+2009-06-23 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Removed some result register tracking cruft in preparation for a new
+ result tracking mechanism.
+
+ SunSpider reports no change.
+
+ * assembler/AbstractMacroAssembler.h:
+ * assembler/X86Assembler.h:
+ (JSC::X86Assembler::JmpDst::JmpDst): No need to track jump targets in
+ machine code; we already do this in bytecode.
+
+ * jit/JIT.cpp:
+ (JSC::JIT::JIT):
+ (JSC::JIT::emitTimeoutCheck): Make sure to save and restore the result
+ registers, so an opcode with a timeout check can still benefit from result
+ register caching.
+
+ (JSC::JIT::privateCompileMainPass):
+ (JSC::JIT::privateCompileSlowCases): Removed calls to killLastResultRegister()
+ in preparation for something new.
+
+ * jit/JIT.h:
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_jnless):
+ (JSC::JIT::emit_op_jnlesseq):
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::emitGetFromCallFrameHeaderPtr):
+ (JSC::JIT::emitGetFromCallFrameHeader32):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_jmp):
+ (JSC::JIT::emit_op_jfalse):
+ (JSC::JIT::emit_op_jtrue):
+ (JSC::JIT::emit_op_jeq_null):
+ (JSC::JIT::emit_op_jneq_null):
+ (JSC::JIT::emit_op_jneq_ptr):
+ (JSC::JIT::emit_op_jsr):
+ (JSC::JIT::emit_op_sret):
+ (JSC::JIT::emit_op_jmp_scopes): ditto
+
+ * jit/JITStubCall.h:
+ (JSC::JITStubCall::JITStubCall):
+ (JSC::JITStubCall::getArgument): added a mechanism for reloading an argument
+ you passed to a JIT stub, for use in emitTimeoutCheck.
+
+2009-06-23 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ Remove now-useless inplace variants of binary ops.
+
+ * jit/JIT.h:
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_bitand):
+ (JSC::JIT::emit_op_bitor):
+ (JSC::JIT::emit_op_bitxor):
+ (JSC::JIT::emit_op_add):
+ (JSC::JIT::emit_op_sub):
+ (JSC::JIT::emit_op_mul):
+
+2009-06-23 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ Move off memory operands to aid in re-enabling result caching.
+
+ - No regression measured.
+
+ * jit/JIT.h:
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_negate):
+ (JSC::JIT::emit_op_jnless):
+ (JSC::JIT::emit_op_jnlesseq):
+ (JSC::JIT::emit_op_lshift):
+ (JSC::JIT::emit_op_rshift):
+ (JSC::JIT::emit_op_bitand):
+ (JSC::JIT::emitBitAnd32Constant):
+ (JSC::JIT::emitBitAnd32InPlace):
+ (JSC::JIT::emit_op_bitor):
+ (JSC::JIT::emitBitOr32Constant):
+ (JSC::JIT::emitBitOr32InPlace):
+ (JSC::JIT::emit_op_bitxor):
+ (JSC::JIT::emitBitXor32Constant):
+ (JSC::JIT::emitBitXor32InPlace):
+ (JSC::JIT::emit_op_bitnot):
+ (JSC::JIT::emit_op_post_inc):
+ (JSC::JIT::emit_op_post_dec):
+ (JSC::JIT::emit_op_pre_inc):
+ (JSC::JIT::emitSlow_op_pre_inc):
+ (JSC::JIT::emit_op_pre_dec):
+ (JSC::JIT::emitSlow_op_pre_dec):
+ (JSC::JIT::emit_op_add):
+ (JSC::JIT::emitAdd32Constant):
+ (JSC::JIT::emitAdd32InPlace):
+ (JSC::JIT::emitSlow_op_add):
+ (JSC::JIT::emitSlowAdd32Constant):
+ (JSC::JIT::emit_op_sub):
+ (JSC::JIT::emitSlow_op_sub):
+ (JSC::JIT::emitSub32ConstantLeft):
+ (JSC::JIT::emitSub32ConstantRight):
+ (JSC::JIT::emitSub32InPlaceLeft):
+ (JSC::JIT::emitSub32InPlaceRight):
+ (JSC::JIT::emitBinaryDoubleOp):
+ (JSC::JIT::emit_op_mul):
+ (JSC::JIT::emitMul32InPlace):
+ (JSC::JIT::emit_op_div):
+ (JSC::JIT::emit_op_mod):
+ * jit/JITCall.cpp:
+ (JSC::JIT::compileOpCallVarargs):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_loop_if_less):
+ (JSC::JIT::emit_op_loop_if_lesseq):
+ (JSC::JIT::emit_op_instanceof):
+ (JSC::JIT::emit_op_to_primitive):
+ (JSC::JIT::emit_op_not):
+ (JSC::JIT::emit_op_jneq_ptr):
+ (JSC::JIT::emit_op_eq):
+ (JSC::JIT::emit_op_neq):
+ (JSC::JIT::emit_op_to_jsnumber):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emit_op_get_by_val):
+ (JSC::JIT::emit_op_put_by_val):
+
+2009-06-23 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Fixed some missing and/or misplaced labels in bytecode generation, so
+ we don't have to work around them in JIT code generation.
+
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::emitJumpSubroutine):
+ * parser/Nodes.cpp:
+ (JSC::TryNode::emitBytecode):
+
+2009-06-22 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ For member function calls, emit "this" directly into the "this" slot
+ for the function call, instead of moving it there later. This reduces
+ time spent in op_mov during certain calls, like "a.b.c()".
+
+ 1%-2% speedup on v8, mostly richards and delta-blue.
+
+ * parser/Nodes.cpp:
+ (JSC::FunctionCallDotNode::emitBytecode):
+
+2009-06-22 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Remove 'arguments' field from Register union. Having JSCell derived types in the union is
+ dangerous since it opens the possibility for the field to be written as a raw pointer but
+ then read as a JSValue. This will lead to statle data being read for the tag, which may
+ be dangerous. Having removed Arguments* types form Register, all arguments objects must
+ always explicitly be stored in the register file as JSValues.
+
+ * interpreter/CallFrame.h:
+ (JSC::ExecState::optionalCalleeArguments):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::unwindCallFrame):
+ (JSC::Interpreter::privateExecute):
+ (JSC::Interpreter::retrieveArguments):
+ * interpreter/Register.h:
+ (JSC::Register::):
+ * jit/JITStubs.cpp:
+ (JSC::JITStubs::cti_op_tear_off_arguments):
+ * runtime/Arguments.h:
+ (JSC::JSActivation::copyRegisters):
+ * runtime/JSActivation.cpp:
+ (JSC::JSActivation::argumentsGetter):
+ * runtime/JSActivation.h:
+
+2009-06-03 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ Add back known this value optimization by abstracting
+ slow case if not JSCell jumps.
+
+ * jit/JIT.h:
+ * jit/JITCall.cpp:
+ (JSC::JIT::compileOpCallVarargs):
+ (JSC::JIT::compileOpCallVarargsSlowCase):
+ (JSC::JIT::compileOpCall):
+ (JSC::JIT::compileOpCallSlowCase):
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::emitJumpSlowCaseIfNotJSCell):
+ (JSC::JIT::linkSlowCaseIfNotJSCell):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_instanceof):
+ (JSC::JIT::emitSlow_op_instanceof):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emit_op_get_by_val):
+ (JSC::JIT::emitSlow_op_get_by_val):
+ (JSC::JIT::emit_op_put_by_val):
+ (JSC::JIT::emitSlow_op_put_by_val):
+ (JSC::JIT::emit_op_get_by_id):
+ (JSC::JIT::emitSlow_op_get_by_id):
+ (JSC::JIT::emit_op_put_by_id):
+ (JSC::JIT::emitSlow_op_put_by_id):
+
+2009-06-01 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Fixed some of the regression in crypto-aes.js. (8.5% speedup in
+ crypto-aes.js.)
+
+ SunSpider reports no change overall.
+
+ Division was producing double results, which took the slow path through
+ array access code.
+
+ Strangely, all my attempts at versions of this patch that modified array
+ access code to accept ints encoded as doubles along the fast or slow paths
+ were regressions. So I did this instead.
+
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_div): When dividing an int by an int, go ahead and try
+ to turn the result into an int. Don't just do int division, though, because
+ testing shows it to be slower than SSE double division, and the corner
+ cases are pretty complicated / lengthy on top of that. Also, don't try
+ to canonicalize division of known tiny numerators into ints, since that's a
+ waste of time.
+
+2009-05-26 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Fixed a regression caused by my recent fix for NaN.
+
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emitBinaryDoubleOp): Actually do the comparison in reverse
+ order, like the ChangeLog said we would, bokay?
+
+2009-05-26 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig and Oliver Hunt.
+
+ Fixed two edge cases in %:
+
+ - Don't do -2147483648 % x as a fast case, since you might do -2147483648 % -1,
+ which will signal a hardware exception due to overflow.
+
+ - In the case of a zero remainder, be sure to store negative zero if the
+ dividend was zero.
+
+ SunSpider reports no change.
+
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_mod):
+ (JSC::JIT::emitSlow_op_mod):
+
+2009-05-25 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Fixed a regression when comparing to NaN.
+
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emitBinaryDoubleOp): For op_jnless and op_jnless_eq, do the
+ comparison in reverse order, and jump if the result is below or
+ below-or-equal. This ensures that we do jump in the case of NaN.
+
+2009-05-25 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ SunSpider says no change.
+
+ Fixed regressions in fast/js/var-declarations-shadowing.html and
+ fast/js/equality.html, caused by recent == and != optimizations.
+
+ * jit/JITStubs.cpp:
+ (JSC::JITStubs::cti_op_eq): Don't treat "compare to string" as always
+ numeric or string comparison. If the second operand is an object, you
+ need to ToPrimitive it, and start all over again. Also, I wrote out each
+ of the possible cases explicitly, to cut down on redundant branching.
+
+2009-05-25 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Mark Rowe.
+
+ Fix bug in fast/js/constant-folding.html where we were not negating
+ -0 properly.
+
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_negate):
+
+2009-05-23 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Refactored new slow case codegen for == and !=.
+
+ SunSpider reports no change, maybe a tiny speedup.
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emitSlow_op_eq):
+ (JSC::JIT::emitSlow_op_neq): Made a vptr comparison a *Ptr operation,
+ instead of *32, to make it portable to 64bit. Reorganized the string
+ and generic cases to make their control flow a little clearer.
+
+2009-05-23 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Optimized == and != for our new value representation -- especially for strings.
+
+ 14% speedup on date-format-tofte.
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_eq):
+ (JSC::JIT::emitSlow_op_eq):
+ (JSC::JIT::emit_op_neq):
+ (JSC::JIT::emitSlow_op_neq):
+ * jit/JITStubCall.h:
+ (JSC::JITStubCall::JITStubCall):
+ * jit/JITStubs.cpp:
+ (JSC::JITStubs::cti_op_eq):
+ (JSC::JITStubs::cti_op_eq_strings):
+ (JSC::JITStubs::cti_op_call_eval):
+ * jit/JITStubs.h:
+ (JSC::):
+ * runtime/JSValue.h:
+
+2009-05-22 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Gavin Barraclough.
+
+ Fix non-SSE enabled builds.
+
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emitSlow_op_add): Don't early return here, we still need to call the JIT stub.
+ (JSC::JIT::emitSlow_op_sub): Ditto.
+
+2009-05-22 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Here's a thought: let's not take a jit stub call just to multiply by 1,
+ bokay?
+
+ imul doesn't set the zero flag, so to test for a zero result, we need
+ an explicit instruction. (Luckily, it does set the overflow flag, so
+ we can still use that.)
+
+ * jit/JIT.h:
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_mul):
+ (JSC::JIT::emitSlow_op_mul):
+ (JSC::JIT::emitMul32InPlace):
+
+2009-05-22 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoffrey "Premature Commit" Garen.
+
+ Add back constant integer cases for op_add.
+
+ * jit/JIT.h:
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_add):
+ (JSC::JIT::emitAdd32Constant):
+ (JSC::JIT::emitSlow_op_add):
+ (JSC::JIT::emitSlowAdd32Constant):
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::getConstantOperandImmediateDouble):
+ (JSC::JIT::isOperandConstantImmediateDouble):
+
+2009-05-22 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Added fast double cases for op_jnless and op_jnlesseq.
+
+ * assembler/AbstractMacroAssembler.h:
+ (JSC::AbstractMacroAssembler::JumpList::jumps): New accesor, used by
+ addSlowCase.
+
+ * assembler/X86Assembler.h:
+ (JSC::X86Assembler::ucomisd_rm): New method for comparing register to
+ memory.
+
+ * jit/JIT.h:
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_jnless):
+ (JSC::JIT::emitSlow_op_jnless):
+ (JSC::JIT::emit_op_jnlesseq):
+ (JSC::JIT::emitSlow_op_jnlesseq):
+ (JSC::JIT::emit_op_add):
+ (JSC::JIT::emit_op_sub):
+ (JSC::JIT::emitBinaryDoubleOp):
+ (JSC::JIT::emit_op_mul):
+ (JSC::JIT::emit_op_div): Modified emitBinaryDoubleOp to accept comparison/jump
+ operations in addition to operations with explicit result registers.
+
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::addSlowCase): Added an "addSlowCase" for JumpLists, so clients
+ can track multiple jumps to the same slow case condition together.
+
+2009-05-21 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Gavin Barraclough.
+
+ Implement op_negate inline fast cases.
+
+ * assembler/MacroAssemblerX86Common.h:
+ (JSC::MacroAssemblerX86Common::neg32):
+ * assembler/X86Assembler.h:
+ (JSC::X86Assembler::):
+ (JSC::X86Assembler::negl_m):
+ (JSC::X86Assembler::xorpd_rr):
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileMainPass):
+ (JSC::JIT::privateCompileSlowCases):
+ * jit/JIT.h:
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_negate):
+ (JSC::JIT::emitSlow_op_negate):
+
+2009-05-20 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Gavin Barraclough.
+
+ Update the patchOffsetGetByIdSlowCaseCall constant for the
+ case that OPCODE_SAMPLING is enabled.
+
+ * jit/JIT.h:
+
+2009-05-20 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Added support for inline subtraction of doubles.
+
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_sub):
+ (JSC::JIT::emitSlow_op_sub):
+ (JSC::JIT::emitSlowSub32InPlaceLeft):
+ (JSC::JIT::emitBinaryDoubleOp):
+
+2009-05-20 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ Added support for inline division.
+
+ * assembler/X86Assembler.h:
+ (JSC::X86Assembler::):
+ (JSC::X86Assembler::divsd_rr):
+ (JSC::X86Assembler::divsd_mr):
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dump):
+ * bytecode/Opcode.h:
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::emitBinaryOp):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::privateExecute):
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileMainPass):
+ (JSC::JIT::privateCompileSlowCases):
+ * jit/JIT.h:
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emitBinaryDoubleOp):
+ (JSC::JIT::emit_op_div):
+ (JSC::JIT::emitSlow_op_div):
+
+2009-05-20 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Added support for inline addition of doubles.
+
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_add):
+ (JSC::JIT::emitSlow_op_add):
+ (JSC::JIT::emitSlowAdd32InPlace):
+ (JSC::JIT::emitBinaryDoubleOp):
+ (JSC::JIT::emit_op_mul):
+ (JSC::JIT::emitSlow_op_mul):
+
+2009-05-20 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Factored inline double operations into a helper function, so that we
+ can reuse this code for other math operations.
+
+ * jit/JIT.h:
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emitBinaryDoubleOp):
+ (JSC::JIT::emit_op_mul):
+ * jit/JITCall.cpp:
+ (JSC::JIT::compileOpCallInitializeCallFrame):
+
+2009-05-20 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Added support for inline multiplication of doubles.
+
+ * assembler/X86Assembler.h:
+ (JSC::X86Assembler::cvtsi2sd_mr): New function, useful for loading an
+ int32 into a double register.
+
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_mul):
+ (JSC::JIT::emitSlow_op_mul): Filled out these cases for double arithmetic.
+
+ * jit/JIT.h:
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::addressFor): New function, useful for addressing a JSValue's
+ full 64bits as a double.
+
+2009-05-19 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ Implement and enable optimized calls.
+
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileCTIMachineTrampolines): Add ENABLE(JIT_OPTIMIZE_CALL) guards
+ around the the optimize call only trampolines (virtualCallPreLink and virtualCallLink).
+ Update the trampolines to account for the new JSValue representation.
+ (JSC::JIT::unlinkCall): Use NULL instead of JSValue noValue.
+
+ * jit/JITCall.cpp:
+ (JSC::JIT::compileOpCall): Update to account for the new JSValue representation
+ (JSC::JIT::compileOpCallSlowCase): Ditto.
+
+ * jit/JITStubs.h: Remove incorrect !ENABLE(JIT_OPTIMIZE_CALL) guard.
+
+ * wtf/Platform.h: Enable ENABLE_JIT_OPTIMIZE_CALL.
+
+2009-05-19 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ Implement and enable optimized property access.
+
+ * assembler/AbstractMacroAssembler.h: Fix comment.
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileCTIMachineTrampolines): Remove array length trampoline
+ and implement the string length trampoline.
+ * jit/JIT.h: Add new constants for patch offsets.
+ * jit/JITInlineMethods.h: Remove FIELD_OFFSET which is now in StdLibExtras.h.
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emit_op_get_by_id):
+ (JSC::JIT::emitSlow_op_get_by_id):
+ (JSC::JIT::emit_op_put_by_id):
+ (JSC::JIT::emitSlow_op_put_by_id):
+ (JSC::JIT::compilePutDirectOffset):
+ (JSC::JIT::compileGetDirectOffset):
+ (JSC::JIT::privateCompilePutByIdTransition):
+ (JSC::JIT::patchGetByIdSelf):
+ (JSC::JIT::patchPutByIdReplace):
+ (JSC::JIT::privateCompilePatchGetArrayLength):
+ (JSC::JIT::privateCompileGetByIdProto):
+ (JSC::JIT::privateCompileGetByIdSelfList):
+ (JSC::JIT::privateCompileGetByIdProtoList):
+ (JSC::JIT::privateCompileGetByIdChainList):
+ (JSC::JIT::privateCompileGetByIdChain):
+ * jit/JITStubCall.h:
+ (JSC::JITStubCall::addArgument): Add version of addArgument that takes
+ two registers for the tag and payload.
+ * jit/JITStubs.cpp:
+ (JSC::JITStubs::JITStubs): Remove array length trampoline pointer.
+ (JSC::JITStubs::cti_op_get_by_id_self_fail):
+ * jit/JITStubs.h:
+ * runtime/JSObject.h:
+ (JSC::JSObject::JSObject): Move m_inheritorID below the property storage
+ to align it to a 16 byte boundary.
+ * wtf/Platform.h: Enable ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS
+ * wtf/StdLibExtras.h: Move FIELD_OFFSET here.
+
+2009-05-17 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ Remove unneeded ExecState parameter from the number JSValue constructors.
+
+ * runtime/JSValue.h:
+ (JSC::jsNumber):
+ (JSC::jsNaN):
+ (JSC::JSValue::JSValue):
+
+2009-05-15 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ Implemented fast path for op_put_by_val when putting to arrays.
+
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emit_op_put_by_val):
+ (JSC::JIT::emitSlow_op_put_by_val):
+
+2009-05-15 Geoffrey Garen <ggaren@apple.com> (Mostly by Sam)
+
+ Reviewed by Sam Weinig.
+
+ Implemented fast path for op_get_by_val when accessing array.
+
+ * jit/JIT.cpp:
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emit_op_get_by_val):
+ (JSC::JIT::emitSlow_op_get_by_val):
+
+2009-05-14 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Fixed a failure in fast/js/math-transforms.html caused by failing to
+ preserve -0 in multiplication.
+
+ * assembler/X86Assembler.h:
+ (JSC::X86Assembler::jz):
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_mul):
+ (JSC::JIT::emitSlow_op_mul):
+ (JSC::JIT::emitMul32Constant):
+ (JSC::JIT::emitMul32InPlace): Check both for overflow and for zero when
+ doing multiplication. Use a slow case to get these right.
+
+2009-05-14 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Fixed a bug in the varargs calling convention.
+
+ * jit/JITCall.cpp:
+ (JSC::JIT::compileOpCallVarargs): Move the argument count into regT1,
+ since that's where ctiVirtualCall expects it to be.
+
+2009-05-14 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Fixed a small bug in instanceof's looping code.
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_instanceof): NULL means the object has no prototype,
+ so only loop when *not* equal to NULL.
+
+2009-05-14 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Fixed a small bug in instanceof's result writing code.
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_instanceof): Make sure to fill out the payload bits
+ in all cases.
+
+2009-05-14 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ Removed an invalid assertion in cti_op_urshift which
+ depended on a fast path for op_urshift which has
+ never existed.
+
+ * jit/JITStubs.cpp:
+ (JSC::JITStubs::cti_op_urshift):
+
+2009-05-14 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Fixed loop_if_true, which had the same reversed test that jtrue had.
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_loop_if_true):
+
+2009-05-14 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ In op_neq, we apparently want to check that one value
+ does *not* equal another. Go figure.
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_neq):
+
+2009-05-14 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ The slow case of op_mod should call op_mod's jit stub,
+ not op_mul. That would be dumb.
+
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emitSlow_op_mod):
+
+2009-05-14 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Fixed problems when using 'arguments' due to a half-initialized register.
+
+ * interpreter/CallFrame.h:
+ (JSC::ExecState::setCalleeArguments):
+ (JSC::ExecState::init): Require a full JSValue when setting up the
+ 'arguments' virtual register, since this register is accessible from JIT
+ code and bytecode, and needs to be a true JSValue.
+
+ * interpreter/CallFrameClosure.h:
+ (JSC::CallFrameClosure::resetCallFrame): ditto
+
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::privateExecute): ditto
+
+ * interpreter/Register.h: Removed the constructor that allowed assignment
+ of a JSArguments* to a register. That is not safe. See above.
+
+ * jit/JITStubs.cpp:
+ (JSC::JITStubs::cti_op_create_arguments):
+ (JSC::JITStubs::cti_op_create_arguments_no_params): ditto
+
+2009-05-14 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ We really want to go to the slow case in op_jfalse and
+ op_jtrue if the value is *not* boolean.
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_jfalse):
+ (JSC::JIT::emit_op_jtrue):
+
+2009-05-14 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ Flipped the condition when emitting a an op_loop_if_less or op_loop_if_lesseq
+ if the first operand is a constant.
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_loop_if_less):
+ (JSC::JIT::emit_op_loop_if_lesseq):
+
+2009-05-14 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ Added missing return in op_jnless and op_jnlesseq.
+
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_jnless):
+ (JSC::JIT::emit_op_jnlesseq):
+
+2009-05-14 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ Load constants into the the register file as a temporary measure to
+ aid bring up. This allows us to use to treat constants like any
+ other virtual register.
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_enter):
+ (JSC::JIT::emit_op_enter_with_activation):
+
+2009-05-14 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Implemented op_strict_eq. Original patch by Snowy, by way of Sam and Gavin.
+
+ * assembler/MacroAssemblerX86Common.h:
+ (JSC::MacroAssemblerX86Common::set8): Added set8, since it's slightly
+ faster than set32, and the new value representation usually doesn't
+ need set32.
+
+ * jit/JIT.cpp:
+ * jit/JIT.h:
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::emitLoadTag):
+ (JSC::JIT::emitLoadPayload): Added helper functions for dealing with
+ constants. Eventually, we should write special cases for all constants,
+ but these are helpful in the short term.
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::compileOpStrictEq):
+ (JSC::JIT::emitSlow_op_stricteq):
+ (JSC::JIT::emitSlow_op_nstricteq): teh opcodez.
+
+ * runtime/JSValue.h:
+ (JSC::JSValue::):
+ (JSC::JSValue::isDouble): Added a LowestTag for clarity.
+
+2009-05-13 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Fixed some bugs in host function calls.
+
+ testapi now passes!
+
+ * jit/JIT.cpp: Changed some registers around to avoid overwriting edx:eax,
+ which is how JSValues are now returned. Also changed the code that
+ passes thisValue to pass the full 64bits of the value. Also added
+ an #error compiler directive to other platform builds, since the JSValue
+ return signature probably won't return in edx:eax on those platforms,
+ and we'll have to investigate a solution.
+
+2009-05-13 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Removed parameters from functions that are intended never to use their
+ parameters.
+
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emitSlow_op_get_by_val):
+ (JSC::JIT::emitSlow_op_put_by_val):
+
+2009-05-13 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Ported op_instance_of from TOT. It's basically the same, but some register
+ stuff changed to memory stuff.
+
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::emitPutJITStubArgFromVirtualRegister):
+ (JSC::JIT::emitStore): Changed to use helper functions.
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_instanceof):
+ (JSC::JIT::emitSlow_op_instanceof): Ported from TOT.
+
+2009-05-13 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Added a comment to explain an exception-handling subtelty that we found
+ hard to remember when reviewing my last patch.
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_catch):
+
+2009-05-13 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Implemented try/catch.
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_throw): Updated to use JITStackFrame abstraction.
+ (JSC::JIT::emit_op_catch): Filled out.
+
+2009-05-13 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ Implemented op_loop_if_true, op_jfalse, op_jtrue, op_jeq_null and op_jneq_null
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emitSlow_op_instanceof): Moved from below to be next to its
+ fast brother.
+
+ (JSC::JIT::emit_op_loop_if_true): Similar to the old version
+ in that it tries to do the integer case first and reduce the
+ number of jumps you might need to take.
+ (JSC::JIT::emitSlow_op_loop_if_true):
+
+ (JSC::JIT::emit_op_jfalse): Very similar to op_loop_if_true, only
+ the inverse and without a timeout check.
+ (JSC::JIT::emitSlow_op_jfalse):
+
+ (JSC::JIT::emit_op_jtrue): Very similar to op_loop_if_true except
+ without the timeout check.
+ (JSC::JIT::emitSlow_op_jtrue):
+
+ (JSC::JIT::emit_op_jeq_null): Very similar to the implementation
+ of op_eq, except it takes jumps instead of copying the condition
+ to a dst.
+ (JSC::JIT::emit_op_jneq_null): Ditto but for op_neq.
+
+2009-05-13 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Implemented op_call_varargs.
+
+ * jit/JITCall.cpp:
+ (JSC::JIT::compileOpCallVarargsSetupArgs):
+ (JSC::JIT::compileOpCallVarargs):
+ (JSC::JIT::emit_op_call):
+ (JSC::JIT::emit_op_call_eval):
+ (JSC::JIT::emit_op_load_varargs):
+ (JSC::JIT::emit_op_call_varargs):
+ (JSC::JIT::emit_op_construct):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_jneq_ptr):
+
+2009-05-13 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Implemented op_call_eval.
+
+ * jit/JITCall.cpp:
+ (JSC::JIT::compileOpCallVarargsSetupArgs):
+ (JSC::JIT::compileOpCall):
+ * jit/JITStubCall.h:
+ (JSC::CallEvalJITStub::CallEvalJITStub):
+
+2009-05-13 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Gavin Barraclough.
+
+ Implemented op_not. (Gavin did most of the work!)
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_not):
+ (JSC::JIT::emitSlow_op_not):
+
+2009-05-13 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Implemented op_global_resolve.
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_loop_if_less):
+ (JSC::JIT::emit_op_loop_if_lesseq): Added back accidentally removed
+ early returns.
+
+ (JSC::JIT::emit_op_resolve_global):
+ * jit/JITStubs.cpp:
+ (JSC::JITStubs::cti_op_resolve_global): Pretty similar to the old code,
+ but we need two reads and a TimesEight step in order to account for the
+ 64bit value size.
+
+ * jit/JITStubs.h:
+ (JSC::): Slightly tweaked this code to specialize for a JSGlobalObject*,
+ to avoid having to pass an irrelevant tag pointer to the stub.
+
+2009-05-13 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ Implemented op_to_jsnumber.
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_to_jsnumber):
+ (JSC::JIT::emitSlow_op_to_jsnumber):
+
+2009-05-13 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ Implemented op_convert_this.
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_convert_this):
+ (JSC::JIT::emitSlow_op_convert_this):
+
+2009-05-13 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Got basic JS function and constructor calls working.
+
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileCTIMachineTrampolines):
+ * jit/JIT.h:
+ * jit/JITCall.cpp:
+ (JSC::JIT::compileOpCallSetupArgs):
+ (JSC::JIT::compileOpCallVarargsSetupArgs):
+ (JSC::JIT::compileOpConstructSetupArgs):
+ (JSC::JIT::emit_op_ret):
+ (JSC::JIT::emit_op_construct_verify):
+ (JSC::JIT::emitSlow_op_construct_verify):
+ (JSC::JIT::emitSlow_op_call):
+ (JSC::JIT::emitSlow_op_call_eval):
+ (JSC::JIT::emitSlow_op_call_varargs):
+ (JSC::JIT::emitSlow_op_construct):
+ (JSC::JIT::compileOpCall): Filled out these cases, with call_eval #if'd out.
+
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::emitPutJITStubArgFromVirtualRegister):
+ (JSC::JIT::emitLoad): Restored some legacy "*CTIArg*" functions,
+ since I wanted to avoid the complexity of revamping the API here while
+ trying to bring it up. Eventually, we should re-remove all of these functions.
+
+ (JSC::JIT::recordJumpTarget): Removed unnecessary macro cruft. You will
+ not silence me, Sam Weinig! The world will know that you are a crufty,
+ crufty, crufty programmer!!!
+
+ * jit/JITOpcodes.cpp:
+ * jit/JITStubs.cpp:
+ (JSC::):
+ * jit/JITStubs.h: Changed up some offsets in the JITStackFrame class, since
+ and off-by-one error was causing stack misalignment.
+
+2009-05-13 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ Implement op_eq_null and op_neq_null.
+
+ * assembler/MacroAssemblerX86Common.h:
+ (JSC::MacroAssemblerX86Common::set8):
+ (JSC::MacroAssemblerX86Common::setTest8):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_stricteq):
+ (JSC::JIT::emitSlow_op_stricteq):
+ (JSC::JIT::emit_op_nstricteq):
+ (JSC::JIT::emitSlow_op_nstricteq):
+ (JSC::JIT::emit_op_eq_null):
+ (JSC::JIT::emit_op_neq_null):
+ * jsc.cpp:
+
+2009-05-12 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ Implement op_new_error.
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_new_error):
+ * jit/JITStubCall.h:
+ (JSC::JITStubCall::addArgument): Add a version of addArgument
+ that takes a constant JSValue.
+
+2009-05-12 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ Remove now unused emitGetVariableObjectRegister and emitPutVariableObjectRegister.
+
+ * jit/JIT.cpp:
+ * jit/JIT.h:
+
+2009-05-12 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ Implement op_to_primitive and op_next_pname.
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emitSlow_op_construct_verify):
+ (JSC::JIT::emit_op_to_primitive):
+ (JSC::JIT::emitSlow_op_to_primitive):
+ (JSC::JIT::emitSlow_op_loop_if_true):
+ (JSC::JIT::emit_op_jtrue):
+ (JSC::JIT::emit_op_next_pname):
+
+2009-05-12 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ Add op_get_global_var, op_put_global_var, emit_op_get_scoped_var, emit_op_put_scoped_var and
+ op_unexpected_load.
+
+ * jit/JIT.h:
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::tagFor):
+ (JSC::JIT::payloadFor):
+ (JSC::JIT::emitLoad):
+ (JSC::JIT::emitStore):
+ (JSC::JIT::emitLoadReturnValue):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_get_global_var):
+ (JSC::JIT::emit_op_put_global_var):
+ (JSC::JIT::emit_op_get_scoped_var):
+ (JSC::JIT::emit_op_put_scoped_var):
+ (JSC::JIT::emit_op_unexpected_load):
+
+2009-05-12 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Added overflow handling to op_sub.
+
+ * jit/JIT.h:
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emitSlow_op_sub):
+ (JSC::JIT::emitSlowSub32InPlaceLeft):
+
+2009-05-12 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ Remove a function call by folding op_get_by_id and op_put_by_id into
+ their respective compile functions.
+
+ * jit/JIT.h:
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emit_op_get_by_id):
+ (JSC::JIT::emitSlow_op_get_by_id):
+ (JSC::JIT::emit_op_put_by_id):
+ (JSC::JIT::emitSlow_op_put_by_id):
+
+2009-05-12 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ Make JITStubCall work in 64bit by making the stack index
+ step dependent on the size of void*.
+
+ * jit/JITStubCall.h:
+ (JSC::JITStubCall::JITStubCall):
+ (JSC::JITStubCall::addArgument):
+
+2009-05-12 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ Implement simple version of property access opcodes
+ which just call a stub functions.
+
+ * jit/JITOpcodes.cpp:
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emitSlow_op_put_by_id):
+ (JSC::JIT::emitSlow_op_get_by_id):
+ (JSC::JIT::emit_op_get_by_val):
+ (JSC::JIT::emitSlow_op_get_by_val):
+ (JSC::JIT::emit_op_put_by_val):
+ (JSC::JIT::emitSlow_op_put_by_val):
+ (JSC::JIT::emit_op_put_by_index):
+ (JSC::JIT::emit_op_put_getter):
+ (JSC::JIT::emit_op_put_setter):
+ (JSC::JIT::emit_op_del_by_id):
+ (JSC::JIT::compileGetByIdHotPath):
+ (JSC::JIT::compilePutByIdHotPath):
+ * jit/JITStubCall.h:
+ (JSC::JITStubCall::addArgument):
+ * jsc.cpp:
+
+2009-05-12 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Added work-around for XCode debugging echo problem.
+
+ * jsc.cpp:
+ (runInteractive):
+
+2009-05-12 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Added overflow handling to op_add.
+
+ * jit/JIT.h:
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emitSlow_op_add):
+ (JSC::JIT::emitSlowAdd32InPlace):
+
+2009-05-12 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ Add slow cases for op_jnless or emit_op_jnlesseq.
+
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emitSlow_op_jnless):
+ (JSC::JIT::emitSlow_op_jnlesseq):
+
+2009-05-12 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ Add implementations for op_jnless, emit_op_jnlesseq, op_loop_if_less and op_loop_if_lesseq.
+ No slow cases for op_jnless or emit_op_jnlesseq yet.
+
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_jnless):
+ (JSC::JIT::emitSlow_op_jnless):
+ (JSC::JIT::emit_op_jnlesseq):
+ (JSC::JIT::emitSlow_op_jnlesseq):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_loop_if_less):
+ (JSC::JIT::emitSlow_op_loop_if_less):
+ (JSC::JIT::emit_op_loop_if_lesseq):
+ (JSC::JIT::emitSlow_op_loop_if_lesseq):
+
+2009-05-12 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ Turn the RECORD_JUMP_TARGET macro into an inline function.
+
+ * jit/JIT.h:
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::recordJumpTarget):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_jmp):
+ (JSC::JIT::emit_op_jsr):
+ (JSC::JIT::emit_op_jmp_scopes):
+
+2009-05-12 Sam Weinig <sam@webkit.org>
+
+ Add MacroAssemblerX86Common::set8 to fix the build.
+
+ * assembler/MacroAssemblerX86Common.h:
+ (JSC::MacroAssemblerX86Common::set8):
+
+2009-05-12 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Added overflow recovery for pre_inc and pre_dec.
+
+ Turned some short-circuit code into early returns, as is the WebKit style.
+
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_post_inc):
+ (JSC::JIT::emitSlow_op_post_inc):
+ (JSC::JIT::emit_op_post_dec):
+ (JSC::JIT::emitSlow_op_post_dec):
+ (JSC::JIT::emitSlow_op_pre_inc):
+ (JSC::JIT::emitSlow_op_pre_dec):
+
+2009-05-12 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ Implement op_jmp, op_loop, op_eq and op_neq.
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_jmp):
+ (JSC::JIT::emit_op_loop):
+ (JSC::JIT::emit_op_eq):
+ (JSC::JIT::emitSlow_op_eq):
+ (JSC::JIT::emit_op_neq):
+ (JSC::JIT::emitSlow_op_neq):
+ (JSC::JIT::emit_op_enter):
+ (JSC::JIT::emit_op_enter_with_activation):
+
+2009-05-12 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ Implement the slow cases for arithmetic opcodes.
+
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emitSlow_op_lshift):
+ (JSC::JIT::emitSlow_op_rshift):
+ (JSC::JIT::emitSlow_op_bitand):
+ (JSC::JIT::emitSlow_op_bitor):
+ (JSC::JIT::emitSlow_op_bitxor):
+ (JSC::JIT::emitSlow_op_bitnot):
+ (JSC::JIT::emitSlow_op_sub):
+ (JSC::JIT::emitSlow_op_mul):
+ (JSC::JIT::emitSlow_op_mod):
+ (JSC::JIT::emit_op_mod):
+
+2009-05-12 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ Implement op_bitnot.
+
+ * assembler/MacroAssemblerX86Common.h:
+ (JSC::MacroAssemblerX86Common::not32):
+ * assembler/X86Assembler.h:
+ (JSC::X86Assembler::notl_m):
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_bitnot):
+
+2009-05-12 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ Add arithmetic opcode implementations from the old nitro-extreme branch.
+
+ * jit/JIT.h:
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_jnless):
+ (JSC::JIT::emitSlow_op_jnless):
+ (JSC::JIT::emit_op_jnlesseq):
+ (JSC::JIT::emitSlow_op_jnlesseq):
+ (JSC::JIT::emit_op_lshift):
+ (JSC::JIT::emitSlow_op_lshift):
+ (JSC::JIT::emit_op_rshift):
+ (JSC::JIT::emitSlow_op_rshift):
+ (JSC::JIT::emit_op_bitand):
+ (JSC::JIT::emitBitAnd32Constant):
+ (JSC::JIT::emitBitAnd32InPlace):
+ (JSC::JIT::emit_op_bitor):
+ (JSC::JIT::emitSlow_op_bitor):
+ (JSC::JIT::emitBitOr32Constant):
+ (JSC::JIT::emitBitOr32InPlace):
+ (JSC::JIT::emit_op_bitxor):
+ (JSC::JIT::emitSlow_op_bitxor):
+ (JSC::JIT::emitBitXor32Constant):
+ (JSC::JIT::emitBitXor32InPlace):
+ (JSC::JIT::emit_op_bitnot):
+ (JSC::JIT::emitSlow_op_bitnot):
+ (JSC::JIT::emit_op_post_inc):
+ (JSC::JIT::emitSlow_op_post_inc):
+ (JSC::JIT::emit_op_post_dec):
+ (JSC::JIT::emitSlow_op_post_dec):
+ (JSC::JIT::emit_op_pre_inc):
+ (JSC::JIT::emitSlow_op_pre_inc):
+ (JSC::JIT::emit_op_pre_dec):
+ (JSC::JIT::emitSlow_op_pre_dec):
+ (JSC::JIT::emit_op_add):
+ (JSC::JIT::emitAdd32Constant):
+ (JSC::JIT::emitAdd32InPlace):
+ (JSC::JIT::emitSlow_op_add):
+ (JSC::JIT::emit_op_sub):
+ (JSC::JIT::emitSlow_op_sub):
+ (JSC::JIT::emitSub32ConstantLeft):
+ (JSC::JIT::emitSub32ConstantRight):
+ (JSC::JIT::emitSub32InPlaceLeft):
+ (JSC::JIT::emitSub32InPlaceRight):
+ (JSC::JIT::emit_op_mul):
+ (JSC::JIT::emitSlow_op_mul):
+ (JSC::JIT::emitMul32Constant):
+ (JSC::JIT::emitMul32InPlace):
+ (JSC::JIT::emit_op_mod):
+ (JSC::JIT::emitSlow_op_mod):
+ * jit/JITOpcodes.cpp:
+
+2009-05-12 Geoffrey Garen <ggaren@apple.com>
+
+ Removed JIT_OPTIMIZE_ARITHMETIC setting, since it was all about 32bit
+ value representations.
+
+ Added JSAPIValueWrapper to the repository.
+
+ * jit/JIT.h:
+ * jit/JITArithmetic.cpp:
+ * runtime/JSAPIValueWrapper.cpp: Added.
+ (JSC::JSAPIValueWrapper::toPrimitive):
+ (JSC::JSAPIValueWrapper::getPrimitiveNumber):
+ (JSC::JSAPIValueWrapper::toBoolean):
+ (JSC::JSAPIValueWrapper::toNumber):
+ (JSC::JSAPIValueWrapper::toString):
+ (JSC::JSAPIValueWrapper::toObject):
+ * runtime/JSAPIValueWrapper.h: Added.
+ (JSC::JSAPIValueWrapper::value):
+ (JSC::JSAPIValueWrapper::isAPIValueWrapper):
+ (JSC::JSAPIValueWrapper::JSAPIValueWrapper):
+ (JSC::jsAPIValueWrapper):
+ * wtf/Platform.h:
+
+2009-05-12 Geoffrey Garen <ggaren@apple.com>
+
+ Turned on the JIT and got it building and running the most trivial of
+ programs.
+
+ All configurable optimizations are turned off, and a few opcodes are ad
+ hoc #if'd out.
+
+ So far, I've only merged op_mov and op_end, but some stub-reliant
+ opcodes work as-is from TOT.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::~CodeBlock):
+ * bytecode/CodeBlock.h:
+ * jit/JIT.cpp:
+ (JSC::JIT::compileOpStrictEq):
+ * jit/JIT.h:
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_lshift):
+ (JSC::JIT::emitSlow_op_lshift):
+ (JSC::JIT::emit_op_rshift):
+ (JSC::JIT::emitSlow_op_rshift):
+ (JSC::JIT::emit_op_jnless):
+ (JSC::JIT::emitSlow_op_jnless):
+ (JSC::JIT::emit_op_jnlesseq):
+ (JSC::JIT::emitSlow_op_jnlesseq):
+ (JSC::JIT::emit_op_bitand):
+ (JSC::JIT::emitSlow_op_bitand):
+ (JSC::JIT::emit_op_post_inc):
+ (JSC::JIT::emitSlow_op_post_inc):
+ (JSC::JIT::emit_op_post_dec):
+ (JSC::JIT::emitSlow_op_post_dec):
+ (JSC::JIT::emit_op_pre_inc):
+ (JSC::JIT::emitSlow_op_pre_inc):
+ (JSC::JIT::emit_op_pre_dec):
+ (JSC::JIT::emitSlow_op_pre_dec):
+ (JSC::JIT::emit_op_mod):
+ (JSC::JIT::emitSlow_op_mod):
+ (JSC::JIT::emit_op_add):
+ (JSC::JIT::emit_op_mul):
+ (JSC::JIT::emit_op_sub):
+ (JSC::JIT::compileBinaryArithOpSlowCase):
+ (JSC::JIT::emitSlow_op_add):
+ (JSC::JIT::emitSlow_op_mul):
+ * jit/JITCall.cpp:
+ (JSC::JIT::compileOpCallInitializeCallFrame):
+ (JSC::JIT::compileOpConstructSetupArgs):
+ (JSC::JIT::compileOpCallVarargs):
+ (JSC::JIT::compileOpCall):
+ (JSC::JIT::compileOpCallSlowCase):
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::getConstantOperandImmediateInt):
+ (JSC::JIT::isOperandConstantImmediateInt):
+ (JSC::JIT::emitInitRegister):
+ (JSC::JIT::addSlowCase):
+ (JSC::JIT::addJump):
+ (JSC::JIT::emitJumpSlowToHot):
+ (JSC::JIT::tagFor):
+ (JSC::JIT::payloadFor):
+ (JSC::JIT::emitLoad):
+ (JSC::JIT::emitLoadReturnValue):
+ (JSC::JIT::emitStore):
+ (JSC::JIT::emitStoreReturnValue):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_mov):
+ (JSC::JIT::emit_op_end):
+ (JSC::JIT::emit_op_jmp):
+ (JSC::JIT::emit_op_loop):
+ (JSC::JIT::emit_op_loop_if_less):
+ (JSC::JIT::emit_op_loop_if_lesseq):
+ (JSC::JIT::emit_op_instanceof):
+ (JSC::JIT::emit_op_get_global_var):
+ (JSC::JIT::emit_op_put_global_var):
+ (JSC::JIT::emit_op_get_scoped_var):
+ (JSC::JIT::emit_op_put_scoped_var):
+ (JSC::JIT::emit_op_tear_off_activation):
+ (JSC::JIT::emit_op_ret):
+ (JSC::JIT::emit_op_construct_verify):
+ (JSC::JIT::emit_op_to_primitive):
+ (JSC::JIT::emit_op_loop_if_true):
+ (JSC::JIT::emit_op_resolve_global):
+ (JSC::JIT::emit_op_not):
+ (JSC::JIT::emit_op_jfalse):
+ (JSC::JIT::emit_op_jeq_null):
+ (JSC::JIT::emit_op_jneq_null):
+ (JSC::JIT::emit_op_jneq_ptr):
+ (JSC::JIT::emit_op_unexpected_load):
+ (JSC::JIT::emit_op_eq):
+ (JSC::JIT::emit_op_bitnot):
+ (JSC::JIT::emit_op_jtrue):
+ (JSC::JIT::emit_op_neq):
+ (JSC::JIT::emit_op_bitxor):
+ (JSC::JIT::emit_op_bitor):
+ (JSC::JIT::emit_op_throw):
+ (JSC::JIT::emit_op_next_pname):
+ (JSC::JIT::emit_op_push_scope):
+ (JSC::JIT::emit_op_to_jsnumber):
+ (JSC::JIT::emit_op_push_new_scope):
+ (JSC::JIT::emit_op_catch):
+ (JSC::JIT::emit_op_switch_imm):
+ (JSC::JIT::emit_op_switch_char):
+ (JSC::JIT::emit_op_switch_string):
+ (JSC::JIT::emit_op_new_error):
+ (JSC::JIT::emit_op_eq_null):
+ (JSC::JIT::emit_op_neq_null):
+ (JSC::JIT::emit_op_convert_this):
+ (JSC::JIT::emit_op_profile_will_call):
+ (JSC::JIT::emit_op_profile_did_call):
+ (JSC::JIT::emitSlow_op_construct_verify):
+ (JSC::JIT::emitSlow_op_get_by_val):
+ (JSC::JIT::emitSlow_op_loop_if_less):
+ (JSC::JIT::emitSlow_op_loop_if_lesseq):
+ (JSC::JIT::emitSlow_op_put_by_val):
+ (JSC::JIT::emitSlow_op_not):
+ (JSC::JIT::emitSlow_op_instanceof):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emit_op_get_by_val):
+ (JSC::JIT::emit_op_put_by_val):
+ (JSC::JIT::emit_op_put_by_index):
+ (JSC::JIT::emit_op_put_getter):
+ (JSC::JIT::emit_op_put_setter):
+ (JSC::JIT::emit_op_del_by_id):
+ (JSC::JIT::compileGetByIdHotPath):
+ (JSC::JIT::compilePutByIdHotPath):
+ * jit/JITStubCall.h:
+ (JSC::JITStubCall::JITStubCall):
+ (JSC::JITStubCall::addArgument):
+ (JSC::JITStubCall::call):
+ (JSC::JITStubCall::):
+ (JSC::CallEvalJITStub::CallEvalJITStub):
+ * jit/JITStubs.cpp:
+ (JSC::):
+ (JSC::JITStubs::cti_op_add):
+ (JSC::JITStubs::cti_op_pre_inc):
+ (JSC::JITStubs::cti_op_mul):
+ (JSC::JITStubs::cti_op_get_by_val):
+ (JSC::JITStubs::cti_op_get_by_val_string):
+ (JSC::JITStubs::cti_op_get_by_val_byte_array):
+ (JSC::JITStubs::cti_op_sub):
+ (JSC::JITStubs::cti_op_put_by_val):
+ (JSC::JITStubs::cti_op_put_by_val_array):
+ (JSC::JITStubs::cti_op_put_by_val_byte_array):
+ (JSC::JITStubs::cti_op_negate):
+ (JSC::JITStubs::cti_op_div):
+ (JSC::JITStubs::cti_op_pre_dec):
+ (JSC::JITStubs::cti_op_post_inc):
+ (JSC::JITStubs::cti_op_eq):
+ (JSC::JITStubs::cti_op_lshift):
+ (JSC::JITStubs::cti_op_bitand):
+ (JSC::JITStubs::cti_op_rshift):
+ (JSC::JITStubs::cti_op_bitnot):
+ (JSC::JITStubs::cti_op_mod):
+ (JSC::JITStubs::cti_op_neq):
+ (JSC::JITStubs::cti_op_post_dec):
+ (JSC::JITStubs::cti_op_urshift):
+ (JSC::JITStubs::cti_op_bitxor):
+ (JSC::JITStubs::cti_op_bitor):
+ (JSC::JITStubs::cti_op_switch_imm):
+ * jit/JITStubs.h:
+ * runtime/JSArray.cpp:
+ (JSC::JSArray::JSArray):
+ * runtime/JSFunction.cpp:
+ (JSC::JSFunction::~JSFunction):
+ * runtime/JSValue.h:
+ (JSC::JSValue::payload):
+ * wtf/Platform.h:
+
+2009-05-07 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Geoffrey Garen.
+
+ Add some new MacroAssembler and assembler functions that will be needed shortly.
+
+ * assembler/MacroAssemblerX86Common.h:
+ (JSC::MacroAssemblerX86Common::add32):
+ (JSC::MacroAssemblerX86Common::and32):
+ (JSC::MacroAssemblerX86Common::mul32):
+ (JSC::MacroAssemblerX86Common::neg32):
+ (JSC::MacroAssemblerX86Common::or32):
+ (JSC::MacroAssemblerX86Common::sub32):
+ (JSC::MacroAssemblerX86Common::xor32):
+ (JSC::MacroAssemblerX86Common::branchAdd32):
+ (JSC::MacroAssemblerX86Common::branchMul32):
+ (JSC::MacroAssemblerX86Common::branchSub32):
+ * assembler/X86Assembler.h:
+ (JSC::X86Assembler::):
+ (JSC::X86Assembler::addl_rm):
+ (JSC::X86Assembler::andl_mr):
+ (JSC::X86Assembler::andl_rm):
+ (JSC::X86Assembler::andl_im):
+ (JSC::X86Assembler::negl_r):
+ (JSC::X86Assembler::notl_r):
+ (JSC::X86Assembler::orl_rm):
+ (JSC::X86Assembler::orl_im):
+ (JSC::X86Assembler::subl_rm):
+ (JSC::X86Assembler::xorl_mr):
+ (JSC::X86Assembler::xorl_rm):
+ (JSC::X86Assembler::xorl_im):
+ (JSC::X86Assembler::imull_mr):
+
+2009-05-11 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Cameron Zwarich.
+
+ Remove the NumberHeap.
+
+ * JavaScriptCore.exp:
+ * runtime/Collector.cpp:
+ (JSC::Heap::Heap):
+ (JSC::Heap::destroy):
+ (JSC::Heap::recordExtraCost):
+ (JSC::Heap::heapAllocate):
+ (JSC::Heap::markConservatively):
+ (JSC::Heap::sweep):
+ (JSC::Heap::collect):
+ (JSC::Heap::objectCount):
+ (JSC::Heap::statistics):
+ (JSC::typeName):
+ (JSC::Heap::isBusy):
+ * runtime/Collector.h:
+ (JSC::Heap::globalData):
+ * runtime/JSCell.h:
+
+2009-05-11 Geoffrey Garen <ggaren@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Land initial commit of new number representation for 32 bit platforms,
+ with JIT disabled.
+
+ * API/APICast.h:
+ (toJS):
+ (toRef):
+ * API/JSCallbackObjectFunctions.h:
+ (JSC::::hasInstance):
+ (JSC::::toNumber):
+ (JSC::::toString):
+ * API/tests/testapi.c:
+ (EvilExceptionObject_convertToType):
+ * AllInOneFile.cpp:
+ * JavaScriptCore.exp:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * bytecode/CodeBlock.cpp:
+ (JSC::valueToSourceString):
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::emitLoad):
+ (JSC::BytecodeGenerator::emitUnexpectedLoad):
+ (JSC::keyForImmediateSwitch):
+ * bytecompiler/BytecodeGenerator.h:
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::dumpRegisters):
+ (JSC::Interpreter::privateExecute):
+ * parser/Nodes.cpp:
+ (JSC::ArrayNode::emitBytecode):
+ (JSC::processClauseList):
+ * runtime/ArgList.h:
+ * runtime/Collector.h:
+ (JSC::sizeof):
+ * runtime/DateMath.cpp:
+ * runtime/ExceptionHelpers.h:
+ * runtime/InitializeThreading.cpp:
+ * runtime/JSArray.cpp:
+ (JSC::JSArray::JSArray):
+ * runtime/JSCell.cpp:
+ * runtime/JSCell.h:
+ (JSC::JSCell::isAPIValueWrapper):
+ (JSC::JSValue::isString):
+ (JSC::JSValue::isGetterSetter):
+ (JSC::JSValue::isObject):
+ (JSC::JSValue::getString):
+ (JSC::JSValue::getObject):
+ (JSC::JSValue::getCallData):
+ (JSC::JSValue::getConstructData):
+ (JSC::JSValue::getUInt32):
+ (JSC::JSValue::marked):
+ (JSC::JSValue::toPrimitive):
+ (JSC::JSValue::getPrimitiveNumber):
+ (JSC::JSValue::toBoolean):
+ (JSC::JSValue::toNumber):
+ (JSC::JSValue::toString):
+ (JSC::JSValue::needsThisConversion):
+ (JSC::JSValue::toThisString):
+ (JSC::JSValue::getJSNumber):
+ (JSC::JSValue::toObject):
+ (JSC::JSValue::toThisObject):
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData):
+ * runtime/JSGlobalData.h:
+ * runtime/JSGlobalObject.h:
+ (JSC::Structure::prototypeForLookup):
+ * runtime/JSGlobalObjectFunctions.cpp:
+ (JSC::globalFuncParseInt):
+ * runtime/JSImmediate.h:
+ * runtime/JSNumberCell.cpp: Removed.
+ * runtime/JSNumberCell.h: Removed.
+ * runtime/JSObject.h:
+ (JSC::JSValue::get):
+ (JSC::JSValue::put):
+ * runtime/JSString.h:
+ (JSC::JSValue::toThisJSString):
+ * runtime/JSValue.cpp:
+ (JSC::JSValue::toInteger):
+ (JSC::JSValue::toIntegerPreserveNaN):
+ (JSC::JSValue::toObjectSlowCase):
+ (JSC::JSValue::toThisObjectSlowCase):
+ (JSC::JSValue::synthesizeObject):
+ (JSC::JSValue::synthesizePrototype):
+ (JSC::JSValue::description):
+ (JSC::nonInlineNaN):
+ * runtime/JSValue.h:
+ (JSC::JSValue::):
+ (JSC::EncodedJSValueHashTraits::emptyValue):
+ (JSC::jsNaN):
+ (JSC::operator==):
+ (JSC::operator!=):
+ (JSC::toInt32):
+ (JSC::toUInt32):
+ (JSC::JSValue::encode):
+ (JSC::JSValue::decode):
+ (JSC::JSValue::JSValue):
+ (JSC::JSValue::operator bool):
+ (JSC::JSValue::operator==):
+ (JSC::JSValue::operator!=):
+ (JSC::JSValue::isUndefined):
+ (JSC::JSValue::isNull):
+ (JSC::JSValue::isUndefinedOrNull):
+ (JSC::JSValue::isCell):
+ (JSC::JSValue::isInt32):
+ (JSC::JSValue::isUInt32):
+ (JSC::JSValue::isDouble):
+ (JSC::JSValue::isTrue):
+ (JSC::JSValue::isFalse):
+ (JSC::JSValue::tag):
+ (JSC::JSValue::asInt32):
+ (JSC::JSValue::asUInt32):
+ (JSC::JSValue::asDouble):
+ (JSC::JSValue::asCell):
+ (JSC::JSValue::isNumber):
+ (JSC::JSValue::isBoolean):
+ (JSC::JSValue::getBoolean):
+ (JSC::JSValue::uncheckedGetNumber):
+ (JSC::JSValue::toJSNumber):
+ (JSC::JSValue::getNumber):
+ (JSC::JSValue::toInt32):
+ (JSC::JSValue::toUInt32):
+ * runtime/Operations.h:
+ (JSC::JSValue::equal):
+ (JSC::JSValue::equalSlowCaseInline):
+ (JSC::JSValue::strictEqual):
+ (JSC::JSValue::strictEqualSlowCaseInline):
+ (JSC::jsLess):
+ (JSC::jsLessEq):
+ (JSC::jsAdd):
+ * runtime/PropertySlot.h:
+ * runtime/StringPrototype.cpp:
+ (JSC::stringProtoFuncCharAt):
+ (JSC::stringProtoFuncCharCodeAt):
+ (JSC::stringProtoFuncIndexOf):
+ * wtf/Platform.h:
+
+=== Start merge of nitro-extreme branch 2009-07-30 ===
+
+2009-07-29 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by George Staikos.
+
+ Resolve class/struct mixup in forward declarations
+ https://bugs.webkit.org/show_bug.cgi?id=27708
+
+ * API/JSClassRef.h:
+ * bytecode/SamplingTool.h:
+ * interpreter/Interpreter.h:
+ * jit/JIT.h:
+ * profiler/ProfileGenerator.h:
+ * profiler/Profiler.h:
+ * runtime/ClassInfo.h:
+ * runtime/ExceptionHelpers.h:
+ * runtime/JSByteArray.h:
+ * runtime/JSCell.h:
+ * runtime/JSFunction.h:
+ * runtime/JSGlobalData.h:
+ * runtime/JSObject.h:
+ * runtime/JSString.h:
+
+2009-07-28 Ada Chan <adachan@apple.com>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=27236
+ - Implement TCMalloc_SystemRelease and TCMalloc_SystemCommit for Windows.
+ - Use a background thread to periodically scavenge memory to release back to the system.
+
+ * wtf/FastMalloc.cpp:
+ (WTF::TCMalloc_PageHeap::init):
+ (WTF::TCMalloc_PageHeap::runScavengerThread):
+ (WTF::TCMalloc_PageHeap::scavenge):
+ (WTF::TCMalloc_PageHeap::shouldContinueScavenging):
+ (WTF::TCMalloc_PageHeap::New):
+ (WTF::TCMalloc_PageHeap::AllocLarge):
+ (WTF::TCMalloc_PageHeap::Delete):
+ (WTF::TCMalloc_PageHeap::GrowHeap):
+ (WTF::sleep):
+ (WTF::TCMalloc_PageHeap::scavengerThread):
+ * wtf/TCSystemAlloc.cpp:
+ (TCMalloc_SystemRelease):
+ (TCMalloc_SystemCommit):
+ * wtf/TCSystemAlloc.h:
+
+2009-07-28 Xan Lopez <xlopez@igalia.com>
+
+ Add new files, fixes distcheck.
+
+ * GNUmakefile.am:
+
+2009-07-28 Csaba Osztrogonac <oszi@inf.u-szeged.hu>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Determining whether to use JIT or interpreter
+ moved from JavaScriptCore.pri to Platform.h
+
+ * JavaScriptCore.pri:
+ * wtf/Platform.h:
+
+2009-07-27 Brian Weinstein <bweinstein@apple.com>
+
+ Fix of misuse of sort command.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+
+2009-07-27 Brian Weinstein <bweinstein@apple.com>
+
+ Build fix for Windows.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+
+2009-07-27 Gavin Barraclough <barraclough@apple.com>
+
+ Rubber stamped by Oliver Hunt.
+
+ Fix tyop in JIT, renamed preverveReturnAddressAfterCall -> preserveReturnAddressAfterCall.
+
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompile):
+ (JSC::JIT::privateCompileCTIMachineTrampolines):
+ * jit/JIT.h:
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::preserveReturnAddressAfterCall):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::privateCompilePutByIdTransition):
+
+2009-07-27 Alexey Proskuryakov <ap@webkit.org>
+
+ Gtk build fix.
+
+ * runtime/JSLock.cpp: (JSC::JSLock::JSLock): Fix "no threading" case.
+
+2009-07-27 Alexey Proskuryakov <ap@webkit.org>
+
+ Release build fix.
+
+ * runtime/JSLock.h: (JSC::JSLock::~JSLock):
+
+2009-07-27 Alexey Proskuryakov <ap@webkit.org>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=27735
+ Give a helpful name to JSLock constructor argument
+
+ * API/JSBase.cpp:
+ (JSGarbageCollect):
+ * API/JSContextRef.cpp:
+ * API/JSObjectRef.cpp:
+ (JSPropertyNameArrayRelease):
+ (JSPropertyNameAccumulatorAddName):
+ * JavaScriptCore.exp:
+ * jsc.cpp:
+ (functionGC):
+ (cleanupGlobalData):
+ (jscmain):
+ * runtime/Collector.cpp:
+ (JSC::Heap::destroy):
+ * runtime/JSLock.cpp:
+ (JSC::JSLock::JSLock):
+ (JSC::JSLock::lock):
+ (JSC::JSLock::unlock):
+ (JSC::JSLock::DropAllLocks::DropAllLocks):
+ (JSC::JSLock::DropAllLocks::~DropAllLocks):
+ * runtime/JSLock.h:
+ (JSC::):
+ (JSC::JSLock::JSLock):
+ (JSC::JSLock::~JSLock):
+
+2009-07-25 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
+
+ Reviewed by Eric Seidel.
+
+ Allow custom memory allocation control for OpaqueJSPropertyNameArray struct
+ https://bugs.webkit.org/show_bug.cgi?id=27342
+
+ Inherits OpaqueJSPropertyNameArray struct from FastAllocBase because it has been
+ instantiated by 'new' JavaScriptCore/API/JSObjectRef.cpp:473.
+
+ * API/JSObjectRef.cpp:
+
+2009-07-24 Ada Chan <adachan@apple.com>
+
+ In preparation for https://bugs.webkit.org/show_bug.cgi?id=27236:
+ Remove TCMALLOC_TRACK_DECOMMITED_SPANS. We'll always track decommitted spans.
+ We have tested this and show it has little impact on performance.
+
+ Reviewed by Mark Rowe.
+
+ * wtf/FastMalloc.cpp:
+ (WTF::TCMalloc_PageHeap::New):
+ (WTF::TCMalloc_PageHeap::AllocLarge):
+ (WTF::propagateDecommittedState):
+ (WTF::mergeDecommittedStates):
+ (WTF::TCMalloc_PageHeap::Delete):
+ (WTF::TCMalloc_PageHeap::IncrementalScavenge):
+
+2009-07-24 Csaba Osztrogonac <oszi@inf.u-szeged.hu>
+
+ Reviewed by Darin Adler and Adam Barth.
+
+ Build fix for x86 platforms.
+ https://bugs.webkit.org/show_bug.cgi?id=27602
+
+ * jit/JIT.cpp:
+
+2009-07-23 Kevin Ollivier <kevino@theolliviers.com>
+
+ wx build fix, adding missing header.
+
+ * jit/JIT.cpp:
+
+2009-07-22 Yong Li <yong.li@torchmobile.com>
+
+ Reviewed by George Staikos.
+
+ Add wince specific memory files into wtf/wince
+ https://bugs.webkit.org/show_bug.cgi?id=27550
+
+ * wtf/wince/FastMallocWince.h: Added.
+ * wtf/wince/MemoryManager.cpp: Added.
+ * wtf/wince/MemoryManager.h: Added.
+
+2009-07-23 Norbert Leser <norbert.leser@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Fix for missing mmap features in Symbian
+ https://bugs.webkit.org/show_bug.cgi?id=24540
+
+ Fix, conditionally for PLATFORM(SYMBIAN), as an alternative
+ to missing support for the MAP_ANON property flag in mmap.
+ It utilizes Symbian specific memory allocation features.
+
+ * runtime/Collector.cpp
+
+2009-07-22 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ With ENABLE(ASSEMBLER_WX_EXCLUSIVE), only change permissions once per repatch event.
+ ( https://bugs.webkit.org/show_bug.cgi?id=27564 )
+
+ Currently we change permissions forwards and backwards for each instruction modified,
+ instead we should only change permissions once per complete repatching event.
+
+ 2.5% progression running with ENABLE(ASSEMBLER_WX_EXCLUSIVE) enabled,
+ which recoups 1/3 of the penalty of running with this mode enabled.
+
+ * assembler/ARMAssembler.cpp:
+ (JSC::ARMAssembler::linkBranch):
+ - Replace usage of MakeWritable with cacheFlush.
+
+ * assembler/ARMAssembler.h:
+ (JSC::ARMAssembler::patchPointerInternal):
+ (JSC::ARMAssembler::repatchLoadPtrToLEA):
+ - Replace usage of MakeWritable with cacheFlush.
+
+ * assembler/ARMv7Assembler.h:
+ (JSC::ARMv7Assembler::relinkJump):
+ (JSC::ARMv7Assembler::relinkCall):
+ (JSC::ARMv7Assembler::repatchInt32):
+ (JSC::ARMv7Assembler::repatchPointer):
+ (JSC::ARMv7Assembler::repatchLoadPtrToLEA):
+ (JSC::ARMv7Assembler::setInt32):
+ - Replace usage of MakeWritable with cacheFlush.
+
+ * assembler/LinkBuffer.h:
+ (JSC::LinkBuffer::performFinalization):
+ - Make explicit call to cacheFlush.
+
+ * assembler/MacroAssemblerCodeRef.h:
+ (JSC::MacroAssemblerCodeRef::MacroAssemblerCodeRef):
+ - Make size always available.
+
+ * assembler/RepatchBuffer.h:
+ (JSC::RepatchBuffer::RepatchBuffer):
+ (JSC::RepatchBuffer::~RepatchBuffer):
+ - Add calls to MakeWritable & makeExecutable.
+
+ * assembler/X86Assembler.h:
+ (JSC::X86Assembler::relinkJump):
+ (JSC::X86Assembler::relinkCall):
+ (JSC::X86Assembler::repatchInt32):
+ (JSC::X86Assembler::repatchPointer):
+ (JSC::X86Assembler::repatchLoadPtrToLEA):
+ - Remove usage of MakeWritable.
+
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::getJITCode):
+ - Provide access to CodeBlock's JITCode.
+
+ * jit/ExecutableAllocator.h:
+ (JSC::ExecutableAllocator::makeExecutable):
+ (JSC::ExecutableAllocator::cacheFlush):
+ - Remove MakeWritable, make cacheFlush public.
+
+ * jit/JIT.cpp:
+ (JSC::ctiPatchNearCallByReturnAddress):
+ (JSC::ctiPatchCallByReturnAddress):
+ (JSC::JIT::privateCompile):
+ (JSC::JIT::unlinkCall):
+ (JSC::JIT::linkCall):
+ - Add CodeBlock argument to RepatchBuffer.
+
+ * jit/JIT.h:
+ - Pass CodeBlock argument for use by RepatchBuffer.
+
+ * jit/JITCode.h:
+ (JSC::JITCode::start):
+ (JSC::JITCode::size):
+ - Provide access to code start & size.
+
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::privateCompilePutByIdTransition):
+ (JSC::JIT::patchGetByIdSelf):
+ (JSC::JIT::patchMethodCallProto):
+ (JSC::JIT::patchPutByIdReplace):
+ (JSC::JIT::privateCompilePatchGetArrayLength):
+ (JSC::JIT::privateCompileGetByIdProto):
+ (JSC::JIT::privateCompileGetByIdSelfList):
+ (JSC::JIT::privateCompileGetByIdProtoList):
+ (JSC::JIT::privateCompileGetByIdChainList):
+ (JSC::JIT::privateCompileGetByIdChain):
+ - Add CodeBlock argument to RepatchBuffer.
+
+ * jit/JITStubs.cpp:
+ (JSC::JITThunks::tryCachePutByID):
+ (JSC::JITThunks::tryCacheGetByID):
+ (JSC::JITStubs::DEFINE_STUB_FUNCTION):
+ - Pass CodeBlock argument for use by RepatchBuffer.
+
+2009-07-21 Zoltan Herczeg <zherczeg@inf.u-szeged.hu>
+
+ Reviewed by Gavin Barraclough.
+
+ Cache not only the structure of the method, but the
+ structure of its prototype as well.
+ https://bugs.webkit.org/show_bug.cgi?id=27077
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::~CodeBlock):
+ * bytecode/CodeBlock.h:
+ (JSC::MethodCallLinkInfo::MethodCallLinkInfo):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::patchMethodCallProto):
+
+2009-07-21 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Move call linking / repatching down from AbstractMacroAssembler into MacroAssemblerARCH classes.
+ ( https://bugs.webkit.org/show_bug.cgi?id=27527 )
+
+ This allows the implementation to be defined per architecture. Specifically this addresses the
+ fact that x86-64 MacroAssembler implements far calls as a load to register, followed by a call
+ to register. Patching the call actually requires the pointer load to be patched, rather than
+ the call to be patched. This is implementation detail specific to MacroAssemblerX86_64, and as
+ such is best handled there.
+
+ * assembler/AbstractMacroAssembler.h:
+ * assembler/MacroAssemblerARM.h:
+ (JSC::MacroAssemblerARM::linkCall):
+ (JSC::MacroAssemblerARM::repatchCall):
+ * assembler/MacroAssemblerARMv7.h:
+ (JSC::MacroAssemblerARMv7::linkCall):
+ (JSC::MacroAssemblerARMv7::repatchCall):
+ * assembler/MacroAssemblerX86.h:
+ (JSC::MacroAssemblerX86::linkCall):
+ (JSC::MacroAssemblerX86::repatchCall):
+ * assembler/MacroAssemblerX86_64.h:
+ (JSC::MacroAssemblerX86_64::linkCall):
+ (JSC::MacroAssemblerX86_64::repatchCall):
+
+2009-07-21 Adam Treat <adam.treat@torchmobile.com>
+
+ Reviewed by George Staikos.
+
+ Every wtf file includes other wtf files with <> style includes
+ except this one. Fix the exception.
+
+ * wtf/ByteArray.h:
+
+2009-07-21 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Move LinkBuffer/RepatchBuffer out of AbstractMacroAssembler.
+ ( https://bugs.webkit.org/show_bug.cgi?id=27485 )
+
+ This change is the first step in a process to move code that should be in
+ the architecture-specific MacroAssembler classes up out of Assmbler and
+ AbstractMacroAssembler.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ - added new files
+
+ * assembler/ARMAssembler.h:
+ (JSC::ARMAssembler::linkPointer):
+ - rename patchPointer to bring it in line with the current link/repatch naming scheme
+
+ * assembler/ARMv7Assembler.h:
+ (JSC::ARMv7Assembler::linkCall):
+ (JSC::ARMv7Assembler::linkPointer):
+ (JSC::ARMv7Assembler::relinkCall):
+ (JSC::ARMv7Assembler::repatchInt32):
+ (JSC::ARMv7Assembler::repatchPointer):
+ (JSC::ARMv7Assembler::setInt32):
+ (JSC::ARMv7Assembler::setPointer):
+ - rename patchPointer to bring it in line with the current link/repatch naming scheme
+
+ * assembler/AbstractMacroAssembler.h:
+ (JSC::AbstractMacroAssembler::linkJump):
+ (JSC::AbstractMacroAssembler::linkCall):
+ (JSC::AbstractMacroAssembler::linkPointer):
+ (JSC::AbstractMacroAssembler::getLinkerAddress):
+ (JSC::AbstractMacroAssembler::getLinkerCallReturnOffset):
+ (JSC::AbstractMacroAssembler::repatchJump):
+ (JSC::AbstractMacroAssembler::repatchCall):
+ (JSC::AbstractMacroAssembler::repatchNearCall):
+ (JSC::AbstractMacroAssembler::repatchInt32):
+ (JSC::AbstractMacroAssembler::repatchPointer):
+ (JSC::AbstractMacroAssembler::repatchLoadPtrToLEA):
+ - remove the LinkBuffer/RepatchBuffer classes, but leave a set of (private, friended) methods to interface to the Assembler
+
+ * assembler/LinkBuffer.h: Added.
+ (JSC::LinkBuffer::LinkBuffer):
+ (JSC::LinkBuffer::~LinkBuffer):
+ (JSC::LinkBuffer::link):
+ (JSC::LinkBuffer::patch):
+ (JSC::LinkBuffer::locationOf):
+ (JSC::LinkBuffer::locationOfNearCall):
+ (JSC::LinkBuffer::returnAddressOffset):
+ (JSC::LinkBuffer::finalizeCode):
+ (JSC::LinkBuffer::finalizeCodeAddendum):
+ (JSC::LinkBuffer::code):
+ (JSC::LinkBuffer::performFinalization):
+ - new file containing the LinkBuffer class, previously a member of AbstractMacroAssembler
+
+ * assembler/RepatchBuffer.h: Added.
+ (JSC::RepatchBuffer::RepatchBuffer):
+ (JSC::RepatchBuffer::relink):
+ (JSC::RepatchBuffer::repatch):
+ (JSC::RepatchBuffer::repatchLoadPtrToLEA):
+ (JSC::RepatchBuffer::relinkCallerToTrampoline):
+ (JSC::RepatchBuffer::relinkCallerToFunction):
+ (JSC::RepatchBuffer::relinkNearCallerToTrampoline):
+ - new file containing the RepatchBuffer class, previously a member of AbstractMacroAssembler
+
+ * assembler/X86Assembler.h:
+ (JSC::X86Assembler::linkJump):
+ (JSC::X86Assembler::linkCall):
+ (JSC::X86Assembler::linkPointerForCall):
+ (JSC::X86Assembler::linkPointer):
+ (JSC::X86Assembler::relinkJump):
+ (JSC::X86Assembler::relinkCall):
+ (JSC::X86Assembler::repatchInt32):
+ (JSC::X86Assembler::repatchPointer):
+ (JSC::X86Assembler::setPointer):
+ (JSC::X86Assembler::setInt32):
+ (JSC::X86Assembler::setRel32):
+ - rename patchPointer to bring it in line with the current link/repatch naming scheme
+
+ * jit/JIT.cpp:
+ (JSC::ctiPatchNearCallByReturnAddress):
+ (JSC::ctiPatchCallByReturnAddress):
+ - include new headers
+ - remove MacroAssembler:: specification from RepatchBuffer usage
+
+ * jit/JITPropertyAccess.cpp:
+ * yarr/RegexJIT.cpp:
+ - include new headers
+
+2009-07-21 Robert Agoston <Agoston.Robert@stud.u-szeged.hu>
+
+ Reviewed by David Levin.
+
+ Fixed #undef typo.
+ https://bugs.webkit.org/show_bug.cgi?id=27506
+
+ * bytecode/Opcode.h:
+
+2009-07-21 Adam Roben <aroben@apple.com>
+
+ Roll out r46153, r46154, and r46155
+
+ These changes were causing build failures and assertion failures on
+ Windows.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * runtime/JSArray.cpp:
+ * runtime/StringPrototype.cpp:
+ * runtime/UString.cpp:
+ * runtime/UString.h:
+ * wtf/FastMalloc.cpp:
+ * wtf/FastMalloc.h:
+ * wtf/Platform.h:
+ * wtf/PossiblyNull.h: Removed.
+
+2009-07-21 Roland Steiner <rolandsteiner@google.com>
+
+ Reviewed by David Levin.
+
+ Add ENABLE_RUBY to list of build options
+ https://bugs.webkit.org/show_bug.cgi?id=27324
+
+ * Configurations/FeatureDefines.xcconfig: Added flag ENABLE_RUBY.
+
+2009-07-20 Oliver Hunt <oliver@apple.com>
+
+ Build fix attempt #2
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+
+2009-07-20 Oliver Hunt <oliver@apple.com>
+
+ Build fix attempt #1
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+
+2009-07-20 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ Make it harder to misuse try* allocation routines
+ https://bugs.webkit.org/show_bug.cgi?id=27469
+
+ Jump through a few hoops to make it much harder to accidentally
+ miss null-checking of values returned by the try-* allocation
+ routines.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * runtime/JSArray.cpp:
+ (JSC::JSArray::putSlowCase):
+ (JSC::JSArray::increaseVectorLength):
+ * runtime/StringPrototype.cpp:
+ (JSC::stringProtoFuncFontsize):
+ (JSC::stringProtoFuncLink):
+ * runtime/UString.cpp:
+ (JSC::allocChars):
+ (JSC::reallocChars):
+ (JSC::expandCapacity):
+ (JSC::UString::Rep::reserveCapacity):
+ (JSC::UString::expandPreCapacity):
+ (JSC::createRep):
+ (JSC::concatenate):
+ (JSC::UString::spliceSubstringsWithSeparators):
+ (JSC::UString::replaceRange):
+ (JSC::UString::append):
+ (JSC::UString::operator=):
+ * runtime/UString.h:
+ (JSC::UString::Rep::createEmptyBuffer):
+ * wtf/FastMalloc.cpp:
+ (WTF::tryFastZeroedMalloc):
+ (WTF::tryFastMalloc):
+ (WTF::tryFastCalloc):
+ (WTF::tryFastRealloc):
+ (WTF::TCMallocStats::tryFastMalloc):
+ (WTF::TCMallocStats::tryFastCalloc):
+ (WTF::TCMallocStats::tryFastRealloc):
+ * wtf/FastMalloc.h:
+ (WTF::TryMallocReturnValue::TryMallocReturnValue):
+ (WTF::TryMallocReturnValue::~TryMallocReturnValue):
+ (WTF::TryMallocReturnValue::operator Maybe<T>):
+ (WTF::TryMallocReturnValue::getValue):
+ * wtf/PossiblyNull.h:
+ (WTF::PossiblyNull::PossiblyNull):
+ (WTF::PossiblyNull::~PossiblyNull):
+ (WTF::PossiblyNull::getValue):
+ * wtf/Platform.h:
+
+2009-07-20 Gavin Barraclough <barraclough@apple.com>
+
+ RS Oliver Hunt.
+
+ Add ARM assembler files to xcodeproj, for convenience editing.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2009-07-20 Jessie Berlin <jberlin@apple.com>
+
+ Reviewed by David Levin.
+
+ Fix an incorrect assertion in Vector::remove.
+
+ https://bugs.webkit.org/show_bug.cgi?id=27477
+
+ * wtf/Vector.h:
+ (WTF::::remove):
+ Assert that the position at which to start removing elements + the
+ length (the number of elements to remove) is less than or equal to the
+ size of the entire Vector.
+
+2009-07-20 Peter Kasting <pkasting@google.com>
+
+ Reviewed by Mark Rowe.
+
+ https://bugs.webkit.org/show_bug.cgi?id=27468
+ Back out r46060, which caused problems for some Apple developers.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj:
+ * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops:
+ * JavaScriptCore.vcproj/jsc/jscCommon.vsprops:
+ * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops:
+
+2009-07-20 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
+
+ Reviewed by Oliver Hunt.
+
+ Allow custom memory allocation control in NewThreadContext
+ https://bugs.webkit.org/show_bug.cgi?id=27338
+
+ Inherits NewThreadContext struct from FastAllocBase because it
+ has been instantiated by 'new' JavaScriptCore/wtf/Threading.cpp:76.
+
+ * wtf/Threading.cpp:
+
+2009-07-20 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
+
+ Reviewed by Oliver Hunt.
+
+ Allow custom memory allocation control in JavaScriptCore's JSClassRef.h
+ https://bugs.webkit.org/show_bug.cgi?id=27340
+
+ Inherit StaticValueEntry and StaticFunctionEntry struct from FastAllocBase because these
+ have been instantiated by 'new' in JavaScriptCore/API/JSClassRef.cpp:153
+ and in JavaScriptCore/API/JSClassRef.cpp:166.
+
+ * API/JSClassRef.h:
+
+2009-07-20 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
+
+ Reviewed by Darin Adler.
+
+ Allow custom memory allocation control in JavaScriptCore's RegexPattern.h
+ https://bugs.webkit.org/show_bug.cgi?id=27343
+
+ Inherits RegexPattern.h's structs (which have been instantiated by operator new) from FastAllocBase:
+
+ CharacterClass (new call: JavaScriptCore/yarr/RegexCompiler.cpp:144)
+ PatternAlternative (new call: JavaScriptCore/yarr/RegexPattern.h:221)
+ PatternDisjunction (new call: JavaScriptCore/yarr/RegexCompiler.cpp:446)
+
+ * yarr/RegexPattern.h:
+
+2009-07-20 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
+
+ Reviewed by Darin Adler.
+
+ Allow custom memory allocation control for JavaScriptCore's MatchFrame struct
+ https://bugs.webkit.org/show_bug.cgi?id=27344
+
+ Inherits MatchFrame struct from FastAllocBase because it has
+ been instantiated by 'new' JavaScriptCore/pcre/pcre_exec.cpp:359.
+
+ * pcre/pcre_exec.cpp:
+
+2009-07-20 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Holger Freyther.
+
+ Remove some outdated S60 platform specific code
+ https://bugs.webkit.org/show_bug.cgi?id=27423
+
+ * wtf/Platform.h:
+
+2009-07-20 Csaba Osztrogonac <oszi@inf.u-szeged.hu>
+
+ Reviewed by Simon Hausmann.
+
+ Qt build fix with MSVC and MinGW.
+
+ * jsc.pro: Make sure jsc is a console application, and turn off
+ exceptions and stl support to fix the build.
+
+2009-07-20 Xan Lopez <xlopez@igalia.com>
+
+ Reviewed by Gustavo Noronha.
+
+ Do not use C++-style comments in preprocessor directives.
+
+ GCC does not like this in some configurations, using C-style
+ comments is safer.
+
+ * wtf/Platform.h:
+
+2009-07-17 Peter Kasting <pkasting@google.com>
+
+ Reviewed by Steve Falkenburg.
+
+ https://bugs.webkit.org/show_bug.cgi?id=27323
+ Only add Cygwin to the path when it isn't already there. This avoids
+ causing problems for people who purposefully have non-Cygwin versions of
+ executables like svn in front of the Cygwin ones in their paths.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj:
+ * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops:
+ * JavaScriptCore.vcproj/jsc/jscCommon.vsprops:
+ * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops:
+
+2009-07-17 Gabor Loki <loki@inf.u-szeged.hu>
+
+ Reviewed by Gavin Barraclough.
+
+ Add YARR support for generic ARM platforms (disabled by default).
+ https://bugs.webkit.org/show_bug.cgi?id=24986
+
+ Add generic ARM port for MacroAssembler. It supports the whole
+ MacroAssembler functionality except floating point.
+
+ The class JmpSrc is extended with a flag which enables to patch
+ the jump destination offset during execution. This feature is
+ required for generic ARM port.
+
+ Signed off by Zoltan Herczeg <zherczeg@inf.u-szeged.hu>
+ Signed off by Gabor Loki <loki@inf.u-szeged.hu>
+
+ * JavaScriptCore.pri:
+ * assembler/ARMAssembler.cpp: Added.
+ (JSC::ARMAssembler::getLdrImmAddress):
+ (JSC::ARMAssembler::linkBranch):
+ (JSC::ARMAssembler::patchConstantPoolLoad):
+ (JSC::ARMAssembler::getOp2):
+ (JSC::ARMAssembler::genInt):
+ (JSC::ARMAssembler::getImm):
+ (JSC::ARMAssembler::moveImm):
+ (JSC::ARMAssembler::dataTransfer32):
+ (JSC::ARMAssembler::baseIndexTransfer32):
+ (JSC::ARMAssembler::executableCopy):
+ * assembler/ARMAssembler.h: Added.
+ (JSC::ARM::):
+ (JSC::ARMAssembler::ARMAssembler):
+ (JSC::ARMAssembler::):
+ (JSC::ARMAssembler::JmpSrc::JmpSrc):
+ (JSC::ARMAssembler::JmpSrc::enableLatePatch):
+ (JSC::ARMAssembler::JmpDst::JmpDst):
+ (JSC::ARMAssembler::JmpDst::isUsed):
+ (JSC::ARMAssembler::JmpDst::used):
+ (JSC::ARMAssembler::emitInst):
+ (JSC::ARMAssembler::and_r):
+ (JSC::ARMAssembler::ands_r):
+ (JSC::ARMAssembler::eor_r):
+ (JSC::ARMAssembler::eors_r):
+ (JSC::ARMAssembler::sub_r):
+ (JSC::ARMAssembler::subs_r):
+ (JSC::ARMAssembler::rsb_r):
+ (JSC::ARMAssembler::rsbs_r):
+ (JSC::ARMAssembler::add_r):
+ (JSC::ARMAssembler::adds_r):
+ (JSC::ARMAssembler::adc_r):
+ (JSC::ARMAssembler::adcs_r):
+ (JSC::ARMAssembler::sbc_r):
+ (JSC::ARMAssembler::sbcs_r):
+ (JSC::ARMAssembler::rsc_r):
+ (JSC::ARMAssembler::rscs_r):
+ (JSC::ARMAssembler::tst_r):
+ (JSC::ARMAssembler::teq_r):
+ (JSC::ARMAssembler::cmp_r):
+ (JSC::ARMAssembler::orr_r):
+ (JSC::ARMAssembler::orrs_r):
+ (JSC::ARMAssembler::mov_r):
+ (JSC::ARMAssembler::movs_r):
+ (JSC::ARMAssembler::bic_r):
+ (JSC::ARMAssembler::bics_r):
+ (JSC::ARMAssembler::mvn_r):
+ (JSC::ARMAssembler::mvns_r):
+ (JSC::ARMAssembler::mul_r):
+ (JSC::ARMAssembler::muls_r):
+ (JSC::ARMAssembler::mull_r):
+ (JSC::ARMAssembler::ldr_imm):
+ (JSC::ARMAssembler::ldr_un_imm):
+ (JSC::ARMAssembler::dtr_u):
+ (JSC::ARMAssembler::dtr_ur):
+ (JSC::ARMAssembler::dtr_d):
+ (JSC::ARMAssembler::dtr_dr):
+ (JSC::ARMAssembler::ldrh_r):
+ (JSC::ARMAssembler::ldrh_d):
+ (JSC::ARMAssembler::ldrh_u):
+ (JSC::ARMAssembler::strh_r):
+ (JSC::ARMAssembler::push_r):
+ (JSC::ARMAssembler::pop_r):
+ (JSC::ARMAssembler::poke_r):
+ (JSC::ARMAssembler::peek_r):
+ (JSC::ARMAssembler::clz_r):
+ (JSC::ARMAssembler::bkpt):
+ (JSC::ARMAssembler::lsl):
+ (JSC::ARMAssembler::lsr):
+ (JSC::ARMAssembler::asr):
+ (JSC::ARMAssembler::lsl_r):
+ (JSC::ARMAssembler::lsr_r):
+ (JSC::ARMAssembler::asr_r):
+ (JSC::ARMAssembler::size):
+ (JSC::ARMAssembler::ensureSpace):
+ (JSC::ARMAssembler::label):
+ (JSC::ARMAssembler::align):
+ (JSC::ARMAssembler::jmp):
+ (JSC::ARMAssembler::patchPointerInternal):
+ (JSC::ARMAssembler::patchConstantPoolLoad):
+ (JSC::ARMAssembler::patchPointer):
+ (JSC::ARMAssembler::repatchInt32):
+ (JSC::ARMAssembler::repatchPointer):
+ (JSC::ARMAssembler::repatchLoadPtrToLEA):
+ (JSC::ARMAssembler::linkJump):
+ (JSC::ARMAssembler::relinkJump):
+ (JSC::ARMAssembler::linkCall):
+ (JSC::ARMAssembler::relinkCall):
+ (JSC::ARMAssembler::getRelocatedAddress):
+ (JSC::ARMAssembler::getDifferenceBetweenLabels):
+ (JSC::ARMAssembler::getCallReturnOffset):
+ (JSC::ARMAssembler::getOp2Byte):
+ (JSC::ARMAssembler::placeConstantPoolBarrier):
+ (JSC::ARMAssembler::RM):
+ (JSC::ARMAssembler::RS):
+ (JSC::ARMAssembler::RD):
+ (JSC::ARMAssembler::RN):
+ (JSC::ARMAssembler::getConditionalField):
+ * assembler/ARMv7Assembler.h:
+ (JSC::ARMv7Assembler::JmpSrc::enableLatePatch):
+ * assembler/AbstractMacroAssembler.h:
+ (JSC::AbstractMacroAssembler::Call::enableLatePatch):
+ (JSC::AbstractMacroAssembler::Jump::enableLatePatch):
+ * assembler/MacroAssembler.h:
+ * assembler/MacroAssemblerARM.h: Added.
+ (JSC::MacroAssemblerARM::):
+ (JSC::MacroAssemblerARM::add32):
+ (JSC::MacroAssemblerARM::and32):
+ (JSC::MacroAssemblerARM::lshift32):
+ (JSC::MacroAssemblerARM::mul32):
+ (JSC::MacroAssemblerARM::not32):
+ (JSC::MacroAssemblerARM::or32):
+ (JSC::MacroAssemblerARM::rshift32):
+ (JSC::MacroAssemblerARM::sub32):
+ (JSC::MacroAssemblerARM::xor32):
+ (JSC::MacroAssemblerARM::load32):
+ (JSC::MacroAssemblerARM::load32WithAddressOffsetPatch):
+ (JSC::MacroAssemblerARM::loadPtrWithPatchToLEA):
+ (JSC::MacroAssemblerARM::load16):
+ (JSC::MacroAssemblerARM::store32WithAddressOffsetPatch):
+ (JSC::MacroAssemblerARM::store32):
+ (JSC::MacroAssemblerARM::pop):
+ (JSC::MacroAssemblerARM::push):
+ (JSC::MacroAssemblerARM::move):
+ (JSC::MacroAssemblerARM::swap):
+ (JSC::MacroAssemblerARM::signExtend32ToPtr):
+ (JSC::MacroAssemblerARM::zeroExtend32ToPtr):
+ (JSC::MacroAssemblerARM::branch32):
+ (JSC::MacroAssemblerARM::branch16):
+ (JSC::MacroAssemblerARM::branchTest32):
+ (JSC::MacroAssemblerARM::jump):
+ (JSC::MacroAssemblerARM::branchAdd32):
+ (JSC::MacroAssemblerARM::mull32):
+ (JSC::MacroAssemblerARM::branchMul32):
+ (JSC::MacroAssemblerARM::branchSub32):
+ (JSC::MacroAssemblerARM::breakpoint):
+ (JSC::MacroAssemblerARM::nearCall):
+ (JSC::MacroAssemblerARM::call):
+ (JSC::MacroAssemblerARM::ret):
+ (JSC::MacroAssemblerARM::set32):
+ (JSC::MacroAssemblerARM::setTest32):
+ (JSC::MacroAssemblerARM::tailRecursiveCall):
+ (JSC::MacroAssemblerARM::makeTailRecursiveCall):
+ (JSC::MacroAssemblerARM::moveWithPatch):
+ (JSC::MacroAssemblerARM::branchPtrWithPatch):
+ (JSC::MacroAssemblerARM::storePtrWithPatch):
+ (JSC::MacroAssemblerARM::supportsFloatingPoint):
+ (JSC::MacroAssemblerARM::supportsFloatingPointTruncate):
+ (JSC::MacroAssemblerARM::loadDouble):
+ (JSC::MacroAssemblerARM::storeDouble):
+ (JSC::MacroAssemblerARM::addDouble):
+ (JSC::MacroAssemblerARM::subDouble):
+ (JSC::MacroAssemblerARM::mulDouble):
+ (JSC::MacroAssemblerARM::convertInt32ToDouble):
+ (JSC::MacroAssemblerARM::branchDouble):
+ (JSC::MacroAssemblerARM::branchTruncateDoubleToInt32):
+ (JSC::MacroAssemblerARM::ARMCondition):
+ (JSC::MacroAssemblerARM::prepareCall):
+ (JSC::MacroAssemblerARM::call32):
+ * assembler/X86Assembler.h:
+ (JSC::X86Assembler::JmpSrc::enableLatePatch):
+ * jit/ExecutableAllocator.h:
+ (JSC::ExecutableAllocator::cacheFlush):
+ * wtf/Platform.h:
+ * yarr/RegexJIT.cpp:
+ (JSC::Yarr::RegexGenerator::generateEnter):
+ (JSC::Yarr::RegexGenerator::generateReturn):
+
+2009-07-17 Gabor Loki <loki@inf.u-szeged.hu>
+
+ Reviewed by Gavin Barraclough.
+
+ Extend AssemblerBuffer with constant pool handling mechanism.
+ https://bugs.webkit.org/show_bug.cgi?id=24986
+
+ Add a platform independed constant pool framework.
+ This pool can store 32 or 64 bits values which is enough to hold
+ any integer, pointer or double constant.
+
+ * assembler/AssemblerBuffer.h:
+ (JSC::AssemblerBuffer::putIntUnchecked):
+ (JSC::AssemblerBuffer::putInt64Unchecked):
+ (JSC::AssemblerBuffer::append):
+ (JSC::AssemblerBuffer::grow):
+ * assembler/AssemblerBufferWithConstantPool.h: Added.
+ (JSC::):
+
+2009-07-17 Eric Roman <eroman@chromium.org>
+
+ Reviewed by Darin Adler.
+
+ Build fix for non-Darwin.
+ Add a guard for inclusion of RetainPtr.h which includes CoreFoundation.h
+
+ https://bugs.webkit.org/show_bug.cgi?id=27382
+
+ * wtf/unicode/icu/CollatorICU.cpp:
+
+2009-07-17 Alexey Proskuryakov <ap@webkit.org>
+
+ Reviewed by John Sullivan.
+
+ Get user default collation order via a CFLocale API when available.
+
+ * wtf/unicode/icu/CollatorICU.cpp: (WTF::Collator::userDefault):
+
+2009-07-17 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Fix the include path for the Symbian port
+ https://bugs.webkit.org/show_bug.cgi?id=27358
+
+ * JavaScriptCore.pri:
+
+2009-07-17 Csaba Osztrogonac <oszi@inf.u-szeged.hu>
+
+ Reviewed by David Levin.
+
+ Build fix on platforms don't have MMAP.
+ https://bugs.webkit.org/show_bug.cgi?id=27365
+
+ * interpreter/RegisterFile.h: Including stdio.h irrespectively of HAVE(MMAP)
+
+2009-07-16 Fumitoshi Ukai <ukai@chromium.org>
+
+ Reviewed by David Levin.
+
+ Add --web-sockets flag and ENABLE_WEB_SOCKETS define.
+ https://bugs.webkit.org/show_bug.cgi?id=27206
+
+ Add ENABLE_WEB_SOCKETS
+
+ * Configurations/FeatureDefines.xcconfig: add ENABLE_WEB_SOCKETS
+
+2009-07-16 Maxime Simon <simon.maxime@gmail.com>
+
+ Reviewed by Eric Seidel.
+
+ Added Haiku-specific files for JavaScriptCore.
+ https://bugs.webkit.org/show_bug.cgi?id=26620
+
+ * wtf/haiku/MainThreadHaiku.cpp: Added.
+ (WTF::initializeMainThreadPlatform):
+ (WTF::scheduleDispatchFunctionsOnMainThread):
+
+2009-07-16 Gavin Barraclough <barraclough@apple.com>
+
+ RS by Oliver Hunt.
+
+ Revert r45969, this fix does not appear to be valid.
+ https://bugs.webkit.org/show_bug.cgi?id=27077
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::~CodeBlock):
+ (JSC::CodeBlock::unlinkCallers):
+ * jit/JIT.cpp:
+ * jit/JIT.h:
+
+2009-07-16 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
+
+ Reviewed by Oliver Hunt.
+
+ Allow custom memory allocation control in ExceptionInfo and RareData struct
+ https://bugs.webkit.org/show_bug.cgi?id=27336
+
+ Inherits ExceptionInfo and RareData struct from FastAllocBase because these
+ have been instantiated by 'new' in JavaScriptCore/bytecode/CodeBlock.cpp:1289 and
+ in JavaScriptCore/bytecode/CodeBlock.h:453.
+
+ Remove unnecessary WTF:: namespace from CodeBlock inheritance.
+
+ * bytecode/CodeBlock.h:
+
+2009-07-16 Mark Rowe <mrowe@apple.com>
+
+ Rubber-stamped by Geoff Garen.
+
+ Fix FeatureDefines.xcconfig to not be out of sync with the rest of the world.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2009-07-16 Yong Li <yong.li@torchmobile.com>
+
+ Reviewed by George Staikos.
+
+ https://bugs.webkit.org/show_bug.cgi?id=27320
+ _countof is only included in CE6; for CE5 we need to define it ourself
+
+ * wtf/Platform.h:
+
+2009-07-16 Zoltan Herczeg <zherczeg@inf.u-szeged.hu>
+
+ Reviewed by Oliver Hunt.
+
+ Workers + garbage collector: weird crashes
+ https://bugs.webkit.org/show_bug.cgi?id=27077
+
+ We need to unlink cached method call sites when a function is destroyed.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::~CodeBlock):
+ (JSC::CodeBlock::unlinkCallers):
+ * jit/JIT.cpp:
+ (JSC::JIT::unlinkMethodCall):
+ * jit/JIT.h:
+
+2009-07-15 Steve Falkenburg <sfalken@apple.com>
+
+ Windows Build fix.
+
+ Visual Studio reset our intermediate directory on us.
+ This sets it back.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.vcproj/testapi/testapi.vcproj:
+
+2009-07-15 Kwang Yul Seo <skyul@company100.net>
+
+ Reviewed by Eric Seidel.
+
+ https://bugs.webkit.org/show_bug.cgi?id=26794
+ Make Yacc-generated parsers to use fastMalloc/fastFree.
+
+ Define YYMALLOC and YYFREE to fastMalloc and fastFree
+ respectively.
+
+ * parser/Grammar.y:
+
+2009-07-15 Darin Adler <darin@apple.com>
+
+ Fix a build for a particular Apple configuration.
+
+ * wtf/FastAllocBase.h: Change include to use "" style for
+ including another wtf header. This is the style we use for
+ including other public headers in the same directory.
+
+2009-07-15 George Staikos <george.staikos@torchmobile.com>
+
+ Reviewed by Adam Treat.
+
+ https://bugs.webkit.org/show_bug.cgi?id=27303
+ Implement createThreadInternal for WinCE.
+ Contains changes by George Staikos <george.staikos@torchmobile.com> and Joe Mason <joe.mason@torchmobile.com>
+
+ * wtf/ThreadingWin.cpp:
+ (WTF::createThreadInternal):
+
+2009-07-15 Joe Mason <joe.mason@torchmobile.com>
+
+ Reviewed by George Staikos.
+
+ https://bugs.webkit.org/show_bug.cgi?id=27298
+ Platform defines for WINCE.
+ Contains changes by Yong Li <yong.li@torchmobile.com>,
+ George Staikos <george.staikos@torchmobile.com> and Joe Mason <joe.mason@torchmobile.com>
+
+ * wtf/Platform.h:
+
+2009-07-15 Yong Li <yong.li@torchmobile.com>
+
+ Reviewed by Adam Treat.
+
+ https://bugs.webkit.org/show_bug.cgi?id=27306
+ Use RegisterClass instead of RegisterClassEx on WinCE.
+
+ * wtf/win/MainThreadWin.cpp:
+ (WTF::initializeMainThreadPlatform):
+
+2009-07-15 Yong Li <yong.li@torchmobile.com>
+
+ Reviewed by George Staikos.
+
+ https://bugs.webkit.org/show_bug.cgi?id=27301
+ Use OutputDebugStringW on WinCE since OutputDebugStringA is not supported
+ Originally written by Yong Li <yong.li@torchmobile.com> and refactored by
+ Joe Mason <joe.mason@torchmobile.com>
+
+ * wtf/Assertions.cpp: vprintf_stderr_common
+
+2009-07-15 Yong Li <yong.li@torchmobile.com>
+
+ Reviewed by George Staikos.
+
+ https://bugs.webkit.org/show_bug.cgi?id=27020
+ msToGregorianDateTime should set utcOffset to 0 when outputIsUTC is false
+
+ * wtf/DateMath.cpp:
+ (WTF::gregorianDateTimeToMS):
+
+2009-07-15 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Cleanup - Remove obsolete code from the make system
+ https://bugs.webkit.org/show_bug.cgi?id=27299
+
+ * JavaScriptCore.pro:
+ * jsc.pro:
+
+2009-07-07 Norbert Leser <norbert.leser@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ https://bugs.webkit.org/show_bug.cgi?id=27056
+
+ Alternate bool operator for codewarrior compiler (WINSCW).
+ Compiler (latest b482) reports error for UnspecifiedBoolType construct:
+ "illegal explicit conversion from 'WTF::OwnArrayPtr<JSC::Register>' to 'bool'"
+
+ Same fix as in r38391.
+
+ * JavaScriptCore/wtf/OwnArrayPtr.h:
+
+2009-07-15 Norbert Leser <norbert.leser@nokia.com>
+
+ Reviewed by Darin Adler.
+
+ Qualify include path with wtf to fix compilation
+ on Symbian.
+ https://bugs.webkit.org/show_bug.cgi?id=27055
+
+ * interpreter/Interpreter.h:
+
+2009-07-15 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Dave Kilzer.
+
+ Turn off non-portable date manipulations for SYMBIAN
+ https://bugs.webkit.org/show_bug.cgi?id=27064
+
+ Introduce HAVE(TM_GMTOFF), HAVE(TM_ZONE) and HAVE(TIMEGM) guards
+ and place the rules for controlling the guards in Platform.h.
+ Turn off these newly introduced guards for SYMBIAN.
+
+ * wtf/DateMath.cpp:
+ (WTF::calculateUTCOffset):
+ * wtf/DateMath.h:
+ (WTF::GregorianDateTime::GregorianDateTime):
+ (WTF::GregorianDateTime::operator tm):
+ * wtf/Platform.h:
+
+2009-07-15 Norbert Leser <norbert.leser@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Undef ASSERT on Symbian, to avoid excessive warnings
+ https://bugs.webkit.org/show_bug.cgi?id=27052
+
+ * wtf/Assertions.h:
+
+2009-07-15 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Simon Hausmann.
+
+ REGRESSION: fast/js/postfix-syntax.html fails with interpreter
+ https://bugs.webkit.org/show_bug.cgi?id=27294
+
+ When postfix operators operating on locals assign to the same local
+ the order of operations has to be to store the incremented value, then
+ store the unmodified number. Rather than implementing this subtle
+ semantic in the interpreter I've just made the logic explicit in the
+ bytecode generator, so x=x++ effectively becomes x=ToNumber(x) (for a
+ local var x).
+
+ * parser/Nodes.cpp:
+ (JSC::emitPostIncOrDec):
+
+2009-07-15 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Simon Hausmann.
+
+ REGRESSION(43559): fast/js/kde/arguments-scope.html fails with interpreter
+ https://bugs.webkit.org/show_bug.cgi?id=27259
+
+ The interpreter was incorrectly basing its need to create the arguments object
+ based on the presence of the callframe's argument reference rather than the local
+ arguments reference. Based on this it then overrode the local variable reference.
+
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::privateExecute):
+
+2009-07-14 Steve Falkenburg <sfalken@apple.com>
+
+ Reorganize JavaScriptCore headers into:
+ API: include/JavaScriptCore/
+ Private: include/private/JavaScriptCore/
+
+ Reviewed by Darin Adler.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
+ * JavaScriptCore.vcproj/testapi/testapi.vcproj:
+ * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops:
+
+2009-07-14 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
+
+ Reviewed by Darin Adler.
+
+ Change JSCell's superclass to NoncopyableCustomAllocated
+ https://bugs.webkit.org/show_bug.cgi?id=27248
+
+ JSCell class customizes operator new, since Noncopyable will be
+ inherited from FastAllocBase, NoncopyableCustomAllocated has
+ to be used.
+
+ * runtime/JSCell.h:
+
+2009-07-14 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
+
+ Reviewed by Darin Adler.
+
+ Change all Noncopyable inheriting visibility to public.
+ https://bugs.webkit.org/show_bug.cgi?id=27225
+
+ Change all Noncopyable inheriting visibility to public because
+ it is needed to the custom allocation framework (bug #20422).
+
+ * bytecode/SamplingTool.h:
+ * bytecompiler/RegisterID.h:
+ * interpreter/CachedCall.h:
+ * interpreter/RegisterFile.h:
+ * parser/Lexer.h:
+ * parser/Parser.h:
+ * runtime/ArgList.h:
+ * runtime/BatchedTransitionOptimizer.h:
+ * runtime/Collector.h:
+ * runtime/CommonIdentifiers.h:
+ * runtime/JSCell.h:
+ * runtime/JSGlobalObject.h:
+ * runtime/JSLock.h:
+ * runtime/JSONObject.cpp:
+ * runtime/SmallStrings.cpp:
+ * runtime/SmallStrings.h:
+ * wtf/CrossThreadRefCounted.h:
+ * wtf/GOwnPtr.h:
+ * wtf/Locker.h:
+ * wtf/MessageQueue.h:
+ * wtf/OwnArrayPtr.h:
+ * wtf/OwnFastMallocPtr.h:
+ * wtf/OwnPtr.h:
+ * wtf/RefCounted.h:
+ * wtf/ThreadSpecific.h:
+ * wtf/Threading.h:
+ * wtf/Vector.h:
+ * wtf/unicode/Collator.h:
+
+2009-07-14 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
+
+ Reviewed by Darin Adler.
+
+ Change ParserArenaRefCounted's superclass to RefCountedCustomAllocated
+ https://bugs.webkit.org/show_bug.cgi?id=27249
+
+ ParserArenaDeletable customizes operator new, to avoid double inheritance
+ ParserArenaDeletable's superclass has been changed to RefCountedCustomAllocated.
+
+ * parser/Nodes.h:
+
+2009-07-14 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
+
+ Reviewed by Darin Adler.
+
+ Add RefCountedCustomAllocated to RefCounted.h
+ https://bugs.webkit.org/show_bug.cgi?id=27232
+
+ Some class which are inherited from RefCounted customize
+ operator new, but RefCounted is inherited from Noncopyable
+ which will be inherited from FastAllocBase. To avoid
+ conflicts Noncopyable inheriting was moved down to RefCounted
+ and to avoid double inheritance this class has been added.
+
+ * wtf/RefCounted.h:
+ (WTF::RefCountedCustomAllocated::deref):
+ (WTF::RefCountedCustomAllocated::~RefCountedCustomAllocated):
+
+2009-07-14 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
+
+ Reviewed by Darin Adler.
+
+ Add NoncopyableCustomAllocated to Noncopyable.h.
+ https://bugs.webkit.org/show_bug.cgi?id=27228
+
+ Some classes which inherited from Noncopyable overrides operator new
+ since Noncopyable'll be inherited from FastAllocBase, Noncopyable.h
+ needs to be extended with this new class to support the overriding.
+
+ * wtf/Noncopyable.h:
+ (WTFNoncopyable::NoncopyableCustomAllocated::NoncopyableCustomAllocated):
+ (WTFNoncopyable::NoncopyableCustomAllocated::~NoncopyableCustomAllocated):
+
+2009-07-14 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
+
+ Reviewed by Darin Adler.
+
+ Allow custom memory allocation control for JavaScriptCore's IdentifierTable class
+ https://bugs.webkit.org/show_bug.cgi?id=27260
+
+ Inherits IdentifierTable class from FastAllocBase because it has been
+ instantiated by 'new' in JavaScriptCore/runtime/Identifier.cpp:70.
+
+ * runtime/Identifier.cpp:
+
+2009-07-14 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
+
+ Reviewed by Darin Adler.
+
+ Allow custom memory allocation control for JavaScriptCore's Profiler class
+ https://bugs.webkit.org/show_bug.cgi?id=27253
+
+ Inherits Profiler class from FastAllocBase because it has been instantiated by
+ 'new' in JavaScriptCore/profiler/Profiler.cpp:56.
+
+ * profiler/Profiler.h:
+
+2009-07-06 George Staikos <george.staikos@torchmobile.com>
+
+ Reviewed by Adam Treat.
+
+ Authors: George Staikos <george.staikos@torchmobile.com>, Joe Mason <joe.mason@torchmobile.com>, Makoto Matsumoto <matumoto@math.keio.ac.jp>, Takuji Nishimura
+
+ https://bugs.webkit.org/show_bug.cgi?id=27030
+ Implement custom RNG for WinCE using Mersenne Twister
+
+ * wtf/RandomNumber.cpp:
+ (WTF::randomNumber):
+ * wtf/RandomNumberSeed.h:
+ (WTF::initializeRandomNumberGenerator):
+ * wtf/wince/mt19937ar.c: Added.
+ (init_genrand):
+ (init_by_array):
+ (genrand_int32):
+ (genrand_int31):
+ (genrand_real1):
+ (genrand_real2):
+ (genrand_real3):
+ (genrand_res53):
+
+2009-07-13 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk>
+
+ Unreviewed make dist build fix.
+
+ * GNUmakefile.am:
+
+2009-07-13 Drew Wilson <atwilson@google.com>
+
+ Reviewed by David Levin.
+
+ Add ENABLE(SHARED_WORKERS) flag and define SharedWorker APIs
+ https://bugs.webkit.org/show_bug.cgi?id=26932
+
+ Added ENABLE(SHARED_WORKERS) flag (off by default).
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2009-07-07 Norbert Leser <norbert.leser@nokia.com>
+
+ Reviewed by Maciej Stachoviak.
+
+ https://bugs.webkit.org/show_bug.cgi?id=27058
+
+ Removed superfluous parenthesis around single expression.
+ Compilers on Symbian platform fail to properly parse and compile.
+
+ * JavaScriptCore/wtf/Platform.h:
+
+2009-07-13 Norbert Leser <norbert.leser@nokia.com>
+
+ Reviewed by Maciej Stachoviak.
+
+ https://bugs.webkit.org/show_bug.cgi?id=27054
+
+ Renamed Translator to HashTranslator
+
+ Codewarrior compiler (WINSCW) latest b482 cannot resolve typename
+ mismatch between template declaration and definition
+ (HashTranslator / Translator)
+
+ * wtf/HashSet.h:
+
+2009-07-13 Norbert Leser <norbert.leser@nokia.com>
+
+ Reviewed by Eric Seidel.
+
+ https://bugs.webkit.org/show_bug.cgi?id=27053
+
+ Ambiguity in LabelScope initialization
+
+ Codewarrior compiler (WINSCW) latest b482 on Symbian cannot resolve
+ type of "0" unambiguously. Set expression explicitly to
+ PassRefPtr<Label>::PassRefPtr()
+
+ * bytecompiler/BytecodeGenerator.cpp
+
+2009-07-11 Simon Fraser <simon.fraser@apple.com>
+
+ Enable support for accelerated compositing and 3d transforms on Leopard.
+ <https://bugs.webkit.org/show_bug.cgi?id=20166>
+ <rdar://problem/6120614>
+
+ Reviewed by Oliver Hunt.
+
+ * Configurations/FeatureDefines.xcconfig:
+ * wtf/Platform.h:
+
+2009-07-10 Mark Rowe <mrowe@apple.com>
+
+ Second part of the "make Windows happier" dance.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+
+2009-07-10 Mark Rowe <mrowe@apple.com>
+
+ Try and make the Windows build happy.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+
+2009-07-10 Kevin McCullough <kmccullough@apple.com>
+
+ Reviewed by Geoffrey Garen.
+
+ * debugger/Debugger.h: Made this function virtual for use in WebCore's
+ WebInspector.
+
+2009-07-10 Kwang Yul Seo <skyul@company100.net>
+
+ Reviewed by Darin Adler.
+
+ ParserArenaDeletable should override delete
+ https://bugs.webkit.org/show_bug.cgi?id=26790
+
+ ParserArenaDeletable overrides new, but it does not override delete.
+ ParserArenaDeletable must be freed by fastFree
+ because it is allocated by fastMalloc.
+
+ * parser/NodeConstructors.h:
+ (JSC::ParserArenaDeletable::operator delete):
+ * parser/Nodes.h:
+
+2009-07-10 Adam Roben <aroben@apple.com>
+
+ Sort all our Xcode projects
+
+ Accomplished using sort-Xcode-project-file.
+
+ Requested by Dave Kilzer.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2009-07-09 Maciej Stachowiak <mjs@apple.com>
+
+ Not reviewed, build fix.
+
+ Windows build fix for the last change.
+
+ * wtf/dtoa.cpp: Forgot to include Vector.h
+
+2009-07-09 Maciej Stachowiak <mjs@apple.com>
+
+ Reviewed by Darin Adler.
+
+ REGRESSION: crash in edge cases of floating point parsing.
+ https://bugs.webkit.org/show_bug.cgi?id=27110
+ <rdar://problem/7044458>
+
+ Tests: fast/css/number-parsing-crash.html
+ fast/css/number-parsing-crash.html
+ fast/js/number-parsing-crash.html
+
+ * wtf/dtoa.cpp:
+ (WTF::BigInt::BigInt): Converted this to more a proper class, using a Vector
+ with inline capacity
+
+ (WTF::lshift): Rearranged logic somewhat nontrivially to deal with the new way of sizing BigInts.
+ Added an assertion to verify that invariants are maintained.
+
+ All other functions are adapted fairly mechanically to the above changes.
+ (WTF::BigInt::clear):
+ (WTF::BigInt::size):
+ (WTF::BigInt::resize):
+ (WTF::BigInt::words):
+ (WTF::BigInt::append):
+ (WTF::multadd):
+ (WTF::s2b):
+ (WTF::i2b):
+ (WTF::mult):
+ (WTF::cmp):
+ (WTF::diff):
+ (WTF::b2d):
+ (WTF::d2b):
+ (WTF::ratio):
+ (WTF::strtod):
+ (WTF::quorem):
+ (WTF::dtoa):
+
+2009-07-09 Drew Wilson <atwilson@google.com>
+
+ Reviewed by Alexey Proskuryakov.
+
+ Turned on CHANNEL_MESSAGING by default because the MessageChannel API
+ can now be implemented for Web Workers and is reasonably stable.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2009-07-09 Oliver Hunt <oliver@apple.com>
+
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::privateExecute):
+
+2009-07-09 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Bug 27016 - Interpreter crashes due to invalid array indexes
+ <https://bugs.webkit.org/show_bug.cgi?id=27016>
+
+ Unsigned vs signed conversions results in incorrect behaviour in
+ 64bit interpreter builds.
+
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::privateExecute):
+
+2009-07-09 Dimitri Glazkov <dglazkov@chromium.org>
+
+ Reviewed by Darin Fisher.
+
+ [Chromium] Upstream JavaScriptCore.gypi, the project file for Chromium build.
+ https://bugs.webkit.org/show_bug.cgi?id=27135
+
+ * JavaScriptCore.gypi: Added.
+
+2009-07-09 Joe Mason <joe.mason@torchmobile.com>
+
+ Reviewed by George Staikos.
+
+ Authors: Yong Li <yong.li@torchmobile.com>, Joe Mason <joe.mason@torchmobile.com>
+
+ https://bugs.webkit.org/show_bug.cgi?id=27031
+ Add an override for deleteOwnedPtr(HDC) on Windows
+
+ * wtf/OwnPtrCommon.h:
+ * wtf/OwnPtrWin.cpp:
+ (WTF::deleteOwnedPtr):
+
+2009-07-09 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Darin Adler.
+
+ Guard singal.h dependency with HAVE(SIGNAL_H) to enable building jsc
+ on SYMBIAN.
+
+ https://bugs.webkit.org/show_bug.cgi?id=27026
+
+ Based on Norbert Leser's work.
+
+ * jsc.cpp:
+ (printUsageStatement):
+ (parseArguments):
+ * wtf/Platform.h:
+
+2009-07-07 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Stop loading constants into the register file.
+
+ Instead, use high register values (highest bit bar the sign bit set) to indicate
+ constants in the instruction stream, and when we encounter such a value load it
+ directly from the CodeBlock.
+
+ Since constants are no longer copied into the register file, this patch renders
+ the 'unexpected constant' mechanism redundant, and removes it.
+
+ 2% improvement, thanks to Sam Weinig.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dump):
+ (JSC::CodeBlock::CodeBlock):
+ (JSC::CodeBlock::mark):
+ (JSC::CodeBlock::shrinkToFit):
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::isTemporaryRegisterIndex):
+ (JSC::CodeBlock::constantRegister):
+ (JSC::CodeBlock::isConstantRegisterIndex):
+ (JSC::CodeBlock::getConstant):
+ (JSC::ExecState::r):
+ * bytecode/Opcode.h:
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::preserveLastVar):
+ (JSC::BytecodeGenerator::BytecodeGenerator):
+ (JSC::BytecodeGenerator::addConstantValue):
+ (JSC::BytecodeGenerator::emitEqualityOp):
+ (JSC::BytecodeGenerator::emitLoad):
+ (JSC::BytecodeGenerator::emitResolveBase):
+ (JSC::BytecodeGenerator::emitResolveWithBase):
+ (JSC::BytecodeGenerator::emitNewError):
+ * bytecompiler/BytecodeGenerator.h:
+ (JSC::BytecodeGenerator::emitNode):
+ * interpreter/CallFrame.h:
+ (JSC::ExecState::noCaller):
+ (JSC::ExecState::hasHostCallFrameFlag):
+ (JSC::ExecState::addHostCallFrameFlag):
+ (JSC::ExecState::removeHostCallFrameFlag):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::resolve):
+ (JSC::Interpreter::resolveSkip):
+ (JSC::Interpreter::resolveGlobal):
+ (JSC::Interpreter::resolveBase):
+ (JSC::Interpreter::resolveBaseAndProperty):
+ (JSC::Interpreter::resolveBaseAndFunc):
+ (JSC::Interpreter::dumpRegisters):
+ (JSC::Interpreter::throwException):
+ (JSC::Interpreter::createExceptionScope):
+ (JSC::Interpreter::privateExecute):
+ (JSC::Interpreter::retrieveArguments):
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileMainPass):
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::emitLoadDouble):
+ (JSC::JIT::emitLoadInt32ToDouble):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_new_error):
+ (JSC::JIT::emit_op_enter):
+ (JSC::JIT::emit_op_enter_with_activation):
+ * parser/Nodes.cpp:
+ (JSC::DeleteResolveNode::emitBytecode):
+ (JSC::DeleteValueNode::emitBytecode):
+ (JSC::PrefixResolveNode::emitBytecode):
+ * runtime/JSActivation.cpp:
+ (JSC::JSActivation::JSActivation):
+ * wtf/Platform.h:
+
+2009-07-07 Mark Rowe <mrowe@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Fix <https://bugs.webkit.org/show_bug.cgi?id=27025> / <rdar://problem/7033448>.
+ Bug 27025: Crashes and regression test failures related to regexps in 64-bit
+
+ For x86_64 RegexGenerator uses rbx, a callee-save register, as a scratch register but
+ neglects to save and restore it. The change in handling of the output vector in r45545
+ altered code generation so that the RegExp::match was now storing important data in rbx,
+ which caused crashes and bogus results when it was clobbered.
+
+ * yarr/RegexJIT.cpp:
+ (JSC::Yarr::RegexGenerator::generateEnter): Save rbx.
+ (JSC::Yarr::RegexGenerator::generateReturn): Restore rbx.
+
+2009-07-06 Ada Chan <adachan@apple.com>
+
+ Reviewed by Darin Adler and Mark Rowe.
+
+ Decommitted spans are added to the list of normal spans rather than
+ the returned spans in TCMalloc_PageHeap::Delete().
+ https://bugs.webkit.org/show_bug.cgi?id=26998
+
+ In TCMalloc_PageHeap::Delete(), the deleted span can be decommitted in
+ the process of merging with neighboring spans that are also decommitted.
+ The merged span needs to be placed in the list of returned spans (spans
+ whose memory has been returned to the system). Right now it's always added
+ to the list of the normal spans which can theoretically cause thrashing.
+
+ * wtf/FastMalloc.cpp:
+ (WTF::TCMalloc_PageHeap::Delete):
+
+2009-07-05 Lars Knoll <lars.knoll@nokia.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ https://bugs.webkit.org/show_bug.cgi?id=26843
+
+ Fix run-time crashes in JavaScriptCore with the Metrowerks compiler on Symbian.
+
+ The Metrowerks compiler on the Symbian platform moves the globally
+ defined Hashtables into read-only memory, despite one of the members
+ being mutable. This causes crashes at run-time due to write access to
+ read-only memory.
+
+ Avoid the use of const with this compiler by introducing the
+ JSC_CONST_HASHTABLE macro.
+
+ Based on idea by Norbert Leser.
+
+ * runtime/Lookup.h: Define JSC_CONST_HASHTABLE as const for !WINSCW.
+ * create_hash_table: Use JSC_CONST_HASHTABLE for hashtables.
+ * runtime/JSGlobalData.cpp: Import various global hashtables via the macro.
+
+2009-07-04 Dan Bernstein <mitz@apple.com>
+
+ - debug build fix
+
+ * runtime/RegExpConstructor.cpp:
+ (JSC::RegExpConstructor::getLastParen):
+
+2009-07-03 Yong Li <yong.li@torchmobile.com>
+
+ Reviewed by Maciej Stachowiak (and revised slightly)
+
+ RegExp::match to be optimized
+ https://bugs.webkit.org/show_bug.cgi?id=26957
+
+ Allow regexp matching to use Vectors with inline capacity instead of
+ allocating a new ovector buffer every time.
+
+ ~5% speedup on SunSpider string-unpack-code test, 0.3% on SunSpider overall.
+
+ * runtime/RegExp.cpp:
+ (JSC::RegExp::match):
+ * runtime/RegExp.h:
+ * runtime/RegExpConstructor.cpp:
+ (JSC::RegExpConstructorPrivate::RegExpConstructorPrivate):
+ (JSC::RegExpConstructorPrivate::lastOvector):
+ (JSC::RegExpConstructorPrivate::tempOvector):
+ (JSC::RegExpConstructorPrivate::changeLastOvector):
+ (JSC::RegExpConstructor::performMatch):
+ (JSC::RegExpMatchesArray::RegExpMatchesArray):
+ (JSC::RegExpMatchesArray::fillArrayInstance):
+ (JSC::RegExpConstructor::getBackref):
+ (JSC::RegExpConstructor::getLastParen):
+ (JSC::RegExpConstructor::getLeftContext):
+ (JSC::RegExpConstructor::getRightContext):
+ * runtime/StringPrototype.cpp:
+ (JSC::stringProtoFuncSplit):
+
+2009-06-30 Kwang Yul Seo <skyul@company100.net>
+
+ Reviewed by Eric Seidel.
+
+ Override operator new/delete with const std::nothrow_t& as the second
+ argument.
+ https://bugs.webkit.org/show_bug.cgi?id=26792
+
+ On Windows CE, operator new/delete, new[]/delete[] with const
+ std::nothrow_t& must be overrided because some standard template
+ libraries use these operators.
+
+ The problem occurs when memory allocated by new(size_t s, const
+ std::nothrow_t&) is freed by delete(void* p). This causes the umatched
+ malloc/free problem.
+
+ The patch overrides all new, delete, new[] and delete[] to use
+ fastMaloc and fastFree consistently.
+
+ * wtf/FastMalloc.h:
+ (throw):
+
+2009-06-30 Gabor Loki <loki@inf.u-szeged.hu>
+
+ Reviewed by Sam Weinig.
+
+ <https://bugs.webkit.org/show_bug.cgi?id=24986>
+
+ Remove unnecessary references to AssemblerBuffer.
+
+ * interpreter/Interpreter.cpp:
+ * interpreter/Interpreter.h:
+
+2009-06-29 David Levin <levin@chromium.org>
+
+ Reviewed by Oliver Hunt.
+
+ Still seeing occasional leaks from UString::sharedBuffer code
+ https://bugs.webkit.org/show_bug.cgi?id=26420
+
+ The problem is that the pointer to the memory allocation isn't visible
+ by "leaks" due to the lower bits being used as flags. The fix is to
+ make the pointer visible in memory (in debug only). The downside of
+ this fix that the memory allocated by sharedBuffer will still look like
+ a leak in non-debug builds when any flags are set.
+
+ * wtf/PtrAndFlags.h:
+ (WTF::PtrAndFlags::set):
+
+2009-06-29 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Mark Rowe.
+
+ Remove more unused scons support.
+
+ * SConstruct: Removed.
+
+2009-06-29 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ <rdar://problem/7016214> JSON.parse fails to parse valid JSON with most Unicode characters
+ <https://bugs.webkit.org/show_bug.cgi?id=26802>
+
+ In the original JSON.parse patch unicode was handled correctly, however in some last
+ minute "clean up" I oversimplified isSafeStringCharacter. This patch corrects this bug.
+
+ * runtime/LiteralParser.cpp:
+ (JSC::isSafeStringCharacter):
+ (JSC::LiteralParser::Lexer::lexString):
+
+2009-06-26 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ <rdar://problem/7009684> REGRESSION(r45039): Crashes inside JSEvent::put on PowerPC (26746)
+ <https://bugs.webkit.org/show_bug.cgi?id=26746>
+
+ Fix for r45039 incorrectly uncached a get_by_id by converting it to put_by_id. Clearly this
+ is less than correct. This patch corrects that error.
+
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::tryCacheGetByID):
+
+2009-06-26 Eric Seidel <eric@webkit.org>
+
+ No review, only rolling out r45259.
+
+ Roll out r45259 after crash appeared on the bots:
+ plugins/undefined-property-crash.html
+ ASSERTION FAILED: s <= HeapConstants<heapType>::cellSize
+ (leopard-intel-debug-tests/build/JavaScriptCore/runtime/Collector.cpp:278
+ void* JSC::Heap::heapAllocate(size_t) [with JSC::HeapType heapType = PrimaryHeap])
+
+ * runtime/DateInstance.cpp:
+ * runtime/Identifier.cpp:
+ * runtime/Lookup.h:
+ * runtime/RegExpConstructor.cpp:
+ * runtime/RegExpObject.h:
+ * runtime/ScopeChain.h:
+ * runtime/UString.h:
+
+2009-06-26 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Add support for QDataStream operators to Vector.
+
+ * wtf/Vector.h:
+ (WTF::operator<<):
+ (WTF::operator>>):
+
+2009-06-24 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Gavin Barraclough.
+
+ Make the opcode sampler work once again.
+
+ * jit/JIT.h:
+ (JSC::JIT::compileGetByIdProto):
+ (JSC::JIT::compileGetByIdSelfList):
+ (JSC::JIT::compileGetByIdProtoList):
+ (JSC::JIT::compileGetByIdChainList):
+ (JSC::JIT::compileGetByIdChain):
+ (JSC::JIT::compilePutByIdTransition):
+ (JSC::JIT::compileCTIMachineTrampolines):
+ (JSC::JIT::compilePatchGetArrayLength):
+ * jit/JITStubCall.h:
+ (JSC::JITStubCall::call):
+
+2009-06-24 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
+
+ Reviewed by Maciej Stachowiak.
+
+ Extend FastAllocBase.h with 'using WTF::FastAllocBase' to avoid
+ unnecessary WTF:: usings.
+ Remove existing unnecessary WTF:: usings.
+
+ * interpreter/Interpreter.h:
+ * profiler/CallIdentifier.h:
+ * runtime/ScopeChain.h:
+ * wtf/FastAllocBase.h:
+
+2009-06-24 David Levin <levin@chromium.org>
+
+ Fix all builds.
+
+ * bytecode/CodeBlock.h:
+ * bytecompiler/BytecodeGenerator.h:
+ * interpreter/Register.h:
+
+2009-06-24 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
+
+ Reviewed by Maciej Stachowiak.
+
+ https://bugs.webkit.org/show_bug.cgi?id=26677
+
+ Inherits CodeBlock class from FastAllocBase because it
+ has been instantiated by 'new' in JavaScriptCore/bytecode/CodeBlock.h:217.
+
+ * bytecode/CodeBlock.h:
+
+2009-06-24 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
+
+ Reviewed by Maciej Stachowiak.
+
+ https://bugs.webkit.org/show_bug.cgi?id=26676
+
+ Inherits BytecodeGenerator class from FastAllocBase because it has been
+ instantiated by 'new' in JavaScriptCore/parser/Nodes.cpp:1892.
+
+ * bytecompiler/BytecodeGenerator.h:
+
+2009-06-24 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
+
+ Reviewed by Maciej Stachowiak.
+
+ https://bugs.webkit.org/show_bug.cgi?id=26675
+
+ Inherits Register class from FastAllocBase because it has been
+ instantiated by 'new' in JavaScriptCore/runtime/JSVariableObject.h:149.
+
+ * interpreter/Register.h:
+
+2009-06-24 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=26674
+
+ Inherits HashMap class from FastAllocBase because it has been
+ instantiated by 'new' in JavaScriptCore/runtime/Structure.cpp:458.
+
+ * wtf/HashMap.h:
+
+2009-06-24 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Darin Adler.
+
+ <rdar://problem/6940519> REGRESSION (Safari 4 Public Beta - TOT): google.com/adplanner shows blank page instead of site details in "basic research'
+
+ The problem was caused by the page returned with a function using a
+ var declaration list containing around ~3000 variables. The solution
+ to this is to flatten the comma expression representation and make
+ codegen comma expressions and initializer lists iterative rather than
+ recursive.
+
+ * parser/Grammar.y:
+ * parser/NodeConstructors.h:
+ (JSC::CommaNode::CommaNode):
+ * parser/Nodes.cpp:
+ (JSC::CommaNode::emitBytecode):
+ * parser/Nodes.h:
+ (JSC::ExpressionNode::isCommaNode):
+ (JSC::CommaNode::isCommaNode):
+ (JSC::CommaNode::append):
+
+2009-06-24 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
+
+ Reviewed by Maciej Stachowiak.
+
+ https://bugs.webkit.org/show_bug.cgi?id=26645
+
+ Inherits ScopeChainNode class from FastAllocBase because it has been
+ instantiated by 'new' in JavaScriptCore/runtime/ScopeChain.h:95.
+
+ * wtf/RefPtr.h:
+
+2009-06-24 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=26648
+
+ Inherits Deque class from FastAllocBase because it has been
+ instantiated by 'new' with DEFINE_STATIC_LOCAL macro in
+ JavaScriptCore/wtf/MainThread.cpp:62.
+
+ * wtf/Deque.h:
+
+2009-06-24 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
+
+ Reviewed by Darin Adler.
+
+ https://bugs.webkit.org/show_bug.cgi?id=26644
+
+ Inherits RefPtr class from FastAllocBase because it has been
+ instantiated by 'new' in JavaScriptCore/runtime/StructureChain.cpp:41.
+
+ * wtf/RefPtr.h:
+
+2009-06-24 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
+
+ Reviewed by Darin Adler.
+
+ Inherits HashSet class from FastAllocBase, because it has been
+ instantiated by 'new' in JavaScriptCore/runtime/Collector.h:116.
+
+ * wtf/HashSet.h:
+
+2009-06-24 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
+
+ Reviewed by Darin Adler.
+
+ Inherits Vector class from FastAllocBase because it has been
+ instantiated by 'new' in JavaScriptCore/runtime/Structure.cpp:633.
+
+ * wtf/Vector.h:
+
+2009-06-24 Norbert Leser <norbert.leser@nokia.com>
+
+ Reviewed by Maciej Stachoviak.
+
+ The BytecodeGenerator objects were instantiated on stack, which takes up ~38kB per instance
+ (each instance includes copy of JSC::CodeBlock with large SymbolTable, etc.).
+ Specifically, since there is nested invocation (e.g., GlobalCode --> FunctionCode),
+ the stack overflows immediately on Symbian hardware (max. 80 kB).
+ Proposed change allocates generator objects on heap.
+ Performance impact (if any) should be negligible and change is proposed as general fix,
+ rather than ifdef'd for SYMBIAN.
+
+ * parser/Nodes.cpp:
+ (JSC::ProgramNode::generateBytecode):
+ (JSC::EvalNode::generateBytecode):
+ (JSC::EvalNode::bytecodeForExceptionInfoReparse):
+ (JSC::FunctionBodyNode::generateBytecode):
+ (JSC::FunctionBodyNode::bytecodeForExceptionInfoReparse):
+
+2009-06-23 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ <rdar://problem/6992806> REGRESSION: Enumeration can skip new properties in cases of prototypes that have more than 64 (26593)
+ <https://bugs.webkit.org/show_bug.cgi?id=26593>
+
+ Do not attempt to cache structure chains if they contain a dictionary at any level.
+
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::tryCachePutByID):
+ (JSC::Interpreter::tryCacheGetByID):
+ * jit/JITStubs.cpp:
+ (JSC::JITThunks::tryCachePutByID):
+ * runtime/Structure.cpp:
+ (JSC::Structure::getEnumerablePropertyNames):
+ (JSC::Structure::addPropertyTransition):
+ * runtime/StructureChain.cpp:
+ (JSC::StructureChain::isCacheable):
+ * runtime/StructureChain.h:
+
+2009-06-23 Yong Li <yong.li@torchmobile.com>
+
+ Reviewed by George Staikos.
+
+ https://bugs.webkit.org/show_bug.cgi?id=26654
+ Add the proper export define for the JavaScriptCore API when building for WINCE.
+
+ * API/JSBase.h:
+
+2009-06-23 Joe Mason <joe.mason@torchmobile.com>
+
+ Reviewed by Adam Treat.
+
+ Authors: Yong Li <yong.li@torchmobile.com>, Joe Mason <joe.mason@torchmobile.com>
+
+ https://bugs.webkit.org/show_bug.cgi?id=26611
+ Implement currentThreadStackBase on WINCE by adding a global,
+ g_stackBase, which must be set to the address of a local variable
+ by the caller before calling any WebKit function that invokes JSC.
+
+ * runtime/Collector.cpp:
+ (JSC::isPageWritable):
+ (JSC::getStackBase):
+ Starts at the top of the stack and returns the entire range of
+ consecutive writable pages as an estimate of the actual stack.
+ This will be much bigger than the actual stack range, so some
+ dead objects can't be collected, but it guarantees live objects
+ aren't collected prematurely.
+
+ (JSC::currentThreadStackBase):
+ On WinCE, returns g_stackBase if set or call getStackBase as a
+ fallback if not.
+
+2009-06-23 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Alexey Proskuryakov.
+
+ Fix stupid performance problem in the LiteralParser
+
+ The LiteralParser was making a new UString in order to use
+ toDouble, however UString's toDouble allows a much wider range
+ of numberic strings than the LiteralParser accepts, and requires
+ an additional heap allocation or two for the construciton of the
+ UString. To rectify this we just call WTF::dtoa directly using
+ a stack allocated buffer to hold the validated numeric literal.
+
+ * runtime/LiteralParser.cpp:
+ (JSC::LiteralParser::Lexer::lexNumber):
+ (JSC::LiteralParser::parse):
+ * runtime/LiteralParser.h:
+
+2009-06-22 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Alexey Proskuryakov.
+
+ Bug 26640: JSON.stringify needs to special case Boolean objects
+ <https://bugs.webkit.org/show_bug.cgi?id=26640>
+
+ Add special case handling of the Boolean object so we match current
+ ES5 errata.
+
+ * runtime/JSONObject.cpp:
+ (JSC::unwrapBoxedPrimitive): renamed from unwrapNumberOrString
+ (JSC::gap):
+ (JSC::Stringifier::appendStringifiedValue):
+
+2009-06-22 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Bug 26591: Support revivers in JSON.parse
+ <https://bugs.webkit.org/show_bug.cgi?id=26591>
+
+ Add reviver support to JSON.parse. This completes the JSON object.
+
+ * runtime/JSONObject.cpp:
+ (JSC::Walker::Walker):
+ (JSC::Walker::callReviver):
+ (JSC::Walker::walk):
+ (JSC::JSONProtoFuncParse):
+
+2009-06-21 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Bug 26592: Support standard toJSON functions
+ <https://bugs.webkit.org/show_bug.cgi?id=26592>
+
+ Add support for the standard Date.toJSON function.
+
+ * runtime/DatePrototype.cpp:
+ (JSC::dateProtoFuncToJSON):
+
+2009-06-21 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Bug 26594: JSC needs to support Date.toISOString
+ <https://bugs.webkit.org/show_bug.cgi?id=26594>
+
+ Add support for Date.toISOString.
+
+ * runtime/DatePrototype.cpp:
+ (JSC::dateProtoFuncToISOString):
+
+2009-06-21 Oliver Hunt <oliver@apple.com>
+
+ Remove dead code.
+
+ * runtime/LiteralParser.cpp:
+ (JSC::LiteralParser::parse):
+
+2009-06-21 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Darin Adler and Cameron Zwarich.
+
+ Bug 26587: Support JSON.parse
+ <https://bugs.webkit.org/show_bug.cgi?id=26587>
+
+ Extend the LiteralParser to support the full strict JSON
+ grammar, fix a few places where the grammar was incorrectly
+ lenient. Doesn't yet support the JSON.parse reviver function
+ but that does not block the JSON.parse functionality itself.
+
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::callEval):
+ * runtime/JSGlobalObjectFunctions.cpp:
+ (JSC::globalFuncEval):
+ * runtime/JSONObject.cpp:
+ (JSC::JSONProtoFuncParse):
+ * runtime/LiteralParser.cpp:
+ (JSC::LiteralParser::Lexer::lex):
+ (JSC::isSafeStringCharacter):
+ (JSC::LiteralParser::Lexer::lexString):
+ (JSC::LiteralParser::parse):
+ * runtime/LiteralParser.h:
+ (JSC::LiteralParser::LiteralParser):
+ (JSC::LiteralParser::tryJSONParse):
+ (JSC::LiteralParser::):
+ (JSC::LiteralParser::Lexer::Lexer):
+
+2009-06-21 David Levin <levin@chromium.org>
+
+ Reviewed by NOBODY (speculative build fix for windows).
+
+ Simply removed some whitespace form this file to make windows build wtf and
+ hopefully copy the new MessageQueque.h so that WebCore picks it up.
+
+ * wtf/Assertions.cpp:
+
+2009-06-21 Drew Wilson <atwilson@google.com>
+
+ Reviewed by David Levin.
+
+ <https://bugs.webkit.org/show_bug.cgi?id=25043>
+ Added support for multi-threaded MessagePorts.
+
+ * wtf/MessageQueue.h:
+ (WTF::::appendAndCheckEmpty):
+ Added API to test whether the queue was empty before adding an element.
+
+2009-06-20 David D. Kilzer <ddkilzer@webkit.org>
+
+ Fix namespace comment in SegmentedVector.h
+
+ * wtf/SegmentedVector.h: Updated namespace comment to reflect
+ new namespace after r44897.
+
+2009-06-20 Zoltan Herczeg <zherczeg@inf.u-szeged.hu>
+
+ Bug 24986: ARM JIT port
+ <https://bugs.webkit.org/show_bug.cgi?id=24986>
+
+ Reviewed by Oliver Hunt.
+
+ An Iterator added for SegmentedVector. Currently
+ only the pre ++ operator is supported.
+
+ * wtf/SegmentedVector.h:
+ (WTF::SegmentedVectorIterator::~SegmentedVectorIterator):
+ (WTF::SegmentedVectorIterator::operator*):
+ (WTF::SegmentedVectorIterator::operator->):
+ (WTF::SegmentedVectorIterator::operator++):
+ (WTF::SegmentedVectorIterator::operator==):
+ (WTF::SegmentedVectorIterator::operator!=):
+ (WTF::SegmentedVectorIterator::operator=):
+ (WTF::SegmentedVectorIterator::SegmentedVectorIterator):
+ (WTF::SegmentedVector::alloc):
+ (WTF::SegmentedVector::begin):
+ (WTF::SegmentedVector::end):
+
+2009-06-20 Zoltan Herczeg <zherczeg@inf.u-szeged.hu>
+
+ Bug 24986: ARM JIT port
+ <https://bugs.webkit.org/show_bug.cgi?id=24986>
+
+ Reviewed by Oliver Hunt.
+
+ Move SegmentedVector to /wtf subdirectory
+ and change "namespace JSC" to "namespace WTF"
+
+ Additional build file updates by David Kilzer.
+
+ * GNUmakefile.am: Updated path to SegmentedVector.h.
+ * JavaScriptCore.order: Updated SegmentedVector namespace from
+ JSC to WTF in mangled C++ method name.
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ Removed reference to bytecompiler\SegmentedVector.h.
+ * JavaScriptCore.vcproj/WTF/WTF.vcproj: Added reference to
+ wtf\SegmentedVector.h.
+ * JavaScriptCore.xcodeproj/project.pbxproj: Moved
+ SegmentedVector.h definition from bytecompiler subdirectory to
+ wtf subdirectory.
+ * bytecompiler/BytecodeGenerator.h: Updated #include path to
+ SegmentedVector.h and prepended WTF:: namespace to its use.
+ * parser/Lexer.h: Ditto.
+ * wtf/SegmentedVector.h: Renamed from JavaScriptCore/bytecompiler/SegmentedVector.h.
+ (WTF::SegmentedVector::SegmentedVector):
+ (WTF::SegmentedVector::~SegmentedVector):
+ (WTF::SegmentedVector::size):
+ (WTF::SegmentedVector::at):
+ (WTF::SegmentedVector::operator[]):
+ (WTF::SegmentedVector::last):
+ (WTF::SegmentedVector::append):
+ (WTF::SegmentedVector::removeLast):
+ (WTF::SegmentedVector::grow):
+ (WTF::SegmentedVector::clear):
+ (WTF::SegmentedVector::deleteAllSegments):
+ (WTF::SegmentedVector::segmentExistsFor):
+ (WTF::SegmentedVector::segmentFor):
+ (WTF::SegmentedVector::subscriptFor):
+ (WTF::SegmentedVector::ensureSegmentsFor):
+ (WTF::SegmentedVector::ensureSegment):
+
+2009-06-19 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (build fix take 2 - rename FIELD_OFFSET to something that doesn't conflict with winnt.h).
+
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompile):
+ (JSC::JIT::privateCompileCTIMachineTrampolines):
+ (JSC::JIT::emitGetVariableObjectRegister):
+ (JSC::JIT::emitPutVariableObjectRegister):
+ * jit/JIT.h:
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_rshift):
+ (JSC::JIT::emitSlow_op_jnless):
+ (JSC::JIT::emitSlow_op_jnlesseq):
+ (JSC::JIT::compileBinaryArithOp):
+ * jit/JITCall.cpp:
+ (JSC::JIT::compileOpCallInitializeCallFrame):
+ (JSC::JIT::compileOpCall):
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::restoreArgumentReference):
+ (JSC::JIT::checkStructure):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_instanceof):
+ (JSC::JIT::emit_op_get_scoped_var):
+ (JSC::JIT::emit_op_put_scoped_var):
+ (JSC::JIT::emit_op_construct_verify):
+ (JSC::JIT::emit_op_resolve_global):
+ (JSC::JIT::emit_op_jeq_null):
+ (JSC::JIT::emit_op_jneq_null):
+ (JSC::JIT::emit_op_to_jsnumber):
+ (JSC::JIT::emit_op_catch):
+ (JSC::JIT::emit_op_eq_null):
+ (JSC::JIT::emit_op_neq_null):
+ (JSC::JIT::emit_op_convert_this):
+ (JSC::JIT::emit_op_profile_will_call):
+ (JSC::JIT::emit_op_profile_did_call):
+ (JSC::JIT::emitSlow_op_get_by_val):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emit_op_get_by_val):
+ (JSC::JIT::emit_op_put_by_val):
+ (JSC::JIT::emit_op_method_check):
+ (JSC::JIT::compileGetByIdHotPath):
+ (JSC::JIT::emit_op_put_by_id):
+ (JSC::JIT::compilePutDirectOffset):
+ (JSC::JIT::compileGetDirectOffset):
+ (JSC::JIT::privateCompilePutByIdTransition):
+ (JSC::JIT::privateCompilePatchGetArrayLength):
+ * jit/JITStubs.cpp:
+ (JSC::JITThunks::JITThunks):
+
+2009-06-19 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (Windows build fix).
+
+ * jit/JIT.h:
+ * jit/JITInlineMethods.h:
+
+2009-06-19 Gabor Loki <loki@inf.u-szeged.hu>
+
+ Reviewed by Gavin Barraclough.
+
+ Reorganize ARM architecture specific macros.
+ Use PLATFORM_ARM_ARCH(7) instead of PLATFORM(ARM_V7).
+
+ Bug 24986: ARM JIT port
+ <https://bugs.webkit.org/show_bug.cgi?id=24986>
+
+ * assembler/ARMv7Assembler.h:
+ * assembler/AbstractMacroAssembler.h:
+ (JSC::AbstractMacroAssembler::Imm32::Imm32):
+ * assembler/MacroAssembler.h:
+ * assembler/MacroAssemblerCodeRef.h:
+ (JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr):
+ * jit/ExecutableAllocator.h:
+ (JSC::ExecutableAllocator::cacheFlush):
+ * jit/JIT.h:
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::restoreArgumentReferenceForTrampoline):
+ * jit/JITStubs.cpp:
+ * jit/JITStubs.h:
+ * wtf/Platform.h:
+ * yarr/RegexJIT.cpp:
+ (JSC::Yarr::RegexGenerator::generateEnter):
+ (JSC::Yarr::RegexGenerator::generateReturn):
+
+2009-06-19 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Fix armv7 JIT build issues.
+
+ Unfortunate the arm compiler does not like the use of offsetof on JITStackFrame (since it now contains non POD types),
+ and the FIELD_OFFSET macro does not appear constantish enough for it to be happy with its use in COMPILE_ASSERT macros.
+
+ * Replace offsetofs with FIELD_OFFSETs (safe on C++ objects).
+ * Move COMPILE_ASSERTs defending layout of JITStackFrame structure on armv7 into JITThunks constructor.
+
+ * jit/JIT.cpp:
+ * jit/JIT.h:
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::restoreArgumentReference):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_catch):
+ * jit/JITStubs.cpp:
+ (JSC::JITThunks::JITThunks):
+
+2009-06-19 Adam Treat <adam.treat@torchmobile.com>
+
+ Blind attempt at build fix.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+
+2009-06-19 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
+
+ Reviewed by Oliver Hunt.
+
+ Inherits CallIdentifier struct from FastAllocBase because it has been
+ instantiated by 'new' in JavaScriptCore/profiler/CallIdentifier.h:86.
+
+ * wtf/HashCountedSet.h:
+
+2009-06-19 Adam Treat <adam.treat@torchmobile.com>
+
+ Reviewed by Oliver Hunt.
+
+ https://bugs.webkit.org/show_bug.cgi?id=26540
+ Modify the test shell to add a new function 'checkSyntax' that will
+ only parse the source instead of executing it. In this way we can test
+ pure parsing performance against some of the larger scripts in the wild.
+
+ * jsc.cpp:
+ (GlobalObject::GlobalObject):
+ (functionCheckSyntax):
+
+2009-06-19 Zoltan Horvath <hzoltan@inf.u-szeged.hu>
+
+ Reviewed by Darin Adler.
+
+ Inherits HashCountedSet class from FastAllocBase because it has been
+ instantiated by 'new' in JavaScriptCore/runtime/Collector.cpp:1095.
+
+ * wtf/HashCountedSet.h:
+
+2009-06-19 Yong Li <yong.li@torchmobile.com>
+
+ Reviewed by George Staikos.
+
+ https://bugs.webkit.org/show_bug.cgi?id=26558
+ Declare these symbols extern for WINCE as they are provided by libce.
+
+ * runtime/DateConstructor.cpp:
+ * runtime/DatePrototype.cpp:
+ (JSC::formatLocaleDate):
+
+2009-06-19 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ <rdar://problem/6988973> ScopeChain leak in interpreter builds
+
+ Move the Scopechain destruction code in JSFunction outside of the ENABLE(JIT)
+ path.
+
+ * runtime/JSFunction.cpp:
+ (JSC::JSFunction::~JSFunction):
+ * wtf/Platform.h:
+
+2009-06-19 Yong Li <yong.li@torchmobile.com>
+
+ Reviewed by George Staikos.
+
+ https://bugs.webkit.org/show_bug.cgi?id=26543
+ Windows CE uses 'GetLastError' instead of 'errno.'
+
+ * interpreter/RegisterFile.h:
+ (JSC::RegisterFile::RegisterFile):
+ (JSC::RegisterFile::grow):
+
+2009-06-19 David Levin <levin@chromium.org>
+
+ Reviewed by NOBODY (Windows build fix).
+
+ Add export for Windows corresponding to OSX export done in r44844.
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
+
+2009-06-18 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin "Viceroy of Venezuela" Barraclough.
+
+ Bug 26532: Native functions do not correctly unlink from optimised callsites when they're collected
+ <https://bugs.webkit.org/show_bug.cgi?id=26532> <rdar://problem/6625385>
+
+ We need to make sure that each native function instance correctly unlinks any references to it
+ when it is collected. Allowing this to happen required a few changes:
+ * Every native function needs a codeblock to track the link information
+ * To have this codeblock, every function now also needs its own functionbodynode
+ so we no longer get to have a single shared instance.
+ * Identifying a host function is now done by looking for CodeBlock::codeType() == NativeCode
+
+ * JavaScriptCore.exp:
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::CodeBlock):
+ Constructor for NativeCode CodeBlock
+ (JSC::CodeBlock::derefStructures):
+ (JSC::CodeBlock::refStructures):
+ (JSC::CodeBlock::reparseForExceptionInfoIfNecessary):
+ (JSC::CodeBlock::handlerForBytecodeOffset):
+ (JSC::CodeBlock::lineNumberForBytecodeOffset):
+ (JSC::CodeBlock::expressionRangeForBytecodeOffset):
+ (JSC::CodeBlock::getByIdExceptionInfoForBytecodeOffset):
+ (JSC::CodeBlock::functionRegisterForBytecodeOffset):
+ (JSC::CodeBlock::hasGlobalResolveInstructionAtBytecodeOffset):
+ (JSC::CodeBlock::hasGlobalResolveInfoAtBytecodeOffset):
+ (JSC::CodeBlock::setJITCode):
+ Add assertions to ensure we don't try and use NativeCode CodeBlocks as
+ a normal codeblock.
+
+ * bytecode/CodeBlock.h:
+ (JSC::):
+ (JSC::CodeBlock::source):
+ (JSC::CodeBlock::sourceOffset):
+ (JSC::CodeBlock::evalCodeCache):
+ (JSC::CodeBlock::createRareDataIfNecessary):
+ More assertions.
+
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileCTIMachineTrampolines):
+ (JSC::JIT::linkCall):
+ Update logic to allow native function caching
+
+ * jit/JITStubs.cpp:
+ * parser/Nodes.cpp:
+ (JSC::FunctionBodyNode::createNativeThunk):
+ (JSC::FunctionBodyNode::isHostFunction):
+ * parser/Nodes.h:
+ * runtime/JSFunction.cpp:
+ (JSC::JSFunction::JSFunction):
+ (JSC::JSFunction::~JSFunction):
+ (JSC::JSFunction::mark):
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::~JSGlobalData):
+ * runtime/JSGlobalData.h:
+
+2009-06-18 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by NOBODY (Windows build fix).
+
+ * wtf/DateMath.cpp:
+ (WTF::calculateUTCOffset):
+
+2009-06-18 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Timezone calculation incorrect in Venezuela.
+
+ https://bugs.webkit.org/show_bug.cgi?id=26531
+ <rdar://problem/6646169> Time is incorrectly reported to JavaScript in both Safari 3 and Firefox 3
+
+ The problem is that we're calculating the timezone relative to 01/01/2000,
+ but the VET timezone changed from -4 hours to -4:30 hours on 12/09/2007.
+ According to the spec, section 15.9.1.9 states "the time since the beginning
+ of the year", presumably meaning the *current* year. Change the calculation
+ to be based on whatever the current year is, rather than a canned date.
+
+ No performance impact.
+
+ * wtf/DateMath.cpp:
+ (WTF::calculateUTCOffset):
+
+2009-06-18 Gavin Barraclough <barraclough@apple.com>
+
+ Rubber Stamped by Mark Rowe (originally reviewed by Sam Weinig).
+
+ (Reintroducing patch added in r44492, and reverted in r44796.)
+
+ Change the implementation of op_throw so the stub function always modifies its
+ return address - if it doesn't find a 'catch' it will switch to a trampoline
+ to force a return from JIT execution. This saves memory, by avoiding the need
+ for a unique return for every op_throw.
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_throw):
+ JITStubs::cti_op_throw now always changes its return address,
+ remove return code generated after the stub call (this is now
+ handled by ctiOpThrowNotCaught).
+ * jit/JITStubs.cpp:
+ (JSC::):
+ Add ctiOpThrowNotCaught definitions.
+ (JSC::JITStubs::DEFINE_STUB_FUNCTION):
+ Change cti_op_throw to always change its return address.
+ * jit/JITStubs.h:
+ Add ctiOpThrowNotCaught declaration.
+
+2009-06-18 Kevin McCullough <kmccullough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ <rdar://problem/6940880> REGRESSION: Breakpoints don't break in 64-bit
+
+ - Exposed functions now needed by WebCore.
+
+ * JavaScriptCore.exp:
+
+2009-06-17 Darin Adler <darin@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ Bug 26429: Make JSON.stringify non-recursive so it can handle objects
+ of arbitrary complexity
+ https://bugs.webkit.org/show_bug.cgi?id=26429
+
+ For marking I decided not to use gcProtect, because this is inside the engine
+ so it's easy enough to just do marking. And that darned gcProtect does locking!
+ Oliver tried to convince me to used MarkedArgumentBuffer, but the constructor
+ for that class says "FIXME: Remove all clients of this API, then remove this API."
+
+ * runtime/Collector.cpp:
+ (JSC::Heap::collect): Add a call to JSONObject::markStringifiers.
+
+ * runtime/CommonIdentifiers.cpp:
+ (JSC::CommonIdentifiers::CommonIdentifiers): Added emptyIdentifier.
+ * runtime/CommonIdentifiers.h: Ditto.
+
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData): Initialize firstStringifierToMark to 0.
+ * runtime/JSGlobalData.h: Added firstStringifierToMark.
+
+ * runtime/JSONObject.cpp: Cut down the includes to the needed ones only.
+ (JSC::unwrapNumberOrString): Added. Helper for unwrapping number and string
+ objects to get their number and string values.
+ (JSC::ReplacerPropertyName::ReplacerPropertyName): Added. The class is used
+ to wrap an identifier or integer so we don't have to do any work unless we
+ actually call a replacer.
+ (JSC::ReplacerPropertyName::value): Added.
+ (JSC::gap): Added. Helper function for the Stringifier constructor.
+ (JSC::PropertyNameForFunctionCall::PropertyNameForFunctionCall): Added.
+ The class is used to wrap an identifier or integer so we don't have to
+ allocate a number or string until we actually call toJSON or a replacer.
+ (JSC::PropertyNameForFunctionCall::asJSValue): Added.
+ (JSC::Stringifier::Stringifier): Updated and moved out of the class
+ definition. Added code to hook this into a singly linked list for marking.
+ (JSC::Stringifier::~Stringifier): Remove from the singly linked list.
+ (JSC::Stringifier::mark): Mark all the objects in the holder stacks.
+ (JSC::Stringifier::stringify): Updated.
+ (JSC::Stringifier::appendQuotedString): Tweaked and streamlined a bit.
+ (JSC::Stringifier::toJSON): Renamed from toJSONValue.
+ (JSC::Stringifier::appendStringifiedValue): Renamed from stringify.
+ Added code to use the m_holderStack to do non-recursive stringify of
+ objects and arrays. This code also uses the timeout checker since in
+ pathological cases it could be slow even without calling into the
+ JavaScript virtual machine.
+ (JSC::Stringifier::willIndent): Added.
+ (JSC::Stringifier::indent): Added.
+ (JSC::Stringifier::unindent): Added.
+ (JSC::Stringifier::startNewLine): Added.
+ (JSC::Stringifier::Holder::Holder): Added.
+ (JSC::Stringifier::Holder::appendNextProperty): Added. This is the
+ function that handles the format of arrays and objects.
+ (JSC::JSONObject::getOwnPropertySlot): Moved this down to the bottom
+ of the file so the JSONObject class is not interleaved with the
+ Stringifier class.
+ (JSC::JSONObject::markStringifiers): Added. Calls mark.
+ (JSC::JSONProtoFuncStringify): Streamlined the code here. The code
+ to compute the gap string is now a separate function.
+
+ * runtime/JSONObject.h: Made everything private. Added markStringifiers.
+
+2009-06-17 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Gavin Barraclough.
+
+ <rdar://problem/6974140> REGRESSION(r43849): Crash in cti_op_call_NotJSFunction when getting directions on maps.google.com
+
+ Roll out r43849 as it appears that we cannot rely on the address of
+ an objects property storage being constant even if the structure is
+ unchanged.
+
+ * jit/JIT.h:
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::compileGetDirectOffset):
+ (JSC::JIT::privateCompileGetByIdProto):
+ (JSC::JIT::privateCompileGetByIdProtoList):
+ (JSC::JIT::privateCompileGetByIdChainList):
+ (JSC::JIT::privateCompileGetByIdChain):
+
+2009-06-17 Gavin Barraclough <barraclough@apple.com>
+
+ Rubber Stamped by Mark Rowe.
+
+ Fully revert r44492 & r44748 while we fix a bug they cause on internal builds <rdar://problem/6955963>.
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_throw):
+ * jit/JITStubs.cpp:
+ (JSC::):
+ (JSC::JITStubs::DEFINE_STUB_FUNCTION):
+ * jit/JITStubs.h:
+
+2009-06-17 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Mark Rowe.
+
+ <rdar://problem/6947426> sunspider math-cordic.js exhibits different intermediate results running 32-bit vs. 64-bit
+
+ On 64-bit, NaN-encoded values must be detagged before they can be used in rshift.
+
+ No performance impact.
+
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_rshift):
+
+2009-06-17 Adam Treat <adam.treat@torchmobile.com>
+
+ Reviewed by George Staikos.
+
+ https://bugs.webkit.org/show_bug.cgi?id=23155
+ Move WIN_CE -> WINCE as previously discussed with Qt WINCE folks.
+
+ * jsc.cpp:
+ (main):
+
+2009-06-17 George Staikos <george.staikos@torchmobile.com>
+
+ Reviewed by Adam Treat.
+
+ https://bugs.webkit.org/show_bug.cgi?id=23155
+ Move WIN_CE -> WINCE as previously discussed with Qt WINCE folks.
+
+ * config.h:
+ * jsc.cpp:
+ * wtf/Assertions.cpp:
+ * wtf/Assertions.h:
+ * wtf/CurrentTime.cpp:
+ (WTF::lowResUTCTime):
+ * wtf/DateMath.cpp:
+ (WTF::getLocalTime):
+ * wtf/MathExtras.h:
+ * wtf/Platform.h:
+ * wtf/StringExtras.h:
+ * wtf/Threading.h:
+ * wtf/win/MainThreadWin.cpp:
+
+2009-06-17 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver Hunt.
+
+ <rdar://problem/6974175> ASSERT in JITStubs.cpp at appsaccess.apple.com
+
+ Remove PropertySlot::putValue - PropertySlots should only be used for getting,
+ not putting. Rename JSGlobalObject::getOwnPropertySlot to hasOwnPropertyForWrite,
+ which is what it really was being used to ask, and remove some other getOwnPropertySlot
+ & getOwnPropertySlotForWrite methods, which were unused and likely to lead to confusion.
+
+ * runtime/JSGlobalObject.h:
+ (JSC::JSGlobalObject::hasOwnPropertyForWrite):
+ * runtime/JSObject.h:
+ * runtime/JSStaticScopeObject.cpp:
+ * runtime/JSStaticScopeObject.h:
+ * runtime/PropertySlot.h:
+
+2009-06-16 Gavin Barraclough <barraclough@apple.com>
+
+ Reviewed by Oliver hunt.
+
+ Temporarily partially disable r44492, since this is causing some problems on internal builds.
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_throw):
+ * jit/JITStubs.cpp:
+ (JSC::JITStubs::DEFINE_STUB_FUNCTION):
+
+2009-06-16 Sam Weinig <sam@webkit.org>
+
+ Fix windows build.
+
+ * jit/JIT.cpp:
+ (JSC::JIT::JIT):
+
+2009-06-16 Sam Weinig <sam@webkit.org>
+
+ Reviewed by Oliver Hunt.
+
+ Initialize m_bytecodeIndex to -1 in JIT, and correctly initialize
+ it for each type of stub using the return address to find the correct
+ offset.
+
+ * jit/JIT.cpp:
+ (JSC::JIT::JIT):
+ * jit/JIT.h:
+ (JSC::JIT::compileGetByIdProto):
+ (JSC::JIT::compileGetByIdSelfList):
+ (JSC::JIT::compileGetByIdProtoList):
+ (JSC::JIT::compileGetByIdChainList):
+ (JSC::JIT::compileGetByIdChain):
+ (JSC::JIT::compilePutByIdTransition):
+ (JSC::JIT::compileCTIMachineTrampolines):
+ (JSC::JIT::compilePatchGetArrayLength):
+ * jit/JITStubCall.h:
+ (JSC::JITStubCall::call):
+
+== Rolled over to ChangeLog-2009-06-16 ==
diff --git a/JavaScriptCore/GNUmakefile.am b/JavaScriptCore/GNUmakefile.am
index 2c924ef..a9c19c6 100644
--- a/JavaScriptCore/GNUmakefile.am
+++ b/JavaScriptCore/GNUmakefile.am
@@ -63,9 +63,11 @@ javascriptcore_sources += \
JavaScriptCore/API/JSContextRef.cpp \
JavaScriptCore/API/JSContextRefPrivate.h \
JavaScriptCore/API/JSObjectRef.cpp \
+ JavaScriptCore/API/JSObjectRefPrivate.h \
JavaScriptCore/API/JSRetainPtr.h \
JavaScriptCore/API/JSStringRef.cpp \
JavaScriptCore/API/JSValueRef.cpp \
+ JavaScriptCore/API/JSWeakObjectMapRefInternal.h \
JavaScriptCore/API/OpaqueJSString.cpp \
JavaScriptCore/API/OpaqueJSString.h \
JavaScriptCore/ForwardingHeaders/JavaScriptCore/APICast.h \
@@ -185,6 +187,7 @@ javascriptcore_sources += \
JavaScriptCore/interpreter/CallFrame.cpp \
JavaScriptCore/interpreter/CallFrame.h \
JavaScriptCore/interpreter/CallFrameClosure.h \
+ JavaScriptCore/runtime/CachedTranscendentalFunction.h \
JavaScriptCore/runtime/ExceptionHelpers.cpp \
JavaScriptCore/runtime/ExceptionHelpers.h \
JavaScriptCore/runtime/Executable.cpp \
@@ -314,9 +317,11 @@ javascriptcore_sources += \
JavaScriptCore/wtf/text/AtomicStringImpl.h \
JavaScriptCore/wtf/text/CString.cpp \
JavaScriptCore/wtf/text/CString.h \
+ JavaScriptCore/wtf/text/StringBuffer.h \
JavaScriptCore/wtf/text/StringHash.h \
JavaScriptCore/wtf/text/StringImpl.cpp \
JavaScriptCore/wtf/text/StringImpl.h \
+ JavaScriptCore/wtf/text/StringImplBase.h \
JavaScriptCore/wtf/text/StringStatics.cpp \
JavaScriptCore/wtf/text/WTFString.cpp \
JavaScriptCore/wtf/text/WTFString.h \
@@ -465,6 +470,7 @@ javascriptcore_sources += \
JavaScriptCore/runtime/JSNumberCell.h \
JavaScriptCore/runtime/JSObject.cpp \
JavaScriptCore/runtime/JSObjectWithGlobalObject.cpp \
+ JavaScriptCore/runtime/JSObjectWithGlobalObject.h \
JavaScriptCore/runtime/JSObject.h \
JavaScriptCore/runtime/JSStaticScopeObject.cpp \
JavaScriptCore/runtime/JSStaticScopeObject.h \
@@ -562,7 +568,7 @@ JavaScriptCore/%.lut.h: $(CREATE_HASH_TABLE) $(srcdir)/JavaScriptCore/%.cpp
$(PERL) $^ -i > $@
JavaScriptCore/RegExpJitTables.h: $(srcdir)/JavaScriptCore/create_regex_tables
- $(PYTHON) $(srcdir)/JavaScriptCore/create_regex_tables > $@
+ $(PYTHON) $(CREATE_REGEXP_TABLES) > $@
JavaScriptCore/pcre/chartables.c: $(srcdir)/JavaScriptCore/pcre/dftables
$(PERL) $^ $@
diff --git a/JavaScriptCore/JavaScriptCore.exp b/JavaScriptCore/JavaScriptCore.exp
index e14af7f..3985d4e 100644
--- a/JavaScriptCore/JavaScriptCore.exp
+++ b/JavaScriptCore/JavaScriptCore.exp
@@ -109,7 +109,7 @@ __ZN3JSC10Identifier4fromEPNS_9ExecStateEj
__ZN3JSC10Identifier5equalEPKN7WebCore10StringImplEPKc
__ZN3JSC10JSFunction4infoE
__ZN3JSC10JSFunction4nameEPNS_9ExecStateE
-__ZN3JSC10JSFunctionC1EPNS_9ExecStateEPNS_14JSGlobalObjectEN3WTF17NonNullPassRefPtrINS_9StructureEEEiRKNS_10IdentifierEPFNS_7JSValueES2_PNS_8JSObjectESC_RKNS_7ArgListEE
+__ZN3JSC10JSFunctionC1EPNS_9ExecStateEPNS_14JSGlobalObjectEN3WTF17NonNullPassRefPtrINS_9StructureEEEiRKNS_10IdentifierEPFNS_7JSValueES2_E
__ZN3JSC10throwErrorEPNS_9ExecStateENS_9ErrorTypeE
__ZN3JSC10throwErrorEPNS_9ExecStateENS_9ErrorTypeEPKc
__ZN3JSC10throwErrorEPNS_9ExecStateENS_9ErrorTypeERKNS_7UStringE
@@ -174,7 +174,7 @@ __ZN3JSC16JSVariableObject19getOwnPropertyNamesEPNS_9ExecStateERNS_17PropertyNam
__ZN3JSC16toUInt32SlowCaseEdRb
__ZN3JSC17BytecodeGenerator21setDumpsGeneratedCodeEb
__ZN3JSC17PropertyNameArray3addEPN7WebCore10StringImplE
-__ZN3JSC17PrototypeFunctionC1EPNS_9ExecStateEPNS_14JSGlobalObjectEN3WTF17NonNullPassRefPtrINS_9StructureEEEiRKNS_10IdentifierEPFNS_7JSValueES2_PNS_8JSObjectESC_RKNS_7ArgListEE
+__ZN3JSC17PrototypeFunctionC1EPNS_9ExecStateEPNS_14JSGlobalObjectEN3WTF17NonNullPassRefPtrINS_9StructureEEEiRKNS_10IdentifierEPFNS_7JSValueES2_E
__ZN3JSC17constructFunctionEPNS_9ExecStateERKNS_7ArgListERKNS_10IdentifierERKNS_7UStringEi
__ZN3JSC18DebuggerActivationC1EPNS_8JSObjectE
__ZN3JSC18PropertyDescriptor11setWritableEb
@@ -189,10 +189,11 @@ __ZN3JSC18PropertyDescriptor9setSetterENS_7JSValueE
__ZN3JSC19initializeThreadingEv
__ZN3JSC20MarkedArgumentBuffer10slowAppendENS_7JSValueE
__ZN3JSC23AbstractSamplingCounter4dumpEv
-__ZN3JSC23objectProtoFuncToStringEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE
+__ZN3JSC23objectProtoFuncToStringEPNS_9ExecStateE
__ZN3JSC23setUpStaticFunctionSlotEPNS_9ExecStateEPKNS_9HashEntryEPNS_8JSObjectERKNS_10IdentifierERNS_12PropertySlotE
__ZN3JSC24JSObjectWithGlobalObjectC2EPNS_14JSGlobalObjectEN3WTF17NonNullPassRefPtrINS_9StructureEEE
__ZN3JSC24createStackOverflowErrorEPNS_9ExecStateE
+__ZN3JSC24createStackOverflowErrorEPNS_9ExecStateE
__ZN3JSC25evaluateInGlobalCallFrameERKNS_7UStringERNS_7JSValueEPNS_14JSGlobalObjectE
__ZN3JSC35createInterruptedExecutionExceptionEPNS_12JSGlobalDataE
__ZN3JSC3NaNE
diff --git a/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def b/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def
index e7d7eda..1176bcf 100644
--- a/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def
+++ b/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def
@@ -10,10 +10,11 @@ EXPORTS
??0JSArray@JSC@@QAE@V?$NonNullPassRefPtr@VStructure@JSC@@@WTF@@@Z
??0JSArray@JSC@@QAE@V?$NonNullPassRefPtr@VStructure@JSC@@@WTF@@ABVArgList@1@@Z
??0JSByteArray@JSC@@QAE@PAVExecState@1@V?$NonNullPassRefPtr@VStructure@JSC@@@WTF@@PAVByteArray@4@PBUClassInfo@1@@Z
- ??0JSFunction@JSC@@QAE@PAVExecState@1@PAVJSGlobalObject@1@V?$NonNullPassRefPtr@VStructure@JSC@@@WTF@@HABVIdentifier@1@P6I?AVJSValue@1@0PAVJSObject@1@V71@ABVArgList@1@@Z@Z
+ ??0JSFunction@JSC@@QAE@PAVExecState@1@PAVJSGlobalObject@1@V?$NonNullPassRefPtr@VStructure@JSC@@@WTF@@HABVIdentifier@1@P6I?AVJSValue@1@0@Z@Z
??0JSObjectWithGlobalObject@JSC@@IAE@PAVJSGlobalObject@1@V?$NonNullPassRefPtr@VStructure@JSC@@@WTF@@@Z
??0MD5@WTF@@QAE@XZ
??0Mutex@WTF@@QAE@XZ
+ ??0PrototypeFunction@JSC@@QAE@PAVExecState@1@PAVJSGlobalObject@1@V?$NonNullPassRefPtr@VStructure@JSC@@@WTF@@HABVIdentifier@1@P6I?AVJSValue@1@0@Z@Z
??0RefCountedLeakCounter@WTF@@QAE@PBD@Z
??0StringObject@JSC@@QAE@PAVExecState@1@V?$NonNullPassRefPtr@VStructure@JSC@@@WTF@@ABVUString@1@@Z
??0Structure@JSC@@AAE@VJSValue@1@ABVTypeInfo@1@I@Z
@@ -173,8 +174,8 @@ EXPORTS
?getUInt32@JSCell@JSC@@UBE_NAAI@Z
?getter@PropertyDescriptor@JSC@@QBE?AVJSValue@2@XZ
?globalExec@JSGlobalObject@JSC@@UAEPAVExecState@2@XZ
- ?globalObjectCount@Heap@JSC@@QAEIXZ
?globalObject@JSObjectWithGlobalObject@JSC@@QBEPAVJSGlobalObject@2@XZ
+ ?globalObjectCount@Heap@JSC@@QAEIXZ
?hasInstance@JSObject@JSC@@UAE_NPAVExecState@2@VJSValue@2@1@Z
?hasProperty@JSObject@JSC@@QBE_NPAVExecState@2@ABVIdentifier@2@@Z
?hasProperty@JSObject@JSC@@QBE_NPAVExecState@2@I@Z
@@ -219,7 +220,7 @@ EXPORTS
?newUninitialized@CString@WTF@@SA?AV12@IAAPAD@Z
?nonInlineNaN@JSC@@YANXZ
?objectCount@Heap@JSC@@QBEIXZ
- ?objectProtoFuncToString@JSC@@YI?AVJSValue@1@PAVExecState@1@PAVJSObject@1@V21@ABVArgList@1@@Z
+ ?objectProtoFuncToString@JSC@@YI?AVJSValue@1@PAVExecState@1@@Z
?parse@Parser@JSC@@AAEXPAVJSGlobalData@2@PAHPAVUString@2@@Z
?parseDateFromNullTerminatedCharacters@WTF@@YANPBD@Z
?profiler@Profiler@JSC@@SAPAV12@XZ
diff --git a/JavaScriptCore/assembler/MacroAssemblerMIPS.h b/JavaScriptCore/assembler/MacroAssemblerMIPS.h
index 409922f..88132f7 100644
--- a/JavaScriptCore/assembler/MacroAssemblerMIPS.h
+++ b/JavaScriptCore/assembler/MacroAssemblerMIPS.h
@@ -1674,7 +1674,7 @@ public:
return branchFalse(); // false
}
if (cond == DoubleGreaterThanOrEqual) {
- m_assembler.cnged(right, left);
+ m_assembler.cnged(left, right);
return branchFalse(); // false
}
if (cond == DoubleLessThan) {
diff --git a/JavaScriptCore/bytecode/CodeBlock.cpp b/JavaScriptCore/bytecode/CodeBlock.cpp
index d0132cf..df3ca7b 100644
--- a/JavaScriptCore/bytecode/CodeBlock.cpp
+++ b/JavaScriptCore/bytecode/CodeBlock.cpp
@@ -499,6 +499,17 @@ void CodeBlock::dump(ExecState* exec, const Vector<Instruction>::const_iterator&
printf("[%4d] init_arguments\t %s\n", location, registerName(exec, r0).data());
break;
}
+ case op_get_callee: {
+ int r0 = (++it)->u.operand;
+ printf("[%4d] op_get_callee %s\n", location, registerName(exec, r0).data());
+ break;
+ }
+ case op_create_this: {
+ int r0 = (++it)->u.operand;
+ int r1 = (++it)->u.operand;
+ printf("[%4d] create_this %s %s\n", location, registerName(exec, r0).data(), registerName(exec, r1).data());
+ break;
+ }
case op_convert_this: {
int r0 = (++it)->u.operand;
printf("[%4d] convert_this %s\n", location, registerName(exec, r0).data());
@@ -1083,9 +1094,7 @@ void CodeBlock::dump(ExecState* exec, const Vector<Instruction>::const_iterator&
int func = (++it)->u.operand;
int argCount = (++it)->u.operand;
int registerOffset = (++it)->u.operand;
- int proto = (++it)->u.operand;
- int thisRegister = (++it)->u.operand;
- printf("[%4d] construct\t %s, %d, %d, %s, %s\n", location, registerName(exec, func).data(), argCount, registerOffset, registerName(exec, proto).data(), registerName(exec, thisRegister).data());
+ printf("[%4d] construct\t %s, %d, %d\n", location, registerName(exec, func).data(), argCount, registerOffset);
break;
}
case op_strcat: {
@@ -1636,7 +1645,7 @@ bool CodeBlock::getByIdExceptionInfoForBytecodeOffset(CallFrame* callFrame, unsi
if (!low || m_exceptionInfo->m_getByIdExceptionInfo[low - 1].bytecodeOffset != bytecodeOffset)
return false;
- opcodeID = m_exceptionInfo->m_getByIdExceptionInfo[low - 1].isOpConstruct ? op_construct : op_instanceof;
+ opcodeID = m_exceptionInfo->m_getByIdExceptionInfo[low - 1].isOpCreateThis ? op_create_this : op_instanceof;
return true;
}
diff --git a/JavaScriptCore/bytecode/CodeBlock.h b/JavaScriptCore/bytecode/CodeBlock.h
index e5da2b2..27e56c6 100644
--- a/JavaScriptCore/bytecode/CodeBlock.h
+++ b/JavaScriptCore/bytecode/CodeBlock.h
@@ -97,7 +97,7 @@ namespace JSC {
// thrown by these instances op_get_by_id need to reflect this.
struct GetByIdExceptionInfo {
unsigned bytecodeOffset : 31;
- bool isOpConstruct : 1;
+ bool isOpCreateThis : 1;
};
#if ENABLE(JIT)
diff --git a/JavaScriptCore/bytecode/Opcode.h b/JavaScriptCore/bytecode/Opcode.h
index 30472d5..81fff99 100644
--- a/JavaScriptCore/bytecode/Opcode.h
+++ b/JavaScriptCore/bytecode/Opcode.h
@@ -42,6 +42,8 @@ namespace JSC {
macro(op_enter_with_activation, 2) \
macro(op_init_arguments, 2) \
macro(op_create_arguments, 2) \
+ macro(op_create_this, 3) \
+ macro(op_get_callee, 2) \
macro(op_convert_this, 2) \
\
macro(op_new_object, 2) \
@@ -164,7 +166,7 @@ namespace JSC {
macro(op_ret_object_or_this, 3) \
macro(op_method_check, 1) \
\
- macro(op_construct, 6) \
+ macro(op_construct, 4) \
macro(op_strcat, 4) \
macro(op_to_primitive, 3) \
\
diff --git a/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp b/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
index cdf87d2..bebfdbb 100644
--- a/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
+++ b/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
@@ -364,16 +364,29 @@ BytecodeGenerator::BytecodeGenerator(FunctionBodyNode* functionBody, const Debug
m_thisRegister.setIndex(m_nextParameterIndex);
++m_nextParameterIndex;
++m_codeBlock->m_numParameters;
-
- if (!isConstructor() && (functionBody->usesThis() || m_shouldEmitDebugHooks)) {
- emitOpcode(op_convert_this);
- instructions().append(m_thisRegister.index());
- }
for (size_t i = 0; i < parameterCount; ++i)
addParameter(parameters[i]);
preserveLastVar();
+
+ if (isConstructor()) {
+ RefPtr<RegisterID> func = newTemporary();
+ RefPtr<RegisterID> funcProto = newTemporary();
+
+ emitOpcode(op_get_callee);
+ instructions().append(func->index());
+ // Load prototype.
+ emitGetByIdExceptionInfo(op_create_this);
+ emitGetById(funcProto.get(), func.get(), globalData()->propertyNames->prototype);
+
+ emitOpcode(op_create_this);
+ instructions().append(m_thisRegister.index());
+ instructions().append(funcProto->index());
+ } else if (functionBody->usesThis() || m_shouldEmitDebugHooks) {
+ emitOpcode(op_convert_this);
+ instructions().append(m_thisRegister.index());
+ }
}
BytecodeGenerator::BytecodeGenerator(EvalNode* evalNode, const Debugger* debugger, const ScopeChain& scopeChain, SymbolTable* symbolTable, EvalCodeBlock* codeBlock)
@@ -1581,8 +1594,6 @@ RegisterID* BytecodeGenerator::emitConstruct(RegisterID* dst, RegisterID* func,
}
}
- RefPtr<RegisterID> funcProto = newTemporary();
-
// Generate code for arguments.
Vector<RefPtr<RegisterID>, 16> argv;
argv.append(newTemporary()); // reserve space for "this"
@@ -1598,11 +1609,6 @@ RegisterID* BytecodeGenerator::emitConstruct(RegisterID* dst, RegisterID* func,
instructions().append(func->index());
}
- // Load prototype.
- emitExpressionInfo(divot, startOffset, endOffset);
- emitGetByIdExceptionInfo(op_construct);
- emitGetById(funcProto.get(), func, globalData()->propertyNames->prototype);
-
// Reserve space for call frame.
Vector<RefPtr<RegisterID>, RegisterFile::CallFrameHeaderSize> callFrame;
for (int i = 0; i < RegisterFile::CallFrameHeaderSize; ++i)
@@ -1618,8 +1624,6 @@ RegisterID* BytecodeGenerator::emitConstruct(RegisterID* dst, RegisterID* func,
instructions().append(func->index()); // func
instructions().append(argv.size()); // argCount
instructions().append(argv[0]->index() + argv.size() + RegisterFile::CallFrameHeaderSize); // registerOffset
- instructions().append(funcProto->index()); // proto
- instructions().append(argv[0]->index()); // thisRegister
if (dst != ignoredResult()) {
emitOpcode(op_call_put_result);
instructions().append(dst->index()); // dst
diff --git a/JavaScriptCore/bytecompiler/BytecodeGenerator.h b/JavaScriptCore/bytecompiler/BytecodeGenerator.h
index 7626bf4..398d666 100644
--- a/JavaScriptCore/bytecompiler/BytecodeGenerator.h
+++ b/JavaScriptCore/bytecompiler/BytecodeGenerator.h
@@ -248,10 +248,10 @@ namespace JSC {
{
// Only op_construct and op_instanceof need exception info for
// a preceding op_get_by_id.
- ASSERT(opcodeID == op_construct || opcodeID == op_instanceof);
+ ASSERT(opcodeID == op_create_this || opcodeID == op_instanceof);
GetByIdExceptionInfo info;
info.bytecodeOffset = instructions().size();
- info.isOpConstruct = (opcodeID == op_construct);
+ info.isOpCreateThis = (opcodeID == op_create_this);
m_codeBlock->addGetByIdExceptionInfo(info);
}
diff --git a/JavaScriptCore/debugger/DebuggerCallFrame.cpp b/JavaScriptCore/debugger/DebuggerCallFrame.cpp
index a734b1d..da9cb52 100644
--- a/JavaScriptCore/debugger/DebuggerCallFrame.cpp
+++ b/JavaScriptCore/debugger/DebuggerCallFrame.cpp
@@ -44,10 +44,10 @@ const UString* DebuggerCallFrame::functionName() const
if (!m_callFrame->callee())
return 0;
- JSFunction* function = asFunction(m_callFrame->callee());
- if (!function)
+ JSObject* function = m_callFrame->callee();
+ if (!function || !function->inherits(&JSFunction::info))
return 0;
- return &function->name(m_callFrame);
+ return &asFunction(function)->name(m_callFrame);
}
UString DebuggerCallFrame::calculatedFunctionName() const
@@ -55,13 +55,11 @@ UString DebuggerCallFrame::calculatedFunctionName() const
if (!m_callFrame->codeBlock())
return UString();
- if (!m_callFrame->callee())
- return UString();
+ JSObject* function = m_callFrame->callee();
+ if (!function || !function->inherits(&JSFunction::info))
+ return 0;
- JSFunction* function = asFunction(m_callFrame->callee());
- if (!function)
- return UString();
- return function->calculatedDisplayName(m_callFrame);
+ return asFunction(function)->calculatedDisplayName(m_callFrame);
}
DebuggerCallFrame::Type DebuggerCallFrame::type() const
@@ -74,10 +72,15 @@ DebuggerCallFrame::Type DebuggerCallFrame::type() const
JSObject* DebuggerCallFrame::thisObject() const
{
- if (!m_callFrame->codeBlock())
+ CodeBlock* codeBlock = m_callFrame->codeBlock();
+ if (!codeBlock)
+ return 0;
+
+ JSValue thisValue = m_callFrame->r(codeBlock->thisRegister()).jsValue();
+ if (!thisValue.isObject())
return 0;
- return asObject(m_callFrame->thisValue());
+ return asObject(thisValue);
}
JSValue DebuggerCallFrame::evaluate(const UString& script, JSValue& exception) const
diff --git a/JavaScriptCore/interpreter/CallFrame.cpp b/JavaScriptCore/interpreter/CallFrame.cpp
index 9724875..f53e6f4 100644
--- a/JavaScriptCore/interpreter/CallFrame.cpp
+++ b/JavaScriptCore/interpreter/CallFrame.cpp
@@ -31,11 +31,6 @@
namespace JSC {
-JSValue CallFrame::thisValue()
-{
- return this[codeBlock()->thisRegister()].jsValue();
-}
-
#ifndef NDEBUG
void CallFrame::dumpCaller()
{
diff --git a/JavaScriptCore/interpreter/CallFrame.h b/JavaScriptCore/interpreter/CallFrame.h
index a875119..2a7bce2 100644
--- a/JavaScriptCore/interpreter/CallFrame.h
+++ b/JavaScriptCore/interpreter/CallFrame.h
@@ -38,16 +38,13 @@ namespace JSC {
// Passed as the first argument to most functions.
class ExecState : private Register {
public:
- JSFunction* callee() const { return this[RegisterFile::Callee].function(); }
+ JSObject* callee() const { return this[RegisterFile::Callee].function(); }
CodeBlock* codeBlock() const { return this[RegisterFile::CodeBlock].Register::codeBlock(); }
ScopeChainNode* scopeChain() const
{
ASSERT(this[RegisterFile::ScopeChain].Register::scopeChain());
return this[RegisterFile::ScopeChain].Register::scopeChain();
}
- int argumentCount() const { return this[RegisterFile::ArgumentCount].i(); }
-
- JSValue thisValue();
// Global object in which execution began.
JSGlobalObject* dynamicGlobalObject();
@@ -118,32 +115,46 @@ namespace JSC {
void setScopeChain(ScopeChainNode* scopeChain) { static_cast<Register*>(this)[RegisterFile::ScopeChain] = scopeChain; }
ALWAYS_INLINE void init(CodeBlock* codeBlock, Instruction* vPC, ScopeChainNode* scopeChain,
- CallFrame* callerFrame, int, int argc, JSFunction* function)
+ CallFrame* callerFrame, int argc, JSObject* callee)
{
ASSERT(callerFrame); // Use noCaller() rather than 0 for the outer host call frame caller.
setCodeBlock(codeBlock);
setScopeChain(scopeChain);
setCallerFrame(callerFrame);
- static_cast<Register*>(this)[RegisterFile::ReturnPC] = vPC; // This is either an Instruction* or a pointer into JIT generated code stored as an Instruction*.
- setArgumentCount(argc); // original argument count (for the sake of the "arguments" object)
- setCallee(function);
+ setReturnPC(vPC); // This is either an Instruction* or a pointer into JIT generated code stored as an Instruction*.
+ setArgumentCountIncludingThis(argc); // original argument count (for the sake of the "arguments" object)
+ setCallee(callee);
}
// Read a register from the codeframe (or constant from the CodeBlock).
inline Register& r(int);
+ // Access to arguments.
+ int hostThisRegister() { return -RegisterFile::CallFrameHeaderSize - argumentCountIncludingThis(); }
+ JSValue hostThisValue() { return this[hostThisRegister()].jsValue(); }
+ size_t argumentCount() const { return argumentCountIncludingThis() - 1; }
+ size_t argumentCountIncludingThis() const { return this[RegisterFile::ArgumentCount].i(); }
+ JSValue argument(int argumentNumber)
+ {
+ int argumentIndex = -RegisterFile::CallFrameHeaderSize - this[RegisterFile::ArgumentCount].i() + argumentNumber + 1;
+ if (argumentIndex >= -RegisterFile::CallFrameHeaderSize)
+ return jsUndefined();
+ return this[argumentIndex].jsValue();
+ }
+
static CallFrame* noCaller() { return reinterpret_cast<CallFrame*>(HostCallFrameFlag); }
bool hasHostCallFrameFlag() const { return reinterpret_cast<intptr_t>(this) & HostCallFrameFlag; }
CallFrame* addHostCallFrameFlag() const { return reinterpret_cast<CallFrame*>(reinterpret_cast<intptr_t>(this) | HostCallFrameFlag); }
CallFrame* removeHostCallFrameFlag() { return reinterpret_cast<CallFrame*>(reinterpret_cast<intptr_t>(this) & ~HostCallFrameFlag); }
- private:
- void setArgumentCount(int count) { static_cast<Register*>(this)[RegisterFile::ArgumentCount] = Register::withInt(count); }
- void setCallee(JSFunction* callee) { static_cast<Register*>(this)[RegisterFile::Callee] = callee; }
+ void setArgumentCountIncludingThis(int count) { static_cast<Register*>(this)[RegisterFile::ArgumentCount] = Register::withInt(count); }
+ void setCallee(JSObject* callee) { static_cast<Register*>(this)[RegisterFile::Callee] = Register::withCallee(callee); }
void setCodeBlock(CodeBlock* codeBlock) { static_cast<Register*>(this)[RegisterFile::CodeBlock] = codeBlock; }
+ void setReturnPC(void* value) { static_cast<Register*>(this)[RegisterFile::ReturnPC] = (Instruction*)value; }
+ private:
static const intptr_t HostCallFrameFlag = 1;
ExecState();
diff --git a/JavaScriptCore/interpreter/Interpreter.cpp b/JavaScriptCore/interpreter/Interpreter.cpp
index 1fbc9b7..12ac323 100644
--- a/JavaScriptCore/interpreter/Interpreter.cpp
+++ b/JavaScriptCore/interpreter/Interpreter.cpp
@@ -375,7 +375,7 @@ NEVER_INLINE JSValue Interpreter::callEval(CallFrame* callFrame, RegisterFile* r
JSValue result = jsUndefined();
if (eval)
- result = callFrame->globalData().interpreter->execute(eval.get(), callFrame, callFrame->thisValue().toThisObject(callFrame), callFrame->registers() - registerFile->start() + registerOffset, scopeChain, &exceptionValue);
+ result = callFrame->globalData().interpreter->execute(eval.get(), callFrame, callFrame->r(codeBlock->thisRegister()).jsValue().toThisObject(callFrame), callFrame->registers() - registerFile->start() + registerOffset, scopeChain, &exceptionValue);
return result;
}
@@ -628,8 +628,10 @@ NEVER_INLINE HandlerInfo* Interpreter::throwException(CallFrame*& callFrame, JSV
return 0;
}
- // Now unwind the scope chain within the exception handler's call frame.
+ // Shrink the JS stack, in case stack overflow made it huge.
+ m_registerFile.shrink(callFrame->registers() + callFrame->codeBlock()->m_numCalleeRegisters);
+ // Unwind the scope chain within the exception handler's call frame.
ScopeChainNode* scopeChain = callFrame->scopeChain();
ScopeChain sc(scopeChain);
int scopeDelta = depth(codeBlock, sc) - handler->scopeDepth;
@@ -661,19 +663,20 @@ JSValue Interpreter::execute(ProgramExecutable* program, CallFrame* callFrame, S
return jsNull();
}
- DynamicGlobalObjectScope globalObjectScope(callFrame, scopeChain->globalObject);
-
JSGlobalObject* lastGlobalObject = m_registerFile.globalObject();
JSGlobalObject* globalObject = callFrame->dynamicGlobalObject();
globalObject->copyGlobalsTo(m_registerFile);
CallFrame* newCallFrame = CallFrame::create(oldEnd + codeBlock->m_numParameters + RegisterFile::CallFrameHeaderSize);
- newCallFrame->r(codeBlock->thisRegister()) = JSValue(thisObj);
- newCallFrame->init(codeBlock, 0, scopeChain, CallFrame::noCaller(), 0, 0, 0);
+ ASSERT(codeBlock->m_numParameters == 1); // 1 parameter for 'this'.
+ newCallFrame->init(codeBlock, 0, scopeChain, CallFrame::noCaller(), codeBlock->m_numParameters, 0);
+ newCallFrame->r(newCallFrame->hostThisRegister()) = JSValue(thisObj);
if (codeBlock->needsFullScopeChain())
scopeChain->ref();
+ DynamicGlobalObjectScope globalObjectScope(callFrame, scopeChain->globalObject);
+
Profiler** profiler = Profiler::enabledProfilerReference();
if (*profiler)
(*profiler)->willExecute(newCallFrame, program->sourceURL(), program->lineNo());
@@ -702,9 +705,9 @@ JSValue Interpreter::execute(ProgramExecutable* program, CallFrame* callFrame, S
return result;
}
-JSValue Interpreter::executeCall(FunctionExecutable* functionExecutable, CallFrame* callFrame, JSFunction* function, JSObject* thisObj, const ArgList& args, ScopeChainNode* scopeChain, JSValue* exception)
+JSValue Interpreter::executeCall(CallFrame* callFrame, JSObject* function, CallType callType, const CallData& callData, JSValue thisValue, const ArgList& args, JSValue* exception)
{
- ASSERT(!scopeChain->globalData->exception);
+ ASSERT(!callFrame->hadException());
if (m_reentryDepth >= MaxSmallThreadReentryDepth) {
if (m_reentryDepth >= callFrame->globalData().maxReentryDepth) {
@@ -714,51 +717,79 @@ JSValue Interpreter::executeCall(FunctionExecutable* functionExecutable, CallFra
}
Register* oldEnd = m_registerFile.end();
- int argc = 1 + args.size(); // implicit "this" parameter
+ int argCount = 1 + args.size(); // implicit "this" parameter
+ size_t registerOffset = argCount + RegisterFile::CallFrameHeaderSize;
- if (!m_registerFile.grow(oldEnd + argc)) {
+ if (!m_registerFile.grow(oldEnd + registerOffset)) {
*exception = createStackOverflowError(callFrame);
return jsNull();
}
- DynamicGlobalObjectScope globalObjectScope(callFrame, scopeChain->globalObject);
-
CallFrame* newCallFrame = CallFrame::create(oldEnd);
size_t dst = 0;
- newCallFrame->r(0) = JSValue(thisObj);
+ newCallFrame->r(0) = thisValue;
ArgList::const_iterator end = args.end();
for (ArgList::const_iterator it = args.begin(); it != end; ++it)
newCallFrame->r(++dst) = *it;
- CodeBlock* codeBlock = &functionExecutable->bytecodeForCall(callFrame, scopeChain);
- newCallFrame = slideRegisterWindowForCall(codeBlock, &m_registerFile, newCallFrame, argc + RegisterFile::CallFrameHeaderSize, argc);
- if (UNLIKELY(!newCallFrame)) {
- *exception = createStackOverflowError(callFrame);
+ if (callType == CallTypeJS) {
+ ScopeChainNode* callDataScopeChain = callData.js.scopeChain;
+ CodeBlock* newCodeBlock = &callData.js.functionExecutable->bytecodeForCall(callFrame, callDataScopeChain);
+
+ newCallFrame = slideRegisterWindowForCall(newCodeBlock, &m_registerFile, newCallFrame, registerOffset, argCount);
+ if (UNLIKELY(!newCallFrame)) {
+ *exception = createStackOverflowError(callFrame);
+ m_registerFile.shrink(oldEnd);
+ return jsNull();
+ }
+
+ newCallFrame->init(newCodeBlock, 0, callDataScopeChain, callFrame->addHostCallFrameFlag(), argCount, function);
+
+ DynamicGlobalObjectScope globalObjectScope(newCallFrame, callDataScopeChain->globalObject);
+
+ Profiler** profiler = Profiler::enabledProfilerReference();
+ if (*profiler)
+ (*profiler)->willExecute(newCallFrame, function);
+
+ JSValue result;
+ {
+ SamplingTool::CallRecord callRecord(m_sampler.get());
+
+ m_reentryDepth++;
+ #if ENABLE(JIT)
+ result = callData.js.functionExecutable->jitCodeForCall(newCallFrame, callDataScopeChain).execute(&m_registerFile, newCallFrame, callDataScopeChain->globalData, exception);
+ #else
+ result = privateExecute(Normal, &m_registerFile, newCallFrame, exception);
+ #endif
+ m_reentryDepth--;
+ }
+
+ if (*profiler)
+ (*profiler)->didExecute(newCallFrame, function);
+
m_registerFile.shrink(oldEnd);
- return jsNull();
+ return result;
}
- // a 0 codeBlock indicates a built-in caller
- newCallFrame->init(codeBlock, 0, scopeChain, callFrame->addHostCallFrameFlag(), 0, argc, function);
+
+ ASSERT(callType == CallTypeHost);
+ ScopeChainNode* scopeChain = callFrame->scopeChain();
+ newCallFrame = CallFrame::create(newCallFrame->registers() + registerOffset);
+ newCallFrame->init(0, 0, scopeChain, callFrame->addHostCallFrameFlag(), argCount, function);
+
+ DynamicGlobalObjectScope globalObjectScope(newCallFrame, scopeChain->globalObject);
Profiler** profiler = Profiler::enabledProfilerReference();
if (*profiler)
- (*profiler)->willExecute(callFrame, function);
+ (*profiler)->willExecute(newCallFrame, function);
JSValue result;
{
- SamplingTool::CallRecord callRecord(m_sampler.get());
-
- m_reentryDepth++;
-#if ENABLE(JIT)
- result = functionExecutable->jitCodeForCall(newCallFrame, scopeChain).execute(&m_registerFile, newCallFrame, scopeChain->globalData, exception);
-#else
- result = privateExecute(Normal, &m_registerFile, newCallFrame, exception);
-#endif
- m_reentryDepth--;
+ SamplingTool::HostCallRecord callRecord(m_sampler.get());
+ result = callData.native.function(newCallFrame);
}
if (*profiler)
- (*profiler)->didExecute(callFrame, function);
+ (*profiler)->didExecute(newCallFrame, function);
m_registerFile.shrink(oldEnd);
return result;
@@ -783,8 +814,6 @@ JSValue Interpreter::executeConstruct(FunctionExecutable* functionExecutable, Ca
return jsNull();
}
- DynamicGlobalObjectScope globalObjectScope(callFrame, scopeChain->globalObject);
-
CallFrame* newCallFrame = CallFrame::create(oldEnd);
size_t dst = 0;
newCallFrame->r(0) = JSValue(thisObj);
@@ -800,7 +829,9 @@ JSValue Interpreter::executeConstruct(FunctionExecutable* functionExecutable, Ca
return jsNull();
}
// a 0 codeBlock indicates a built-in caller
- newCallFrame->init(codeBlock, 0, scopeChain, callFrame->addHostCallFrameFlag(), 0, argc, function);
+ newCallFrame->init(codeBlock, 0, scopeChain, callFrame->addHostCallFrameFlag(), argc, function);
+
+ DynamicGlobalObjectScope globalObjectScope(callFrame, scopeChain->globalObject);
Profiler** profiler = Profiler::enabledProfilerReference();
if (*profiler)
@@ -858,7 +889,7 @@ CallFrameClosure Interpreter::prepareForRepeatCall(FunctionExecutable* FunctionE
return CallFrameClosure();
}
// a 0 codeBlock indicates a built-in caller
- newCallFrame->init(codeBlock, 0, scopeChain, callFrame->addHostCallFrameFlag(), 0, argc, function);
+ newCallFrame->init(codeBlock, 0, scopeChain, callFrame->addHostCallFrameFlag(), argc, function);
#if ENABLE(JIT)
FunctionExecutable->jitCodeForCall(newCallFrame, scopeChain);
#endif
@@ -957,8 +988,9 @@ JSValue Interpreter::execute(EvalExecutable* eval, CallFrame* callFrame, JSObjec
CallFrame* newCallFrame = CallFrame::create(m_registerFile.start() + globalRegisterOffset);
// a 0 codeBlock indicates a built-in caller
- newCallFrame->r(codeBlock->thisRegister()) = JSValue(thisObj);
- newCallFrame->init(codeBlock, 0, scopeChain, callFrame->addHostCallFrameFlag(), 0, 0, 0);
+ ASSERT(codeBlock->m_numParameters == 1); // 1 parameter for 'this'.
+ newCallFrame->init(codeBlock, 0, scopeChain, callFrame->addHostCallFrameFlag(), codeBlock->m_numParameters, 0);
+ newCallFrame->r(newCallFrame->hostThisRegister()) = JSValue(thisObj);
if (codeBlock->needsFullScopeChain())
scopeChain->ref();
@@ -2938,7 +2970,7 @@ skip_id_custom_self:
JSValue result;
int offset = 0;
if (subscript == expectedSubscript && baseValue.isCell() && (baseValue.asCell()->structure() == it->cachedStructure()) && it->getOffset(index, offset)) {
- callFrame->r(dst) = asObject(baseValue)->getDirectOffset(offset);
+ callFrame->r(dst) = JSValue(asObject(baseValue)->getDirectOffset(offset));
vPC += OPCODE_LENGTH(op_get_by_pname);
NEXT_INSTRUCTION();
}
@@ -3577,7 +3609,7 @@ skip_id_custom_self:
goto vm_throw;
}
- callFrame->init(newCodeBlock, vPC + OPCODE_LENGTH(op_call), callDataScopeChain, previousCallFrame, 0, argCount, asFunction(v));
+ callFrame->init(newCodeBlock, vPC + OPCODE_LENGTH(op_call), callDataScopeChain, previousCallFrame, argCount, asFunction(v));
codeBlock = newCodeBlock;
ASSERT(codeBlock == callFrame->codeBlock());
vPC = newCodeBlock->instructions().begin();
@@ -3592,20 +3624,15 @@ skip_id_custom_self:
if (callType == CallTypeHost) {
ScopeChainNode* scopeChain = callFrame->scopeChain();
CallFrame* newCallFrame = CallFrame::create(callFrame->registers() + registerOffset);
- newCallFrame->init(0, vPC + OPCODE_LENGTH(op_call), scopeChain, callFrame, 0, argCount, 0);
+ newCallFrame->init(0, vPC + OPCODE_LENGTH(op_call), scopeChain, callFrame, argCount, asObject(v));
Register* thisRegister = newCallFrame->registers() - RegisterFile::CallFrameHeaderSize - argCount;
ArgList args(thisRegister + 1, argCount - 1);
- // FIXME: All host methods should be calling toThisObject, but this is not presently the case.
- JSValue thisValue = thisRegister->jsValue();
- if (thisValue == jsNull())
- thisValue = callFrame->globalThisValue();
-
JSValue returnValue;
{
SamplingTool::HostCallRecord callRecord(m_sampler.get());
- returnValue = callData.native.function(newCallFrame, asObject(v), thisValue, args);
+ returnValue = callData.native.function(newCallFrame);
}
CHECK_FOR_EXCEPTION();
@@ -3627,15 +3654,15 @@ skip_id_custom_self:
JSValue arguments = callFrame->r(argsOffset).jsValue();
int32_t argCount = 0;
if (!arguments) {
- argCount = (uint32_t)(callFrame->argumentCount()) - 1;
+ argCount = (uint32_t)(callFrame->argumentCount());
int32_t sizeDelta = argsOffset + argCount + RegisterFile::CallFrameHeaderSize;
Register* newEnd = callFrame->registers() + sizeDelta;
if (!registerFile->grow(newEnd) || ((newEnd - callFrame->registers()) != sizeDelta)) {
exceptionValue = createStackOverflowError(callFrame);
goto vm_throw;
}
- ASSERT(!callFrame->callee()->isHostFunction());
- int32_t expectedParams = callFrame->callee()->jsExecutable()->parameterCount();
+ ASSERT(!asFunction(callFrame->callee())->isHostFunction());
+ int32_t expectedParams = asFunction(callFrame->callee())->jsExecutable()->parameterCount();
int32_t inplaceArgs = min(argCount, expectedParams);
int32_t i = 0;
Register* argStore = callFrame->registers() + argsOffset;
@@ -3732,7 +3759,7 @@ skip_id_custom_self:
goto vm_throw;
}
- callFrame->init(newCodeBlock, vPC + OPCODE_LENGTH(op_call_varargs), callDataScopeChain, previousCallFrame, 0, argCount, asFunction(v));
+ callFrame->init(newCodeBlock, vPC + OPCODE_LENGTH(op_call_varargs), callDataScopeChain, previousCallFrame, argCount, asFunction(v));
codeBlock = newCodeBlock;
ASSERT(codeBlock == callFrame->codeBlock());
vPC = newCodeBlock->instructions().begin();
@@ -3747,20 +3774,15 @@ skip_id_custom_self:
if (callType == CallTypeHost) {
ScopeChainNode* scopeChain = callFrame->scopeChain();
CallFrame* newCallFrame = CallFrame::create(callFrame->registers() + registerOffset);
- newCallFrame->init(0, vPC + OPCODE_LENGTH(op_call_varargs), scopeChain, callFrame, 0, argCount, 0);
+ newCallFrame->init(0, vPC + OPCODE_LENGTH(op_call_varargs), scopeChain, callFrame, argCount, asObject(v));
Register* thisRegister = newCallFrame->registers() - RegisterFile::CallFrameHeaderSize - argCount;
ArgList args(thisRegister + 1, argCount - 1);
- // FIXME: All host methods should be calling toThisObject, but this is not presently the case.
- JSValue thisValue = thisRegister->jsValue();
- if (thisValue == jsNull())
- thisValue = callFrame->globalThisValue();
-
JSValue returnValue;
{
SamplingTool::HostCallRecord callRecord(m_sampler.get());
- returnValue = callData.native.function(newCallFrame, asObject(v), thisValue, args);
+ returnValue = callData.native.function(newCallFrame);
}
CHECK_FOR_EXCEPTION();
@@ -3883,7 +3905,7 @@ skip_id_custom_self:
vPC = callFrame->returnPC();
callFrame = callFrame->callerFrame();
-
+
if (callFrame->hasHostCallFrameFlag())
return returnValue;
@@ -3930,6 +3952,46 @@ skip_id_custom_self:
vPC += OPCODE_LENGTH(op_enter_with_activation);
NEXT_INSTRUCTION();
}
+ DEFINE_OPCODE(op_get_callee) {
+ /* op_get_callee callee(r)
+
+ Move callee into a register.
+ */
+
+ callFrame->r(vPC[1].u.operand) = JSValue(callFrame->callee());
+
+ vPC += OPCODE_LENGTH(op_get_callee);
+ NEXT_INSTRUCTION();
+ }
+ DEFINE_OPCODE(op_create_this) {
+ /* op_create_this this(r) proto(r)
+
+ Allocate an object as 'this', fr use in construction.
+
+ This opcode should only be used at the beginning of a code
+ block.
+ */
+
+ int thisRegister = vPC[1].u.operand;
+ int protoRegister = vPC[2].u.operand;
+
+ JSFunction* constructor = asFunction(callFrame->callee());
+#if !ASSERT_DISABLED
+ ConstructData constructData;
+ ASSERT(constructor->getConstructData(constructData) == ConstructTypeJS);
+#endif
+
+ Structure* structure;
+ JSValue proto = callFrame->r(protoRegister).jsValue();
+ if (proto.isObject())
+ structure = asObject(proto)->inheritorID();
+ else
+ structure = constructor->scope().node()->globalObject->emptyObjectStructure();
+ callFrame->r(thisRegister) = JSValue(new (&callFrame->globalData()) JSObject(structure));
+
+ vPC += OPCODE_LENGTH(op_create_this);
+ NEXT_INSTRUCTION();
+ }
DEFINE_OPCODE(op_convert_this) {
/* convert_this this(r)
@@ -4000,8 +4062,6 @@ skip_id_custom_self:
int func = vPC[1].u.operand;
int argCount = vPC[2].u.operand;
int registerOffset = vPC[3].u.operand;
- int proto = vPC[4].u.operand;
- int thisRegister = vPC[5].u.operand;
JSValue v = callFrame->r(func).jsValue();
@@ -4012,16 +4072,6 @@ skip_id_custom_self:
ScopeChainNode* callDataScopeChain = constructData.js.scopeChain;
CodeBlock* newCodeBlock = &constructData.js.functionExecutable->bytecodeForConstruct(callFrame, callDataScopeChain);
- Structure* structure;
- JSValue prototype = callFrame->r(proto).jsValue();
- if (prototype.isObject())
- structure = asObject(prototype)->inheritorID();
- else
- structure = callDataScopeChain->globalObject->emptyObjectStructure();
- JSObject* newObject = new (globalData) JSObject(structure);
-
- callFrame->r(thisRegister) = JSValue(newObject); // "this" value
-
CallFrame* previousCallFrame = callFrame;
callFrame = slideRegisterWindowForCall(newCodeBlock, registerFile, callFrame, registerOffset, argCount);
@@ -4031,7 +4081,7 @@ skip_id_custom_self:
goto vm_throw;
}
- callFrame->init(newCodeBlock, vPC + OPCODE_LENGTH(op_construct), callDataScopeChain, previousCallFrame, 0, argCount, asFunction(v));
+ callFrame->init(newCodeBlock, vPC + OPCODE_LENGTH(op_construct), callDataScopeChain, previousCallFrame, argCount, asFunction(v));
codeBlock = newCodeBlock;
vPC = newCodeBlock->instructions().begin();
@@ -4043,11 +4093,12 @@ skip_id_custom_self:
}
if (constructType == ConstructTypeHost) {
- ArgList args(callFrame->registers() + thisRegister + 1, argCount - 1);
-
ScopeChainNode* scopeChain = callFrame->scopeChain();
CallFrame* newCallFrame = CallFrame::create(callFrame->registers() + registerOffset);
- newCallFrame->init(0, vPC + OPCODE_LENGTH(op_construct), scopeChain, callFrame, 0, argCount, 0);
+ newCallFrame->init(0, vPC + OPCODE_LENGTH(op_construct), scopeChain, callFrame, argCount, 0);
+
+ Register* thisRegister = newCallFrame->registers() - RegisterFile::CallFrameHeaderSize - argCount;
+ ArgList args(thisRegister + 1, argCount - 1);
JSValue returnValue;
{
diff --git a/JavaScriptCore/interpreter/Interpreter.h b/JavaScriptCore/interpreter/Interpreter.h
index 3572617..13df468 100644
--- a/JavaScriptCore/interpreter/Interpreter.h
+++ b/JavaScriptCore/interpreter/Interpreter.h
@@ -95,7 +95,7 @@ namespace JSC {
bool isOpcode(Opcode);
JSValue execute(ProgramExecutable*, CallFrame*, ScopeChainNode*, JSObject* thisObj, JSValue* exception);
- JSValue executeCall(FunctionExecutable*, CallFrame*, JSFunction*, JSObject* thisObj, const ArgList& args, ScopeChainNode*, JSValue* exception);
+ JSValue executeCall(CallFrame*, JSObject* function, CallType, const CallData&, JSValue thisValue, const ArgList&, JSValue* exception);
JSValue executeConstruct(FunctionExecutable*, CallFrame*, JSFunction*, JSObject* thisObj, const ArgList& args, ScopeChainNode*, JSValue* exception);
JSValue execute(EvalExecutable* evalNode, CallFrame* exec, JSObject* thisObj, ScopeChainNode* scopeChain, JSValue* exception);
diff --git a/JavaScriptCore/interpreter/Register.h b/JavaScriptCore/interpreter/Register.h
index 723112e..38d1647 100644
--- a/JavaScriptCore/interpreter/Register.h
+++ b/JavaScriptCore/interpreter/Register.h
@@ -39,7 +39,7 @@ namespace JSC {
class CodeBlock;
class ExecState;
class JSActivation;
- class JSFunction;
+ class JSObject;
class JSPropertyNameIterator;
class ScopeChainNode;
@@ -58,7 +58,6 @@ namespace JSC {
Register& operator=(JSActivation*);
Register& operator=(CallFrame*);
Register& operator=(CodeBlock*);
- Register& operator=(JSFunction*);
Register& operator=(JSPropertyNameIterator*);
Register& operator=(ScopeChainNode*);
Register& operator=(Instruction*);
@@ -67,7 +66,7 @@ namespace JSC {
JSActivation* activation() const;
CallFrame* callFrame() const;
CodeBlock* codeBlock() const;
- JSFunction* function() const;
+ JSObject* function() const;
JSPropertyNameIterator* propertyNameIterator() const;
ScopeChainNode* scopeChain() const;
Instruction* vPC() const;
@@ -79,6 +78,13 @@ namespace JSC {
return r;
}
+ static Register withCallee(JSObject* callee)
+ {
+ Register r;
+ r.u.function = callee;
+ return r;
+ }
+
private:
union {
int32_t i;
@@ -87,7 +93,7 @@ namespace JSC {
JSActivation* activation;
CallFrame* callFrame;
CodeBlock* codeBlock;
- JSFunction* function;
+ JSObject* function;
JSPropertyNameIterator* propertyNameIterator;
ScopeChainNode* scopeChain;
Instruction* vPC;
@@ -143,12 +149,6 @@ namespace JSC {
return *this;
}
- ALWAYS_INLINE Register& Register::operator=(JSFunction* function)
- {
- u.function = function;
- return *this;
- }
-
ALWAYS_INLINE Register& Register::operator=(Instruction* vPC)
{
u.vPC = vPC;
@@ -187,7 +187,7 @@ namespace JSC {
return u.codeBlock;
}
- ALWAYS_INLINE JSFunction* Register::function() const
+ ALWAYS_INLINE JSObject* Register::function() const
{
return u.function;
}
diff --git a/JavaScriptCore/jit/JIT.cpp b/JavaScriptCore/jit/JIT.cpp
index eeffd5c..5d96847 100644
--- a/JavaScriptCore/jit/JIT.cpp
+++ b/JavaScriptCore/jit/JIT.cpp
@@ -221,6 +221,8 @@ void JIT::privateCompileMainPass()
DEFINE_OP(op_call_varargs)
DEFINE_OP(op_catch)
DEFINE_OP(op_construct)
+ DEFINE_OP(op_get_callee)
+ DEFINE_OP(op_create_this)
DEFINE_OP(op_convert_this)
DEFINE_OP(op_init_arguments)
DEFINE_OP(op_create_arguments)
@@ -454,17 +456,19 @@ void JIT::privateCompileSlowCases()
#endif
}
-JITCode JIT::privateCompile()
+JITCode JIT::privateCompile(CodePtr* functionEntryArityCheck)
{
+ // Could use a pop_m, but would need to offset the following instruction if so.
+ preserveReturnAddressAfterCall(regT2);
+ emitPutToCallFrameHeader(regT2, RegisterFile::ReturnPC);
+
+ Label beginLabel(this);
+
sampleCodeBlock(m_codeBlock);
#if ENABLE(OPCODE_SAMPLING)
sampleInstruction(m_codeBlock->instructions().begin());
#endif
- // Could use a pop_m, but would need to offset the following instruction if so.
- preserveReturnAddressAfterCall(regT2);
- emitPutToCallFrameHeader(regT2, RegisterFile::ReturnPC);
-
Jump registerFileCheck;
if (m_codeBlock->codeType() == FunctionCode) {
// In the case of a fast linked call, we do not set this up in the caller.
@@ -481,6 +485,8 @@ JITCode JIT::privateCompile()
privateCompileLinkPass();
privateCompileSlowCases();
+ Label arityCheck;
+ Call callArityCheck;
if (m_codeBlock->codeType() == FunctionCode) {
registerFileCheck.link(this);
m_bytecodeOffset = 0;
@@ -489,6 +495,15 @@ JITCode JIT::privateCompile()
m_bytecodeOffset = (unsigned)-1; // Reset this, in order to guard its use with ASSERTs.
#endif
jump(functionBody);
+
+ arityCheck = label();
+ preserveReturnAddressAfterCall(regT2);
+ emitPutToCallFrameHeader(regT2, RegisterFile::ReturnPC);
+ branch32(Equal, regT1, Imm32(m_codeBlock->m_numParameters)).linkTo(beginLabel, this);
+ restoreArgumentReference();
+ callArityCheck = call();
+ move(regT0, callFrameRegister);
+ jump(beginLabel);
}
ASSERT(m_jmpTable.isEmpty());
@@ -567,6 +582,11 @@ JITCode JIT::privateCompile()
info.callReturnLocation = m_codeBlock->structureStubInfo(m_methodCallCompilationInfo[i].propertyAccessIndex).callReturnLocation;
}
+ if (m_codeBlock->codeType() == FunctionCode && functionEntryArityCheck) {
+ patchBuffer.link(callArityCheck, FunctionPtr(m_codeBlock->m_isConstructor ? cti_op_construct_arityCheck : cti_op_call_arityCheck));
+ *functionEntryArityCheck = patchBuffer.locationOf(arityCheck);
+ }
+
return patchBuffer.finalizeCode();
}
@@ -600,7 +620,7 @@ void JIT::unlinkCallOrConstruct(CallLinkInfo* callLinkInfo)
#endif
}
-void JIT::linkCall(JSFunction* callee, CodeBlock* callerCodeBlock, CodeBlock* calleeCodeBlock, JITCode& code, CallLinkInfo* callLinkInfo, int callerArgCount, JSGlobalData* globalData)
+void JIT::linkCall(JSFunction* callee, CodeBlock* callerCodeBlock, CodeBlock* calleeCodeBlock, JIT::CodePtr code, CallLinkInfo* callLinkInfo, int callerArgCount, JSGlobalData* globalData)
{
RepatchBuffer repatchBuffer(callerCodeBlock);
@@ -613,14 +633,14 @@ void JIT::linkCall(JSFunction* callee, CodeBlock* callerCodeBlock, CodeBlock* ca
calleeCodeBlock->addCaller(callLinkInfo);
repatchBuffer.repatch(callLinkInfo->hotPathBegin, callee);
- repatchBuffer.relink(callLinkInfo->hotPathOther, code.addressForCall());
+ repatchBuffer.relink(callLinkInfo->hotPathOther, code);
}
// patch the call so we do not continue to try to link.
repatchBuffer.relink(callLinkInfo->callReturnLocation, globalData->jitStubs.ctiVirtualCall());
}
-void JIT::linkConstruct(JSFunction* callee, CodeBlock* callerCodeBlock, CodeBlock* calleeCodeBlock, JITCode& code, CallLinkInfo* callLinkInfo, int callerArgCount, JSGlobalData* globalData)
+void JIT::linkConstruct(JSFunction* callee, CodeBlock* callerCodeBlock, CodeBlock* calleeCodeBlock, JIT::CodePtr code, CallLinkInfo* callLinkInfo, int callerArgCount, JSGlobalData* globalData)
{
RepatchBuffer repatchBuffer(callerCodeBlock);
@@ -633,7 +653,7 @@ void JIT::linkConstruct(JSFunction* callee, CodeBlock* callerCodeBlock, CodeBloc
calleeCodeBlock->addCaller(callLinkInfo);
repatchBuffer.repatch(callLinkInfo->hotPathBegin, callee);
- repatchBuffer.relink(callLinkInfo->hotPathOther, code.addressForCall());
+ repatchBuffer.relink(callLinkInfo->hotPathOther, code);
}
// patch the call so we do not continue to try to link.
diff --git a/JavaScriptCore/jit/JIT.h b/JavaScriptCore/jit/JIT.h
index 928c80b..529a1d6 100644
--- a/JavaScriptCore/jit/JIT.h
+++ b/JavaScriptCore/jit/JIT.h
@@ -178,9 +178,9 @@ namespace JSC {
static const int patchGetByIdDefaultOffset = 256;
public:
- static JITCode compile(JSGlobalData* globalData, CodeBlock* codeBlock)
+ static JITCode compile(JSGlobalData* globalData, CodeBlock* codeBlock, CodePtr* functionEntryArityCheck = 0)
{
- return JIT(globalData, codeBlock).privateCompile();
+ return JIT(globalData, codeBlock).privateCompile(functionEntryArityCheck);
}
static void compileGetByIdProto(JSGlobalData* globalData, CallFrame* callFrame, CodeBlock* codeBlock, StructureStubInfo* stubInfo, Structure* structure, Structure* prototypeStructure, const Identifier& ident, const PropertySlot& slot, size_t cachedOffset, ReturnAddressPtr returnAddress)
@@ -239,8 +239,8 @@ namespace JSC {
return jit.privateCompilePatchGetArrayLength(returnAddress);
}
- static void linkCall(JSFunction* callee, CodeBlock* callerCodeBlock, CodeBlock* calleeCodeBlock, JITCode&, CallLinkInfo*, int callerArgCount, JSGlobalData*);
- static void linkConstruct(JSFunction* callee, CodeBlock* callerCodeBlock, CodeBlock* calleeCodeBlock, JITCode&, CallLinkInfo*, int callerArgCount, JSGlobalData*);
+ static void linkCall(JSFunction* callee, CodeBlock* callerCodeBlock, CodeBlock* calleeCodeBlock, CodePtr, CallLinkInfo*, int callerArgCount, JSGlobalData*);
+ static void linkConstruct(JSFunction* callee, CodeBlock* callerCodeBlock, CodeBlock* calleeCodeBlock, CodePtr, CallLinkInfo*, int callerArgCount, JSGlobalData*);
static void unlinkCallOrConstruct(CallLinkInfo*);
private:
@@ -260,7 +260,7 @@ namespace JSC {
void privateCompileMainPass();
void privateCompileLinkPass();
void privateCompileSlowCases();
- JITCode privateCompile();
+ JITCode privateCompile(CodePtr* functionEntryArityCheck);
void privateCompileGetByIdProto(StructureStubInfo*, Structure*, Structure* prototypeStructure, const Identifier&, const PropertySlot&, size_t cachedOffset, ReturnAddressPtr returnAddress, CallFrame* callFrame);
void privateCompileGetByIdSelfList(StructureStubInfo*, PolymorphicAccessStructureList*, int, Structure*, const Identifier&, const PropertySlot&, size_t cachedOffset);
void privateCompileGetByIdProtoList(StructureStubInfo*, PolymorphicAccessStructureList*, int, Structure*, Structure* prototypeStructure, const Identifier&, const PropertySlot&, size_t cachedOffset, CallFrame* callFrame);
@@ -269,6 +269,7 @@ namespace JSC {
void privateCompilePutByIdTransition(StructureStubInfo*, Structure*, Structure*, size_t cachedOffset, StructureChain*, ReturnAddressPtr returnAddress);
void privateCompileCTIMachineTrampolines(RefPtr<ExecutablePool>* executablePool, JSGlobalData* data, TrampolineStructure *trampolines);
+ Label privateCompileCTINativeCall(JSGlobalData*, bool isConstruct = false);
CodePtr privateCompileCTINativeCall(PassRefPtr<ExecutablePool> executablePool, JSGlobalData* data, NativeFunction func);
void privateCompilePatchGetArrayLength(ReturnAddressPtr returnAddress);
@@ -280,11 +281,8 @@ namespace JSC {
void compileOpCall(OpcodeID, Instruction* instruction, unsigned callLinkInfoIndex);
void compileOpCallVarargs(Instruction* instruction);
void compileOpCallInitializeCallFrame();
- void compileOpCallSetupArgs(Instruction*);
- void compileOpCallVarargsSetupArgs(Instruction*);
void compileOpCallSlowCase(Instruction* instruction, Vector<SlowCaseEntry>::iterator& iter, unsigned callLinkInfoIndex, OpcodeID opcodeID);
void compileOpCallVarargsSlowCase(Instruction* instruction, Vector<SlowCaseEntry>::iterator& iter);
- void compileOpConstructSetupArgs(Instruction*);
enum CompileOpStrictEqType { OpStrictEq, OpNStrictEq };
void compileOpStrictEq(Instruction* instruction, CompileOpStrictEqType type);
@@ -654,6 +652,8 @@ namespace JSC {
void emit_op_call_put_result(Instruction*);
void emit_op_catch(Instruction*);
void emit_op_construct(Instruction*);
+ void emit_op_get_callee(Instruction*);
+ void emit_op_create_this(Instruction*);
void emit_op_convert_this(Instruction*);
void emit_op_create_arguments(Instruction*);
void emit_op_debug(Instruction*);
@@ -803,16 +803,7 @@ namespace JSC {
void emitRightShift(Instruction*, bool isUnsigned);
void emitRightShiftSlowCase(Instruction*, Vector<SlowCaseEntry>::iterator&, bool isUnsigned);
- /* These functions are deprecated: Please use JITStubCall instead. */
- void emitPutJITStubArg(RegisterID src, unsigned argumentNumber);
-#if USE(JSVALUE32_64)
- void emitPutJITStubArg(RegisterID tag, RegisterID payload, unsigned argumentNumber);
- void emitPutJITStubArgFromVirtualRegister(unsigned src, unsigned argumentNumber, RegisterID scratch1, RegisterID scratch2);
-#else
- void emitPutJITStubArgFromVirtualRegister(unsigned src, unsigned argumentNumber, RegisterID scratch);
-#endif
- void emitPutJITStubArgConstant(unsigned value, unsigned argumentNumber);
- void emitPutJITStubArgConstant(void* value, unsigned argumentNumber);
+ /* This function is deprecated. */
void emitGetJITStubArg(unsigned argumentNumber, RegisterID dst);
void emitInitRegister(unsigned dst);
diff --git a/JavaScriptCore/jit/JITCall.cpp b/JavaScriptCore/jit/JITCall.cpp
index c0de9d1..5c2b308 100644
--- a/JavaScriptCore/jit/JITCall.cpp
+++ b/JavaScriptCore/jit/JITCall.cpp
@@ -49,48 +49,9 @@ namespace JSC {
void JIT::compileOpCallInitializeCallFrame()
{
store32(regT1, Address(callFrameRegister, RegisterFile::ArgumentCount * static_cast<int>(sizeof(Register))));
-
- loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_scopeChain) + OBJECT_OFFSETOF(ScopeChain, m_node)), regT1); // newScopeChain
-
+ loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_scopeChain) + OBJECT_OFFSETOF(ScopeChain, m_node)), regT3); // newScopeChain
storePtr(regT0, Address(callFrameRegister, RegisterFile::Callee * static_cast<int>(sizeof(Register))));
- storePtr(regT1, Address(callFrameRegister, RegisterFile::ScopeChain * static_cast<int>(sizeof(Register))));
-}
-
-void JIT::compileOpCallSetupArgs(Instruction* instruction)
-{
- int argCount = instruction[2].u.operand;
- int registerOffset = instruction[3].u.operand;
-
- // ecx holds func
- emitPutJITStubArg(regT0, 0);
- emitPutJITStubArgConstant(argCount, 2);
- emitPutJITStubArgConstant(registerOffset, 1);
-}
-
-void JIT::compileOpCallVarargsSetupArgs(Instruction* instruction)
-{
- int registerOffset = instruction[3].u.operand;
-
- // ecx holds func
- emitPutJITStubArg(regT0, 0);
- emitPutJITStubArg(regT1, 2);
- addPtr(Imm32(registerOffset), regT1, regT2);
- emitPutJITStubArg(regT2, 1);
-}
-
-void JIT::compileOpConstructSetupArgs(Instruction* instruction)
-{
- int argCount = instruction[2].u.operand;
- int registerOffset = instruction[3].u.operand;
- int proto = instruction[4].u.operand;
- int thisRegister = instruction[5].u.operand;
-
- // ecx holds func
- emitPutJITStubArg(regT0, 0);
- emitPutJITStubArgConstant(registerOffset, 1);
- emitPutJITStubArgConstant(argCount, 2);
- emitPutJITStubArgFromVirtualRegister(proto, 3, regT2);
- emitPutJITStubArgConstant(thisRegister, 4);
+ storePtr(regT3, Address(callFrameRegister, RegisterFile::ScopeChain * static_cast<int>(sizeof(Register))));
}
void JIT::emit_op_call_put_result(Instruction* instruction)
@@ -103,10 +64,11 @@ void JIT::compileOpCallVarargs(Instruction* instruction)
{
int callee = instruction[1].u.operand;
int argCountRegister = instruction[2].u.operand;
+ int registerOffset = instruction[3].u.operand;
emitGetVirtualRegister(argCountRegister, regT1);
emitGetVirtualRegister(callee, regT0);
- compileOpCallVarargsSetupArgs(instruction);
+ addPtr(Imm32(registerOffset), regT1, regT2);
// Check for JSFunctions.
emitJumpSlowCaseIfNotJSCell(regT0);
@@ -128,7 +90,11 @@ void JIT::compileOpCallVarargsSlowCase(Instruction*, Vector<SlowCaseEntry>::iter
{
linkSlowCase(iter);
linkSlowCase(iter);
+
JITStubCall stubCall(this, cti_op_call_NotJSFunction);
+ stubCall.addArgument(regT0);
+ stubCall.addArgument(regT2);
+ stubCall.addArgument(regT1);
stubCall.call();
sampleCodeBlock(m_codeBlock);
@@ -156,22 +122,11 @@ void JIT::compileOpCall(OpcodeID opcodeID, Instruction* instruction, unsigned)
}
emitGetVirtualRegister(callee, regT0);
- // The arguments have been set up on the hot path for op_call_eval
- if (opcodeID == op_call)
- compileOpCallSetupArgs(instruction);
- else if (opcodeID == op_construct)
- compileOpConstructSetupArgs(instruction);
// Check for JSFunctions.
emitJumpSlowCaseIfNotJSCell(regT0);
addSlowCase(branchPtr(NotEqual, Address(regT0), ImmPtr(m_globalData->jsFunctionVPtr)));
- // First, in the case of a construct, allocate the new object.
- if (opcodeID == op_construct) {
- JITStubCall(this, cti_op_construct_JSConstruct).call(registerOffset - RegisterFile::CallFrameHeaderSize - argCount);
- emitGetVirtualRegister(callee, regT0);
- }
-
// Speculatively roll the callframe, assuming argCount will match the arity.
storePtr(callFrameRegister, Address(callFrameRegister, (RegisterFile::CallerFrame + registerOffset) * static_cast<int>(sizeof(Register))));
addPtr(Imm32(registerOffset * static_cast<int>(sizeof(Register))), callFrameRegister);
@@ -187,9 +142,16 @@ void JIT::compileOpCall(OpcodeID opcodeID, Instruction* instruction, unsigned)
void JIT::compileOpCallSlowCase(Instruction* instruction, Vector<SlowCaseEntry>::iterator& iter, unsigned, OpcodeID opcodeID)
{
+ int argCount = instruction[2].u.operand;
+ int registerOffset = instruction[3].u.operand;
+
linkSlowCase(iter);
linkSlowCase(iter);
+
JITStubCall stubCall(this, opcodeID == op_construct ? cti_op_construct_NotJSConstruct : cti_op_call_NotJSFunction);
+ stubCall.addArgument(regT0);
+ stubCall.addArgument(JIT::Imm32(registerOffset));
+ stubCall.addArgument(JIT::Imm32(argCount));
stubCall.call();
sampleCodeBlock(m_codeBlock);
@@ -233,18 +195,6 @@ void JIT::compileOpCall(OpcodeID opcodeID, Instruction* instruction, unsigned ca
// The following is the fast case, only used whan a callee can be linked.
- // In the case of OpConstruct, call out to a cti_ function to create the new object.
- if (opcodeID == op_construct) {
- int proto = instruction[4].u.operand;
- int thisRegister = instruction[5].u.operand;
-
- emitPutJITStubArg(regT0, 0);
- emitPutJITStubArgFromVirtualRegister(proto, 3, regT2);
- JITStubCall stubCall(this, cti_op_construct_JSConstruct);
- stubCall.call(thisRegister);
- emitGetVirtualRegister(callee, regT0);
- }
-
// Fast version of stack frame initialization, directly relative to edi.
// Note that this omits to set up RegisterFile::CodeBlock, which is set in the callee
@@ -267,50 +217,36 @@ void JIT::compileOpCall(OpcodeID opcodeID, Instruction* instruction, unsigned ca
void JIT::compileOpCallSlowCase(Instruction* instruction, Vector<SlowCaseEntry>::iterator& iter, unsigned callLinkInfoIndex, OpcodeID opcodeID)
{
- int callee = instruction[1].u.operand;
int argCount = instruction[2].u.operand;
int registerOffset = instruction[3].u.operand;
linkSlowCase(iter);
- // The arguments have been set up on the hot path for op_call_eval
- if (opcodeID == op_call)
- compileOpCallSetupArgs(instruction);
- else if (opcodeID == op_construct)
- compileOpConstructSetupArgs(instruction);
-
// Fast check for JS function.
Jump callLinkFailNotObject = emitJumpIfNotJSCell(regT0);
Jump callLinkFailNotJSFunction = branchPtr(NotEqual, Address(regT0), ImmPtr(m_globalData->jsFunctionVPtr));
- // First, in the case of a construct, allocate the new object.
- if (opcodeID == op_construct) {
- JITStubCall(this, cti_op_construct_JSConstruct).call(registerOffset - RegisterFile::CallFrameHeaderSize - argCount);
- emitGetVirtualRegister(callee, regT0);
- }
-
// Speculatively roll the callframe, assuming argCount will match the arity.
storePtr(callFrameRegister, Address(callFrameRegister, (RegisterFile::CallerFrame + registerOffset) * static_cast<int>(sizeof(Register))));
addPtr(Imm32(registerOffset * static_cast<int>(sizeof(Register))), callFrameRegister);
move(Imm32(argCount), regT1);
- move(regT0, regT2);
-
m_callStructureStubCompilationInfo[callLinkInfoIndex].callReturnLocation = emitNakedCall(opcodeID == op_construct ? m_globalData->jitStubs.ctiVirtualConstructLink() : m_globalData->jitStubs.ctiVirtualCallLink());
- // If not, we need an extra case in the if below!
- ASSERT(OPCODE_LENGTH(op_call) == OPCODE_LENGTH(op_call_eval));
-
// Done! - return back to the hot path.
- if (opcodeID == op_construct)
- emitJumpSlowToHot(jump(), OPCODE_LENGTH(op_construct));
- else
- emitJumpSlowToHot(jump(), OPCODE_LENGTH(op_call));
+ ASSERT(OPCODE_LENGTH(op_call) == OPCODE_LENGTH(op_call_eval));
+ ASSERT(OPCODE_LENGTH(op_call) == OPCODE_LENGTH(op_construct));
+ emitJumpSlowToHot(jump(), OPCODE_LENGTH(op_call));
// This handles host functions
callLinkFailNotObject.link(this);
callLinkFailNotJSFunction.link(this);
- JITStubCall(this, opcodeID == op_construct ? cti_op_construct_NotJSConstruct : cti_op_call_NotJSFunction).call();
+
+ JITStubCall stubCall(this, opcodeID == op_construct ? cti_op_construct_NotJSConstruct : cti_op_call_NotJSFunction);
+ stubCall.addArgument(regT0);
+ stubCall.addArgument(JIT::Imm32(registerOffset));
+ stubCall.addArgument(JIT::Imm32(argCount));
+ stubCall.call();
sampleCodeBlock(m_codeBlock);
}
diff --git a/JavaScriptCore/jit/JITCall32_64.cpp b/JavaScriptCore/jit/JITCall32_64.cpp
index 9b5451a..5f551cc 100644
--- a/JavaScriptCore/jit/JITCall32_64.cpp
+++ b/JavaScriptCore/jit/JITCall32_64.cpp
@@ -50,42 +50,9 @@ void JIT::compileOpCallInitializeCallFrame()
{
// regT0 holds callee, regT1 holds argCount
store32(regT1, Address(callFrameRegister, RegisterFile::ArgumentCount * static_cast<int>(sizeof(Register))));
-
- loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_scopeChain) + OBJECT_OFFSETOF(ScopeChain, m_node)), regT1); // scopeChain
-
+ loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_scopeChain) + OBJECT_OFFSETOF(ScopeChain, m_node)), regT3); // scopeChain
storePtr(regT0, Address(callFrameRegister, RegisterFile::Callee * static_cast<int>(sizeof(Register)))); // callee
- storePtr(regT1, Address(callFrameRegister, RegisterFile::ScopeChain * static_cast<int>(sizeof(Register)))); // scopeChain
-}
-
-void JIT::compileOpCallSetupArgs(Instruction* instruction)
-{
- int argCount = instruction[2].u.operand;
- int registerOffset = instruction[3].u.operand;
-
- emitPutJITStubArg(regT1, regT0, 0);
- emitPutJITStubArgConstant(registerOffset, 1);
- emitPutJITStubArgConstant(argCount, 2);
-}
-
-void JIT::compileOpConstructSetupArgs(Instruction* instruction)
-{
- int argCount = instruction[2].u.operand;
- int registerOffset = instruction[3].u.operand;
- int proto = instruction[4].u.operand;
- int thisRegister = instruction[5].u.operand;
-
- emitPutJITStubArg(regT1, regT0, 0);
- emitPutJITStubArgConstant(registerOffset, 1);
- emitPutJITStubArgConstant(argCount, 2);
- emitPutJITStubArgFromVirtualRegister(proto, 3, regT2, regT3);
- emitPutJITStubArgConstant(thisRegister, 4);
-}
-
-void JIT::compileOpCallVarargsSetupArgs(Instruction*)
-{
- emitPutJITStubArg(regT1, regT0, 0);
- emitPutJITStubArg(regT3, 1); // registerOffset
- emitPutJITStubArg(regT2, 2); // argCount
+ storePtr(regT3, Address(callFrameRegister, RegisterFile::ScopeChain * static_cast<int>(sizeof(Register)))); // scopeChain
}
void JIT::emit_op_call_put_result(Instruction* instruction)
@@ -104,8 +71,6 @@ void JIT::compileOpCallVarargs(Instruction* instruction)
emitLoadPayload(argCountRegister, regT2); // argCount
addPtr(Imm32(registerOffset), regT2, regT3); // registerOffset
- compileOpCallVarargsSetupArgs(instruction);
-
emitJumpSlowCaseIfNotJSCell(callee, regT1);
addSlowCase(branchPtr(NotEqual, Address(regT0), ImmPtr(m_globalData->jsFunctionVPtr)));
@@ -130,6 +95,9 @@ void JIT::compileOpCallVarargsSlowCase(Instruction* instruction, Vector<SlowCase
linkSlowCase(iter);
JITStubCall stubCall(this, cti_op_call_NotJSFunction);
+ stubCall.addArgument(regT1, regT0);
+ stubCall.addArgument(regT3);
+ stubCall.addArgument(regT2);
stubCall.call();
sampleCodeBlock(m_codeBlock);
@@ -256,20 +224,9 @@ void JIT::compileOpCall(OpcodeID opcodeID, Instruction* instruction, unsigned)
emitLoad(callee, regT1, regT0);
- if (opcodeID == op_call)
- compileOpCallSetupArgs(instruction);
- else if (opcodeID == op_construct)
- compileOpConstructSetupArgs(instruction);
-
emitJumpSlowCaseIfNotJSCell(callee, regT1);
addSlowCase(branchPtr(NotEqual, Address(regT0), ImmPtr(m_globalData->jsFunctionVPtr)));
- // First, in the case of a construct, allocate the new object.
- if (opcodeID == op_construct) {
- JITStubCall(this, cti_op_construct_JSConstruct).call(registerOffset - RegisterFile::CallFrameHeaderSize - argCount);
- emitLoad(callee, regT1, regT0);
- }
-
// Speculatively roll the callframe, assuming argCount will match the arity.
storePtr(callFrameRegister, Address(callFrameRegister, (RegisterFile::CallerFrame + registerOffset) * static_cast<int>(sizeof(Register))));
addPtr(Imm32(registerOffset * static_cast<int>(sizeof(Register))), callFrameRegister);
@@ -286,11 +243,16 @@ void JIT::compileOpCall(OpcodeID opcodeID, Instruction* instruction, unsigned)
void JIT::compileOpCallSlowCase(Instruction* instruction, Vector<SlowCaseEntry>::iterator& iter, unsigned, OpcodeID opcodeID)
{
int callee = instruction[1].u.operand;
+ int argCount = instruction[2].u.operand;
+ int registerOffset = instruction[3].u.operand;
linkSlowCaseIfNotJSCell(iter, callee);
linkSlowCase(iter);
JITStubCall stubCall(this, opcodeID == op_construct ? cti_op_construct_NotJSConstruct : cti_op_call_NotJSFunction);
+ stubCall.addArgument(callee);
+ stubCall.addArgument(JIT::Imm32(registerOffset));
+ stubCall.addArgument(JIT::Imm32(argCount));
stubCall.call();
sampleCodeBlock(m_codeBlock);
@@ -334,21 +296,6 @@ void JIT::compileOpCall(OpcodeID opcodeID, Instruction* instruction, unsigned ca
// The following is the fast case, only used whan a callee can be linked.
- // In the case of OpConstruct, call out to a cti_ function to create the new object.
- if (opcodeID == op_construct) {
- int proto = instruction[4].u.operand;
- int thisRegister = instruction[5].u.operand;
-
- JITStubCall stubCall(this, cti_op_construct_JSConstruct);
- stubCall.addArgument(regT1, regT0);
- stubCall.addArgument(Imm32(0)); // FIXME: Remove this unused JITStub argument.
- stubCall.addArgument(Imm32(0)); // FIXME: Remove this unused JITStub argument.
- stubCall.addArgument(proto);
- stubCall.call(thisRegister);
-
- emitLoad(callee, regT1, regT0);
- }
-
// Fast version of stack frame initialization, directly relative to edi.
// Note that this omits to set up RegisterFile::CodeBlock, which is set in the callee
loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_scopeChain) + OBJECT_OFFSETOF(ScopeChain, m_node)), regT2);
@@ -377,22 +324,10 @@ void JIT::compileOpCallSlowCase(Instruction* instruction, Vector<SlowCaseEntry>:
linkSlowCase(iter);
linkSlowCase(iter);
- // The arguments have been set up on the hot path for op_call_eval
- if (opcodeID == op_call)
- compileOpCallSetupArgs(instruction);
- else if (opcodeID == op_construct)
- compileOpConstructSetupArgs(instruction);
-
// Fast check for JS function.
Jump callLinkFailNotObject = branch32(NotEqual, regT1, Imm32(JSValue::CellTag));
Jump callLinkFailNotJSFunction = branchPtr(NotEqual, Address(regT0), ImmPtr(m_globalData->jsFunctionVPtr));
- // First, in the case of a construct, allocate the new object.
- if (opcodeID == op_construct) {
- JITStubCall(this, cti_op_construct_JSConstruct).call(registerOffset - RegisterFile::CallFrameHeaderSize - argCount);
- emitLoad(callee, regT1, regT0);
- }
-
// Speculatively roll the callframe, assuming argCount will match the arity.
storePtr(callFrameRegister, Address(callFrameRegister, (RegisterFile::CallerFrame + registerOffset) * static_cast<int>(sizeof(Register))));
addPtr(Imm32(registerOffset * static_cast<int>(sizeof(Register))), callFrameRegister);
@@ -400,19 +335,20 @@ void JIT::compileOpCallSlowCase(Instruction* instruction, Vector<SlowCaseEntry>:
m_callStructureStubCompilationInfo[callLinkInfoIndex].callReturnLocation = emitNakedCall(opcodeID == op_construct ? m_globalData->jitStubs.ctiVirtualConstructLink() : m_globalData->jitStubs.ctiVirtualCallLink());
- // If not, we need an extra case in the if below!
- ASSERT(OPCODE_LENGTH(op_call) == OPCODE_LENGTH(op_call_eval));
-
// Done! - return back to the hot path.
- if (opcodeID == op_construct)
- emitJumpSlowToHot(jump(), OPCODE_LENGTH(op_construct));
- else
- emitJumpSlowToHot(jump(), OPCODE_LENGTH(op_call));
+ ASSERT(OPCODE_LENGTH(op_call) == OPCODE_LENGTH(op_call_eval));
+ ASSERT(OPCODE_LENGTH(op_call) == OPCODE_LENGTH(op_construct));
+ emitJumpSlowToHot(jump(), OPCODE_LENGTH(op_call));
// This handles host functions
callLinkFailNotObject.link(this);
callLinkFailNotJSFunction.link(this);
- JITStubCall(this, opcodeID == op_construct ? cti_op_construct_NotJSConstruct : cti_op_call_NotJSFunction).call();
+
+ JITStubCall stubCall(this, opcodeID == op_construct ? cti_op_construct_NotJSConstruct : cti_op_call_NotJSFunction);
+ stubCall.addArgument(callee);
+ stubCall.addArgument(JIT::Imm32(registerOffset));
+ stubCall.addArgument(JIT::Imm32(argCount));
+ stubCall.call();
sampleCodeBlock(m_codeBlock);
}
diff --git a/JavaScriptCore/jit/JITInlineMethods.h b/JavaScriptCore/jit/JITInlineMethods.h
index 89faa00..cba290b 100644
--- a/JavaScriptCore/jit/JITInlineMethods.h
+++ b/JavaScriptCore/jit/JITInlineMethods.h
@@ -33,31 +33,6 @@ namespace JSC {
/* Deprecated: Please use JITStubCall instead. */
-// puts an arg onto the stack, as an arg to a context threaded function.
-ALWAYS_INLINE void JIT::emitPutJITStubArg(RegisterID src, unsigned argumentNumber)
-{
- unsigned argumentStackOffset = (argumentNumber * (sizeof(JSValue) / sizeof(void*))) + JITSTACKFRAME_ARGS_INDEX;
- poke(src, argumentStackOffset);
-}
-
-/* Deprecated: Please use JITStubCall instead. */
-
-ALWAYS_INLINE void JIT::emitPutJITStubArgConstant(unsigned value, unsigned argumentNumber)
-{
- unsigned argumentStackOffset = (argumentNumber * (sizeof(JSValue) / sizeof(void*))) + JITSTACKFRAME_ARGS_INDEX;
- poke(Imm32(value), argumentStackOffset);
-}
-
-/* Deprecated: Please use JITStubCall instead. */
-
-ALWAYS_INLINE void JIT::emitPutJITStubArgConstant(void* value, unsigned argumentNumber)
-{
- unsigned argumentStackOffset = (argumentNumber * (sizeof(JSValue) / sizeof(void*))) + JITSTACKFRAME_ARGS_INDEX;
- poke(ImmPtr(value), argumentStackOffset);
-}
-
-/* Deprecated: Please use JITStubCall instead. */
-
ALWAYS_INLINE void JIT::emitGetJITStubArg(unsigned argumentNumber, RegisterID dst)
{
unsigned argumentStackOffset = (argumentNumber * (sizeof(JSValue) / sizeof(void*))) + JITSTACKFRAME_ARGS_INDEX;
@@ -605,31 +580,6 @@ ALWAYS_INLINE bool JIT::getOperandConstantImmediateInt(unsigned op1, unsigned op
return false;
}
-/* Deprecated: Please use JITStubCall instead. */
-
-ALWAYS_INLINE void JIT::emitPutJITStubArg(RegisterID tag, RegisterID payload, unsigned argumentNumber)
-{
- unsigned argumentStackOffset = (argumentNumber * (sizeof(JSValue) / sizeof(void*))) + JITSTACKFRAME_ARGS_INDEX;
- poke(payload, argumentStackOffset);
- poke(tag, argumentStackOffset + 1);
-}
-
-/* Deprecated: Please use JITStubCall instead. */
-
-ALWAYS_INLINE void JIT::emitPutJITStubArgFromVirtualRegister(unsigned src, unsigned argumentNumber, RegisterID scratch1, RegisterID scratch2)
-{
- unsigned argumentStackOffset = (argumentNumber * (sizeof(JSValue) / sizeof(void*))) + JITSTACKFRAME_ARGS_INDEX;
- if (m_codeBlock->isConstantRegisterIndex(src)) {
- JSValue constant = m_codeBlock->getConstant(src);
- poke(Imm32(constant.payload()), argumentStackOffset);
- poke(Imm32(constant.tag()), argumentStackOffset + 1);
- } else {
- emitLoad(src, scratch1, scratch2);
- poke(scratch2, argumentStackOffset);
- poke(scratch1, argumentStackOffset + 1);
- }
-}
-
#else // USE(JSVALUE32_64)
ALWAYS_INLINE void JIT::killLastResultRegister()
@@ -848,23 +798,6 @@ ALWAYS_INLINE void JIT::emitTagAsBoolImmediate(RegisterID reg)
or32(Imm32(static_cast<int32_t>(JSImmediate::FullTagTypeBool)), reg);
}
-/* Deprecated: Please use JITStubCall instead. */
-
-// get arg puts an arg from the SF register array onto the stack, as an arg to a context threaded function.
-ALWAYS_INLINE void JIT::emitPutJITStubArgFromVirtualRegister(unsigned src, unsigned argumentNumber, RegisterID scratch)
-{
- unsigned argumentStackOffset = (argumentNumber * (sizeof(JSValue) / sizeof(void*))) + JITSTACKFRAME_ARGS_INDEX;
- if (m_codeBlock->isConstantRegisterIndex(src)) {
- JSValue value = m_codeBlock->getConstant(src);
- poke(ImmPtr(JSValue::encode(value)), argumentStackOffset);
- } else {
- loadPtr(Address(callFrameRegister, src * sizeof(Register)), scratch);
- poke(scratch, argumentStackOffset);
- }
-
- killLastResultRegister();
-}
-
#endif // USE(JSVALUE32_64)
} // namespace JSC
diff --git a/JavaScriptCore/jit/JITOpcodes.cpp b/JavaScriptCore/jit/JITOpcodes.cpp
index f8be135..64e1f3c 100644
--- a/JavaScriptCore/jit/JITOpcodes.cpp
+++ b/JavaScriptCore/jit/JITOpcodes.cpp
@@ -74,404 +74,135 @@ void JIT::privateCompileCTIMachineTrampolines(RefPtr<ExecutablePool>* executable
// VirtualCallLink Trampoline
// regT0 holds callee, regT1 holds argCount. regT2 will hold the FunctionExecutable.
Label virtualCallLinkBegin = align();
- loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2);
-
- Jump isNativeFunc1 = branch32(Equal, Address(regT2, OBJECT_OFFSETOF(FunctionExecutable, m_numParametersForCall)), Imm32(0));
-
- Jump hasCodeBlock1 = branch32(GreaterThan, Address(regT2, OBJECT_OFFSETOF(FunctionExecutable, m_numParametersForCall)), Imm32(0));
- preserveReturnAddressAfterCall(regT3);
- restoreArgumentReference();
- Call callJSFunction1 = call();
- loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2);
- emitGetJITStubArg(2, regT1); // argCount
- restoreReturnAddressBeforeReturn(regT3);
- hasCodeBlock1.link(this);
-
- // Check argCount matches callee arity.
- Jump arityCheckOkay1 = branch32(Equal, Address(regT2, OBJECT_OFFSETOF(FunctionExecutable, m_numParametersForCall)), regT1);
- preserveReturnAddressAfterCall(regT3);
- emitPutJITStubArg(regT3, 1); // return address
- restoreArgumentReference();
- Call callArityCheck1 = call();
- move(regT1, callFrameRegister);
- emitGetJITStubArg(2, regT1); // argCount
- restoreReturnAddressBeforeReturn(regT3);
- arityCheckOkay1.link(this);
-
- isNativeFunc1.link(this);
-
compileOpCallInitializeCallFrame();
preserveReturnAddressAfterCall(regT3);
- emitPutJITStubArg(regT3, 1); // return address
+ emitPutToCallFrameHeader(regT3, RegisterFile::ReturnPC);
restoreArgumentReference();
- Call callLazyLinkCall1 = call();
+ Call callLazyLinkCall = call();
restoreReturnAddressBeforeReturn(regT3);
+ emitGetFromCallFrameHeader32(RegisterFile::ArgumentCount, regT1);
jump(regT0);
// VirtualConstructLink Trampoline
// regT0 holds callee, regT1 holds argCount. regT2 will hold the FunctionExecutable.
Label virtualConstructLinkBegin = align();
- loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2);
-
- Jump isNativeFunc2 = branch32(Equal, Address(regT2, OBJECT_OFFSETOF(FunctionExecutable, m_numParametersForConstruct)), Imm32(0));
-
- Jump hasCodeBlock2 = branch32(GreaterThan, Address(regT2, OBJECT_OFFSETOF(FunctionExecutable, m_numParametersForConstruct)), Imm32(0));
- preserveReturnAddressAfterCall(regT3);
- restoreArgumentReference();
- Call callJSFunction2 = call();
- loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2);
- emitGetJITStubArg(2, regT1); // argCount
- restoreReturnAddressBeforeReturn(regT3);
- hasCodeBlock2.link(this);
-
- // Check argCount matches callee arity.
- Jump arityCheckOkay2 = branch32(Equal, Address(regT2, OBJECT_OFFSETOF(FunctionExecutable, m_numParametersForConstruct)), regT1);
- preserveReturnAddressAfterCall(regT3);
- emitPutJITStubArg(regT3, 1); // return address
- restoreArgumentReference();
- Call callArityCheck2 = call();
- move(regT1, callFrameRegister);
- emitGetJITStubArg(2, regT1); // argCount
- restoreReturnAddressBeforeReturn(regT3);
- arityCheckOkay2.link(this);
-
- isNativeFunc2.link(this);
-
compileOpCallInitializeCallFrame();
preserveReturnAddressAfterCall(regT3);
- emitPutJITStubArg(regT3, 1); // return address
+ emitPutToCallFrameHeader(regT3, RegisterFile::ReturnPC);
restoreArgumentReference();
- Call callLazyLinkCall2 = call();
+ Call callLazyLinkConstruct = call();
restoreReturnAddressBeforeReturn(regT3);
+ emitGetFromCallFrameHeader32(RegisterFile::ArgumentCount, regT1);
jump(regT0);
// VirtualCall Trampoline
// regT0 holds callee, regT1 holds argCount. regT2 will hold the FunctionExecutable.
Label virtualCallBegin = align();
- loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2);
+ compileOpCallInitializeCallFrame();
- Jump isNativeFunc3 = branch32(Equal, Address(regT2, OBJECT_OFFSETOF(FunctionExecutable, m_numParametersForCall)), Imm32(0));
+ loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2);
- Jump hasCodeBlock3 = branch32(GreaterThan, Address(regT2, OBJECT_OFFSETOF(FunctionExecutable, m_numParametersForCall)), Imm32(0));
+ Jump hasCodeBlock3 = branch32(GreaterThanOrEqual, Address(regT2, OBJECT_OFFSETOF(FunctionExecutable, m_numParametersForCall)), Imm32(0));
preserveReturnAddressAfterCall(regT3);
restoreArgumentReference();
- Call callJSFunction3 = call();
- emitGetJITStubArg(2, regT1); // argCount
+ Call callCompileCall = call();
+ emitGetFromCallFrameHeader32(RegisterFile::ArgumentCount, regT1);
restoreReturnAddressBeforeReturn(regT3);
loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2);
hasCodeBlock3.link(this);
-
- // Check argCount matches callee arity.
- Jump arityCheckOkay3 = branch32(Equal, Address(regT2, OBJECT_OFFSETOF(FunctionExecutable, m_numParametersForCall)), regT1);
- preserveReturnAddressAfterCall(regT3);
- emitPutJITStubArg(regT3, 1); // return address
- restoreArgumentReference();
- Call callArityCheck3 = call();
- move(regT1, callFrameRegister);
- emitGetJITStubArg(2, regT1); // argCount
- restoreReturnAddressBeforeReturn(regT3);
- loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2);
- arityCheckOkay3.link(this);
-
- isNativeFunc3.link(this);
- compileOpCallInitializeCallFrame();
- loadPtr(Address(regT2, OBJECT_OFFSETOF(FunctionExecutable, m_jitCodeForCall)), regT0);
+ loadPtr(Address(regT2, OBJECT_OFFSETOF(FunctionExecutable, m_jitCodeForCallWithArityCheck)), regT0);
jump(regT0);
// VirtualConstruct Trampoline
// regT0 holds callee, regT1 holds argCount. regT2 will hold the FunctionExecutable.
Label virtualConstructBegin = align();
- loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2);
+ compileOpCallInitializeCallFrame();
- Jump isNativeFunc4 = branch32(Equal, Address(regT2, OBJECT_OFFSETOF(FunctionExecutable, m_numParametersForConstruct)), Imm32(0));
+ loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2);
- Jump hasCodeBlock4 = branch32(GreaterThan, Address(regT2, OBJECT_OFFSETOF(FunctionExecutable, m_numParametersForConstruct)), Imm32(0));
+ Jump hasCodeBlock4 = branch32(GreaterThanOrEqual, Address(regT2, OBJECT_OFFSETOF(FunctionExecutable, m_numParametersForConstruct)), Imm32(0));
preserveReturnAddressAfterCall(regT3);
restoreArgumentReference();
- Call callJSFunction4 = call();
- emitGetJITStubArg(2, regT1); // argCount
+ Call callCompileConstruct = call();
+ emitGetFromCallFrameHeader32(RegisterFile::ArgumentCount, regT1);
restoreReturnAddressBeforeReturn(regT3);
loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2);
hasCodeBlock4.link(this);
-
- // Check argCount matches callee arity.
- Jump arityCheckOkay4 = branch32(Equal, Address(regT2, OBJECT_OFFSETOF(FunctionExecutable, m_numParametersForConstruct)), regT1);
- preserveReturnAddressAfterCall(regT3);
- emitPutJITStubArg(regT3, 1); // return address
- restoreArgumentReference();
- Call callArityCheck4 = call();
- move(regT1, callFrameRegister);
- emitGetJITStubArg(2, regT1); // argCount
- restoreReturnAddressBeforeReturn(regT3);
- loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2);
- arityCheckOkay4.link(this);
-
- isNativeFunc4.link(this);
- compileOpCallInitializeCallFrame();
- loadPtr(Address(regT2, OBJECT_OFFSETOF(FunctionExecutable, m_jitCodeForConstruct)), regT0);
+ loadPtr(Address(regT2, OBJECT_OFFSETOF(FunctionExecutable, m_jitCodeForConstructWithArityCheck)), regT0);
jump(regT0);
- // NativCall Trampoline
- Label nativeCallThunk = align();
- preserveReturnAddressAfterCall(regT0);
- emitPutToCallFrameHeader(regT0, RegisterFile::ReturnPC); // Push return address
-
- // Load caller frame's scope chain into this callframe so that whatever we call can
- // get to its global data.
- emitGetFromCallFrameHeaderPtr(RegisterFile::CallerFrame, regT1);
- emitGetFromCallFrameHeaderPtr(RegisterFile::ScopeChain, regT1, regT1);
- emitPutToCallFrameHeader(regT1, RegisterFile::ScopeChain);
-
-
-#if CPU(X86_64)
- emitGetFromCallFrameHeader32(RegisterFile::ArgumentCount, X86Registers::ecx);
-
- // Allocate stack space for our arglist
- subPtr(Imm32(sizeof(ArgList)), stackPointerRegister);
- COMPILE_ASSERT((sizeof(ArgList) & 0xf) == 0, ArgList_should_by_16byte_aligned);
-
- // Set up arguments
- subPtr(Imm32(1), X86Registers::ecx); // Don't include 'this' in argcount
-
- // Push argcount
- storePtr(X86Registers::ecx, Address(stackPointerRegister, OBJECT_OFFSETOF(ArgList, m_argCount)));
-
- // Calculate the start of the callframe header, and store in edx
- addPtr(Imm32(-RegisterFile::CallFrameHeaderSize * (int32_t)sizeof(Register)), callFrameRegister, X86Registers::edx);
-
- // Calculate start of arguments as callframe header - sizeof(Register) * argcount (ecx)
- mul32(Imm32(sizeof(Register)), X86Registers::ecx, X86Registers::ecx);
- subPtr(X86Registers::ecx, X86Registers::edx);
-
- // push pointer to arguments
- storePtr(X86Registers::edx, Address(stackPointerRegister, OBJECT_OFFSETOF(ArgList, m_args)));
-
- // ArgList is passed by reference so is stackPointerRegister
- move(stackPointerRegister, X86Registers::ecx);
-
- // edx currently points to the first argument, edx-sizeof(Register) points to 'this'
- loadPtr(Address(X86Registers::edx, -(int32_t)sizeof(Register)), X86Registers::edx);
-
- emitGetFromCallFrameHeaderPtr(RegisterFile::Callee, X86Registers::esi);
-
- move(callFrameRegister, X86Registers::edi);
+ // NativeCall Trampoline
+ Label nativeCallThunk = privateCompileCTINativeCall(globalData);
+ Label nativeConstructThunk = privateCompileCTINativeCall(globalData, true);
- loadPtr(Address(X86Registers::esi, OBJECT_OFFSETOF(JSFunction, m_executable)), X86Registers::r9);
- call(Address(X86Registers::r9, OBJECT_OFFSETOF(NativeExecutable, m_function)));
-
- addPtr(Imm32(sizeof(ArgList)), stackPointerRegister);
-#elif CPU(X86)
- emitGetFromCallFrameHeader32(RegisterFile::ArgumentCount, regT0);
-
- /* We have two structs that we use to describe the stackframe we set up for our
- * call to native code. NativeCallFrameStructure describes the how we set up the stack
- * in advance of the call. NativeFunctionCalleeSignature describes the callframe
- * as the native code expects it. We do this as we are using the fastcall calling
- * convention which results in the callee popping its arguments off the stack, but
- * not the rest of the callframe so we need a nice way to ensure we increment the
- * stack pointer by the right amount after the call.
- */
-#if COMPILER(MSVC) || OS(LINUX)
- struct NativeCallFrameStructure {
- // CallFrame* callFrame; // passed in EDX
- JSObject* callee;
- JSValue thisValue;
- ArgList* argPointer;
- ArgList args;
- JSValue result;
- };
- struct NativeFunctionCalleeSignature {
- JSObject* callee;
- JSValue thisValue;
- ArgList* argPointer;
- };
-#else
- struct NativeCallFrameStructure {
- // CallFrame* callFrame; // passed in ECX
- // JSObject* callee; // passed in EDX
- JSValue thisValue;
- ArgList* argPointer;
- ArgList args;
- };
- struct NativeFunctionCalleeSignature {
- JSValue thisValue;
- ArgList* argPointer;
- };
+#if ENABLE(JIT_OPTIMIZE_PROPERTY_ACCESS)
+ Call string_failureCases1Call = makeTailRecursiveCall(string_failureCases1);
+ Call string_failureCases2Call = makeTailRecursiveCall(string_failureCases2);
+ Call string_failureCases3Call = makeTailRecursiveCall(string_failureCases3);
#endif
- const int NativeCallFrameSize = (sizeof(NativeCallFrameStructure) + 15) & ~15;
- // Allocate system stack frame
- subPtr(Imm32(NativeCallFrameSize), stackPointerRegister);
-
- // Set up arguments
- subPtr(Imm32(1), regT0); // Don't include 'this' in argcount
-
- // push argcount
- storePtr(regT0, Address(stackPointerRegister, OBJECT_OFFSETOF(NativeCallFrameStructure, args) + OBJECT_OFFSETOF(ArgList, m_argCount)));
-
- // Calculate the start of the callframe header, and store in regT1
- addPtr(Imm32(-RegisterFile::CallFrameHeaderSize * (int)sizeof(Register)), callFrameRegister, regT1);
-
- // Calculate start of arguments as callframe header - sizeof(Register) * argcount (regT0)
- mul32(Imm32(sizeof(Register)), regT0, regT0);
- subPtr(regT0, regT1);
- storePtr(regT1, Address(stackPointerRegister, OBJECT_OFFSETOF(NativeCallFrameStructure, args) + OBJECT_OFFSETOF(ArgList, m_args)));
-
- // ArgList is passed by reference so is stackPointerRegister + 4 * sizeof(Register)
- addPtr(Imm32(OBJECT_OFFSETOF(NativeCallFrameStructure, args)), stackPointerRegister, regT0);
- storePtr(regT0, Address(stackPointerRegister, OBJECT_OFFSETOF(NativeCallFrameStructure, argPointer)));
- // regT1 currently points to the first argument, regT1 - sizeof(Register) points to 'this'
- loadPtr(Address(regT1, -(int)sizeof(Register)), regT1);
- storePtr(regT1, Address(stackPointerRegister, OBJECT_OFFSETOF(NativeCallFrameStructure, thisValue)));
-
-#if COMPILER(MSVC) || OS(LINUX)
- // ArgList is passed by reference so is stackPointerRegister + 4 * sizeof(Register)
- addPtr(Imm32(OBJECT_OFFSETOF(NativeCallFrameStructure, result)), stackPointerRegister, X86Registers::ecx);
-
- // Plant callee
- emitGetFromCallFrameHeaderPtr(RegisterFile::Callee, X86Registers::eax);
- storePtr(X86Registers::eax, Address(stackPointerRegister, OBJECT_OFFSETOF(NativeCallFrameStructure, callee)));
-
- // Plant callframe
- move(callFrameRegister, X86Registers::edx);
-
- loadPtr(Address(X86Registers::eax, OBJECT_OFFSETOF(JSFunction, m_executable)), X86Registers::ebx);
- call(Address(X86Registers::ebx, OBJECT_OFFSETOF(NativeExecutable, m_function)));
-
- // JSValue is a non-POD type
- loadPtr(Address(X86Registers::eax), X86Registers::eax);
-#else
- // Plant callee
- emitGetFromCallFrameHeaderPtr(RegisterFile::Callee, X86Registers::edx);
+ // All trampolines constructed! copy the code, link up calls, and set the pointers on the Machine object.
+ LinkBuffer patchBuffer(this, m_globalData->executableAllocator.poolForSize(m_assembler.size()));
- // Plant callframe
- move(callFrameRegister, X86Registers::ecx);
- loadPtr(Address(X86Registers::edx, OBJECT_OFFSETOF(JSFunction, m_executable)), X86Registers::ebx);
- call(Address(X86Registers::ebx, OBJECT_OFFSETOF(NativeExecutable, m_function)));
+#if ENABLE(JIT_OPTIMIZE_PROPERTY_ACCESS)
+ patchBuffer.link(string_failureCases1Call, FunctionPtr(cti_op_get_by_id_string_fail));
+ patchBuffer.link(string_failureCases2Call, FunctionPtr(cti_op_get_by_id_string_fail));
+ patchBuffer.link(string_failureCases3Call, FunctionPtr(cti_op_get_by_id_string_fail));
#endif
+#if ENABLE(JIT_OPTIMIZE_CALL)
+ patchBuffer.link(callLazyLinkCall, FunctionPtr(cti_vm_lazyLinkCall));
+ patchBuffer.link(callLazyLinkConstruct, FunctionPtr(cti_vm_lazyLinkConstruct));
+#endif
+ patchBuffer.link(callCompileCall, FunctionPtr(cti_op_call_jitCompile));
+ patchBuffer.link(callCompileConstruct, FunctionPtr(cti_op_construct_jitCompile));
- // We've put a few temporaries on the stack in addition to the actual arguments
- // so pull them off now
- addPtr(Imm32(NativeCallFrameSize - sizeof(NativeFunctionCalleeSignature)), stackPointerRegister);
-
-#elif CPU(ARM)
- emitGetFromCallFrameHeader32(RegisterFile::ArgumentCount, regT0);
-
- // Allocate stack space for our arglist
- COMPILE_ASSERT((sizeof(ArgList) & 0x7) == 0, ArgList_should_by_8byte_aligned);
- subPtr(Imm32(sizeof(ArgList)), stackPointerRegister);
-
- // Set up arguments
- subPtr(Imm32(1), regT0); // Don't include 'this' in argcount
-
- // Push argcount
- storePtr(regT0, Address(stackPointerRegister, OBJECT_OFFSETOF(ArgList, m_argCount)));
-
- // Calculate the start of the callframe header, and store in regT1
- move(callFrameRegister, regT1);
- sub32(Imm32(RegisterFile::CallFrameHeaderSize * (int32_t)sizeof(Register)), regT1);
-
- // Calculate start of arguments as callframe header - sizeof(Register) * argcount (regT1)
- mul32(Imm32(sizeof(Register)), regT0, regT0);
- subPtr(regT0, regT1);
-
- // push pointer to arguments
- storePtr(regT1, Address(stackPointerRegister, OBJECT_OFFSETOF(ArgList, m_args)));
-
- // regT1 currently points to the first argument, regT1-sizeof(Register) points to 'this'
-
-#if OS(WINCE)
- // Setup arg3:
- loadPtr(Address(regT1, -(int32_t)sizeof(Register)), ARMRegisters::r3);
-
- // Setup arg2:
- emitGetFromCallFrameHeaderPtr(RegisterFile::Callee, regT2);
-
- // Setup arg1:
- move(callFrameRegister, regT1);
-
- // Setup arg0:
- move(stackPointerRegister, regT0);
- subPtr(Imm32(sizeof(Register)), stackPointerRegister);
- storePtr(regT0, Address(stackPointerRegister));
-
- loadPtr(Address(regT2, OBJECT_OFFSETOF(JSFunction, m_executable)), regT3);
- call(Address(regT3, OBJECT_OFFSETOF(NativeExecutable, m_function)));
-
- loadPtr(Address(regT0), regT0);
-
- addPtr(Imm32(sizeof(Register) + sizeof(ArgList)), stackPointerRegister);
-#else // OS(WINCE)
- // Setup arg3:
- loadPtr(Address(regT1, -(int32_t)sizeof(Register)), regT2);
-
- // Setup arg2:
- emitGetFromCallFrameHeaderPtr(RegisterFile::Callee, regT1);
-
- // Setup arg1:
- move(callFrameRegister, regT0);
-
- // Setup arg4: This is a plain hack
- move(stackPointerRegister, ARMRegisters::r3);
-
- loadPtr(Address(regT1, OBJECT_OFFSETOF(JSFunction, m_executable)), regT3);
- call(Address(regT3, OBJECT_OFFSETOF(NativeExecutable, m_function)));
-
- addPtr(Imm32(sizeof(ArgList)), stackPointerRegister);
-#endif // OS(WINCE)
-
-#elif CPU(MIPS)
- emitGetFromCallFrameHeader32(RegisterFile::ArgumentCount, regT0);
-
- // Allocate stack space for our arglist
- COMPILE_ASSERT(!(sizeof(ArgList) & 0x7), ArgList_should_by_8byte_aligned);
- subPtr(Imm32(sizeof(ArgList) + 24), stackPointerRegister);
-
- // Set up arguments
- subPtr(Imm32(1), regT0); // Don't include 'this' in argcount
-
- // Push argcount to 24 + offset($sp)
- storePtr(regT0, Address(stackPointerRegister, 24 + OBJECT_OFFSETOF(ArgList, m_argCount)));
-
- // Calculate the start of the callframe header, and store in regT1
- move(callFrameRegister, regT1);
- sub32(Imm32(RegisterFile::CallFrameHeaderSize * (int32_t)sizeof(Register)), regT1);
-
- // Calculate start of arguments as callframe header - sizeof(Register) * argcount (regT1)
- mul32(Imm32(sizeof(Register)), regT0, regT0);
- subPtr(regT0, regT1);
+ CodeRef finalCode = patchBuffer.finalizeCode();
+ *executablePool = finalCode.m_executablePool;
- // push pointer to arguments to 24 + offset($sp)
- storePtr(regT1, Address(stackPointerRegister, 24 + OBJECT_OFFSETOF(ArgList, m_args)));
+ trampolines->ctiVirtualCallLink = trampolineAt(finalCode, virtualCallLinkBegin);
+ trampolines->ctiVirtualConstructLink = trampolineAt(finalCode, virtualConstructLinkBegin);
+ trampolines->ctiVirtualCall = trampolineAt(finalCode, virtualCallBegin);
+ trampolines->ctiVirtualConstruct = trampolineAt(finalCode, virtualConstructBegin);
+ trampolines->ctiNativeCall = trampolineAt(finalCode, nativeCallThunk);
+ trampolines->ctiNativeConstruct = trampolineAt(finalCode, nativeConstructThunk);
+#if ENABLE(JIT_OPTIMIZE_MOD)
+ trampolines->ctiSoftModulo = trampolineAt(finalCode, softModBegin);
+#endif
+#if ENABLE(JIT_OPTIMIZE_PROPERTY_ACCESS)
+ trampolines->ctiStringLengthTrampoline = trampolineAt(finalCode, stringLengthBegin);
+#endif
+}
- // Setup arg3: regT1 currently points to the first argument, regT1-sizeof(Register) points to 'this'
- loadPtr(Address(regT1, -(int32_t)sizeof(Register)), MIPSRegisters::a3);
+JIT::Label JIT::privateCompileCTINativeCall(JSGlobalData* globalData, bool isConstruct)
+{
+ int executableOffsetToFunction = isConstruct ? OBJECT_OFFSETOF(NativeExecutable, m_constructor) : OBJECT_OFFSETOF(NativeExecutable, m_function);
- // Setup arg2:
- emitGetFromCallFrameHeaderPtr(RegisterFile::Callee, MIPSRegisters::a2);
+ Label nativeCallThunk = align();
- // Setup arg1:
- move(callFrameRegister, MIPSRegisters::a1);
+ // Load caller frame's scope chain into this callframe so that whatever we call can
+ // get to its global data.
+ emitGetFromCallFrameHeaderPtr(RegisterFile::CallerFrame, regT0);
+ emitGetFromCallFrameHeaderPtr(RegisterFile::ScopeChain, regT1, regT0);
+ emitPutToCallFrameHeader(regT1, RegisterFile::ScopeChain);
- // Setup arg4: ArgList is passed by reference. At 16($sp), store ($sp + 24)
- addPtr(Imm32(24), stackPointerRegister, regT2);
- storePtr(regT2, Address(stackPointerRegister, 16));
+ peek(regT1);
+ emitPutToCallFrameHeader(regT1, RegisterFile::ReturnPC);
- // Setup arg0 as 20($sp) to hold the returned structure.
- ASSERT(sizeof(JSValue) == 4);
- addPtr(Imm32(20), stackPointerRegister, MIPSRegisters::a0);
+#if CPU(X86_64)
+ // Calling convention: f(edi, esi, edx, ecx, ...);
+ // Host function signature: f(ExecState*);
+ move(callFrameRegister, X86Registers::edi);
- // Call
- loadPtr(Address(MIPSRegisters::a2, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2);
- call(Address(regT2, OBJECT_OFFSETOF(NativeExecutable, m_function)));
+ subPtr(Imm32(16 - sizeof(void*)), stackPointerRegister); // Align stack after call.
- // Get returned value from 0($v0) which is the same as 20($sp)
- loadPtr(Address(returnValueRegister, 0), returnValueRegister);
+ emitGetFromCallFrameHeaderPtr(RegisterFile::Callee, X86Registers::esi);
+ loadPtr(Address(X86Registers::esi, OBJECT_OFFSETOF(JSFunction, m_executable)), X86Registers::r9);
+ move(regT0, callFrameRegister); // Eagerly restore caller frame register to avoid loading from stack.
+ call(Address(X86Registers::r9, executableOffsetToFunction));
- // Restore stack space
- addPtr(Imm32(sizeof(ArgList) + 24), stackPointerRegister);
+ addPtr(Imm32(16 - sizeof(void*)), stackPointerRegister);
#elif ENABLE(JIT_OPTIMIZE_NATIVE_CALL)
#error "JIT_OPTIMIZE_NATIVE_CALL not yet supported on this platform."
@@ -483,70 +214,20 @@ void JIT::privateCompileCTIMachineTrampolines(RefPtr<ExecutablePool>* executable
loadPtr(&(globalData->exception), regT2);
Jump exceptionHandler = branchTestPtr(NonZero, regT2);
- // Grab the return address.
- emitGetFromCallFrameHeaderPtr(RegisterFile::ReturnPC, regT1);
-
- // Restore our caller's "r".
- emitGetFromCallFrameHeaderPtr(RegisterFile::CallerFrame, callFrameRegister);
-
// Return.
- restoreReturnAddressBeforeReturn(regT1);
ret();
// Handle an exception
exceptionHandler.link(this);
// Grab the return address.
- emitGetFromCallFrameHeaderPtr(RegisterFile::ReturnPC, regT1);
+ peek(regT1);
move(ImmPtr(&globalData->exceptionLocation), regT2);
storePtr(regT1, regT2);
- move(ImmPtr(FunctionPtr(ctiVMThrowTrampoline).value()), regT2);
- emitGetFromCallFrameHeaderPtr(RegisterFile::CallerFrame, callFrameRegister);
- poke(callFrameRegister, OBJECT_OFFSETOF(struct JITStackFrame, callFrame) / sizeof (void*));
- restoreReturnAddressBeforeReturn(regT2);
+ poke(callFrameRegister, 1 + OBJECT_OFFSETOF(struct JITStackFrame, callFrame) / sizeof (void*));
+ poke(ImmPtr(FunctionPtr(ctiVMThrowTrampoline).value()));
ret();
-
-
-#if ENABLE(JIT_OPTIMIZE_PROPERTY_ACCESS)
- Call string_failureCases1Call = makeTailRecursiveCall(string_failureCases1);
- Call string_failureCases2Call = makeTailRecursiveCall(string_failureCases2);
- Call string_failureCases3Call = makeTailRecursiveCall(string_failureCases3);
-#endif
-
- // All trampolines constructed! copy the code, link up calls, and set the pointers on the Machine object.
- LinkBuffer patchBuffer(this, m_globalData->executableAllocator.poolForSize(m_assembler.size()));
-
-#if ENABLE(JIT_OPTIMIZE_PROPERTY_ACCESS)
- patchBuffer.link(string_failureCases1Call, FunctionPtr(cti_op_get_by_id_string_fail));
- patchBuffer.link(string_failureCases2Call, FunctionPtr(cti_op_get_by_id_string_fail));
- patchBuffer.link(string_failureCases3Call, FunctionPtr(cti_op_get_by_id_string_fail));
-#endif
-#if ENABLE(JIT_OPTIMIZE_CALL)
- patchBuffer.link(callArityCheck1, FunctionPtr(cti_op_call_arityCheck));
- patchBuffer.link(callJSFunction1, FunctionPtr(cti_op_call_jitCompile));
- patchBuffer.link(callLazyLinkCall1, FunctionPtr(cti_vm_lazyLinkCall));
- patchBuffer.link(callArityCheck2, FunctionPtr(cti_op_construct_arityCheck));
- patchBuffer.link(callJSFunction2, FunctionPtr(cti_op_construct_jitCompile));
- patchBuffer.link(callLazyLinkCall2, FunctionPtr(cti_vm_lazyLinkConstruct));
-#endif
- patchBuffer.link(callArityCheck3, FunctionPtr(cti_op_call_arityCheck));
- patchBuffer.link(callJSFunction3, FunctionPtr(cti_op_call_jitCompile));
- patchBuffer.link(callArityCheck4, FunctionPtr(cti_op_construct_arityCheck));
- patchBuffer.link(callJSFunction4, FunctionPtr(cti_op_construct_jitCompile));
-
- CodeRef finalCode = patchBuffer.finalizeCode();
- *executablePool = finalCode.m_executablePool;
- trampolines->ctiVirtualCallLink = trampolineAt(finalCode, virtualCallLinkBegin);
- trampolines->ctiVirtualConstructLink = trampolineAt(finalCode, virtualConstructLinkBegin);
- trampolines->ctiVirtualCall = trampolineAt(finalCode, virtualCallBegin);
- trampolines->ctiVirtualConstruct = trampolineAt(finalCode, virtualConstructBegin);
- trampolines->ctiNativeCall = trampolineAt(finalCode, nativeCallThunk);
-#if ENABLE(JIT_OPTIMIZE_MOD)
- trampolines->ctiSoftModulo = trampolineAt(finalCode, softModBegin);
-#endif
-#if ENABLE(JIT_OPTIMIZE_PROPERTY_ACCESS)
- trampolines->ctiStringLengthTrampoline = trampolineAt(finalCode, stringLengthBegin);
-#endif
+ return nativeCallThunk;
}
JIT::CodePtr JIT::privateCompileCTINativeCall(PassRefPtr<ExecutablePool>, JSGlobalData* globalData, NativeFunction)
@@ -1430,7 +1111,6 @@ void JIT::emit_op_neq_null(Instruction* currentInstruction)
emitTagAsBoolImmediate(regT0);
emitPutVirtualRegister(dst);
-
}
void JIT::emit_op_enter(Instruction*)
@@ -1485,7 +1165,20 @@ void JIT::emit_op_convert_this(Instruction* currentInstruction)
emitJumpSlowCaseIfNotJSCell(regT0);
loadPtr(Address(regT0, OBJECT_OFFSETOF(JSCell, m_structure)), regT1);
addSlowCase(branchTest8(NonZero, Address(regT1, OBJECT_OFFSETOF(Structure, m_typeInfo.m_flags)), Imm32(NeedsThisConversion)));
+}
+void JIT::emit_op_get_callee(Instruction* currentInstruction)
+{
+ unsigned result = currentInstruction[1].u.operand;
+ emitGetFromCallFrameHeaderPtr(RegisterFile::Callee, regT0);
+ emitPutVirtualRegister(result);
+}
+
+void JIT::emit_op_create_this(Instruction* currentInstruction)
+{
+ JITStubCall stubCall(this, cti_op_create_this);
+ stubCall.addArgument(currentInstruction[2].u.operand, regT1);
+ stubCall.call(currentInstruction[1].u.operand);
}
void JIT::emit_op_profile_will_call(Instruction* currentInstruction)
diff --git a/JavaScriptCore/jit/JITOpcodes32_64.cpp b/JavaScriptCore/jit/JITOpcodes32_64.cpp
index b814801..a730b67 100644
--- a/JavaScriptCore/jit/JITOpcodes32_64.cpp
+++ b/JavaScriptCore/jit/JITOpcodes32_64.cpp
@@ -71,383 +71,69 @@ void JIT::privateCompileCTIMachineTrampolines(RefPtr<ExecutablePool>* executable
// VirtualCallLink Trampoline
// regT0 holds callee, regT1 holds argCount. regT2 will hold the FunctionExecutable.
Label virtualCallLinkBegin = align();
- loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2);
-
- Jump isNativeFunc1 = branch32(Equal, Address(regT2, OBJECT_OFFSETOF(FunctionExecutable, m_numParametersForCall)), Imm32(0));
-
- Jump hasCodeBlock1 = branch32(GreaterThan, Address(regT2, OBJECT_OFFSETOF(FunctionExecutable, m_numParametersForCall)), Imm32(0));
- preserveReturnAddressAfterCall(regT3);
- restoreArgumentReference();
- Call callJSFunction1 = call();
- loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2);
- emitGetJITStubArg(2, regT1); // argCount
- restoreReturnAddressBeforeReturn(regT3);
- hasCodeBlock1.link(this);
-
- // Check argCount matches callee arity.
- Jump arityCheckOkay1 = branch32(Equal, Address(regT2, OBJECT_OFFSETOF(FunctionExecutable, m_numParametersForCall)), regT1);
- preserveReturnAddressAfterCall(regT3);
- emitPutJITStubArg(regT3, 1); // return address
- restoreArgumentReference();
- Call callArityCheck1 = call();
- move(regT1, callFrameRegister);
- emitGetJITStubArg(2, regT1); // argCount
- restoreReturnAddressBeforeReturn(regT3);
- arityCheckOkay1.link(this);
-
- isNativeFunc1.link(this);
-
compileOpCallInitializeCallFrame();
-
preserveReturnAddressAfterCall(regT3);
- emitPutJITStubArg(regT3, 1); // return address
+ emitPutToCallFrameHeader(regT3, RegisterFile::ReturnPC);
restoreArgumentReference();
- Call callLazyLinkCall1 = call();
+ Call callLazyLinkCall = call();
restoreReturnAddressBeforeReturn(regT3);
+ emitGetFromCallFrameHeader32(RegisterFile::ArgumentCount, regT1);
jump(regT0);
// VirtualConstructLink Trampoline
// regT0 holds callee, regT1 holds argCount. regT2 will hold the FunctionExecutable.
Label virtualConstructLinkBegin = align();
- loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2);
-
- Jump isNativeFunc2 = branch32(Equal, Address(regT2, OBJECT_OFFSETOF(FunctionExecutable, m_numParametersForConstruct)), Imm32(0));
-
- Jump hasCodeBlock2 = branch32(GreaterThan, Address(regT2, OBJECT_OFFSETOF(FunctionExecutable, m_numParametersForConstruct)), Imm32(0));
- preserveReturnAddressAfterCall(regT3);
- restoreArgumentReference();
- Call callJSFunction2 = call();
- loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2);
- emitGetJITStubArg(2, regT1); // argCount
- restoreReturnAddressBeforeReturn(regT3);
- hasCodeBlock2.link(this);
-
- // Check argCount matches callee arity.
- Jump arityCheckOkay2 = branch32(Equal, Address(regT2, OBJECT_OFFSETOF(FunctionExecutable, m_numParametersForConstruct)), regT1);
- preserveReturnAddressAfterCall(regT3);
- emitPutJITStubArg(regT3, 1); // return address
- restoreArgumentReference();
- Call callArityCheck2 = call();
- move(regT1, callFrameRegister);
- emitGetJITStubArg(2, regT1); // argCount
- restoreReturnAddressBeforeReturn(regT3);
- arityCheckOkay2.link(this);
-
- isNativeFunc2.link(this);
-
compileOpCallInitializeCallFrame();
-
preserveReturnAddressAfterCall(regT3);
- emitPutJITStubArg(regT3, 1); // return address
+ emitPutToCallFrameHeader(regT3, RegisterFile::ReturnPC);
restoreArgumentReference();
- Call callLazyLinkCall2 = call();
+ Call callLazyLinkConstruct = call();
restoreReturnAddressBeforeReturn(regT3);
+ emitGetFromCallFrameHeader32(RegisterFile::ArgumentCount, regT1);
jump(regT0);
#endif // ENABLE(JIT_OPTIMIZE_CALL)
// VirtualCall Trampoline
// regT0 holds callee, regT1 holds argCount. regT2 will hold the FunctionExecutable.
Label virtualCallBegin = align();
- loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2);
-
- Jump isNativeFunc3 = branch32(Equal, Address(regT2, OBJECT_OFFSETOF(FunctionExecutable, m_numParametersForCall)), Imm32(0));
+ compileOpCallInitializeCallFrame();
- Jump hasCodeBlock3 = branch32(GreaterThan, Address(regT2, OBJECT_OFFSETOF(FunctionExecutable, m_numParametersForCall)), Imm32(0));
- preserveReturnAddressAfterCall(regT3);
- restoreArgumentReference();
- Call callJSFunction3 = call();
- emitGetJITStubArg(2, regT1); // argCount
- restoreReturnAddressBeforeReturn(regT3);
loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2);
- hasCodeBlock3.link(this);
- // Check argCount matches callee arity.
- Jump arityCheckOkay3 = branch32(Equal, Address(regT2, OBJECT_OFFSETOF(FunctionExecutable, m_numParametersForCall)), regT1);
+ Jump hasCodeBlock3 = branch32(GreaterThanOrEqual, Address(regT2, OBJECT_OFFSETOF(FunctionExecutable, m_numParametersForCall)), Imm32(0));
preserveReturnAddressAfterCall(regT3);
- emitPutJITStubArg(regT3, 1); // return address
restoreArgumentReference();
- Call callArityCheck3 = call();
- move(regT1, callFrameRegister);
- emitGetJITStubArg(2, regT1); // argCount
+ Call callCompileCall = call();
+ emitGetFromCallFrameHeader32(RegisterFile::ArgumentCount, regT1);
restoreReturnAddressBeforeReturn(regT3);
loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2);
- arityCheckOkay3.link(this);
-
- isNativeFunc3.link(this);
+ hasCodeBlock3.link(this);
- compileOpCallInitializeCallFrame();
- loadPtr(Address(regT2, OBJECT_OFFSETOF(FunctionExecutable, m_jitCodeForCall)), regT0);
+ loadPtr(Address(regT2, OBJECT_OFFSETOF(FunctionExecutable, m_jitCodeForCallWithArityCheck)), regT0);
jump(regT0);
// VirtualConstruct Trampoline
// regT0 holds callee, regT1 holds argCount. regT2 will hold the FunctionExecutable.
Label virtualConstructBegin = align();
- loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2);
-
- Jump isNativeFunc4 = branch32(Equal, Address(regT2, OBJECT_OFFSETOF(FunctionExecutable, m_numParametersForConstruct)), Imm32(0));
+ compileOpCallInitializeCallFrame();
- Jump hasCodeBlock4 = branch32(GreaterThan, Address(regT2, OBJECT_OFFSETOF(FunctionExecutable, m_numParametersForConstruct)), Imm32(0));
- preserveReturnAddressAfterCall(regT3);
- restoreArgumentReference();
- Call callJSFunction4 = call();
- emitGetJITStubArg(2, regT1); // argCount
- restoreReturnAddressBeforeReturn(regT3);
loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2);
- hasCodeBlock4.link(this);
- // Check argCount matches callee arity.
- Jump arityCheckOkay4 = branch32(Equal, Address(regT2, OBJECT_OFFSETOF(FunctionExecutable, m_numParametersForConstruct)), regT1);
+ Jump hasCodeBlock4 = branch32(GreaterThanOrEqual, Address(regT2, OBJECT_OFFSETOF(FunctionExecutable, m_numParametersForConstruct)), Imm32(0));
preserveReturnAddressAfterCall(regT3);
- emitPutJITStubArg(regT3, 1); // return address
restoreArgumentReference();
- Call callArityCheck4 = call();
- move(regT1, callFrameRegister);
- emitGetJITStubArg(2, regT1); // argCount
+ Call callCompileCconstruct = call();
+ emitGetFromCallFrameHeader32(RegisterFile::ArgumentCount, regT1);
restoreReturnAddressBeforeReturn(regT3);
loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2);
- arityCheckOkay4.link(this);
-
- isNativeFunc4.link(this);
+ hasCodeBlock4.link(this);
- compileOpCallInitializeCallFrame();
- loadPtr(Address(regT2, OBJECT_OFFSETOF(FunctionExecutable, m_jitCodeForConstruct)), regT0);
+ loadPtr(Address(regT2, OBJECT_OFFSETOF(FunctionExecutable, m_jitCodeForConstructWithArityCheck)), regT0);
jump(regT0);
-#if CPU(X86) || CPU(ARM_TRADITIONAL)
- Label nativeCallThunk = align();
- preserveReturnAddressAfterCall(regT0);
- emitPutToCallFrameHeader(regT0, RegisterFile::ReturnPC); // Push return address
-
- // Load caller frame's scope chain into this callframe so that whatever we call can
- // get to its global data.
- emitGetFromCallFrameHeaderPtr(RegisterFile::CallerFrame, regT1);
- emitGetFromCallFrameHeaderPtr(RegisterFile::ScopeChain, regT1, regT1);
- emitPutToCallFrameHeader(regT1, RegisterFile::ScopeChain);
-
-#if CPU(X86)
- emitGetFromCallFrameHeader32(RegisterFile::ArgumentCount, regT0);
-
- /* We have two structs that we use to describe the stackframe we set up for our
- * call to native code. NativeCallFrameStructure describes the how we set up the stack
- * in advance of the call. NativeFunctionCalleeSignature describes the callframe
- * as the native code expects it. We do this as we are using the fastcall calling
- * convention which results in the callee popping its arguments off the stack, but
- * not the rest of the callframe so we need a nice way to ensure we increment the
- * stack pointer by the right amount after the call.
- */
-
-#if COMPILER(MSVC) || OS(LINUX)
-#if COMPILER(MSVC)
-#pragma pack(push)
-#pragma pack(4)
-#endif // COMPILER(MSVC)
- struct NativeCallFrameStructure {
- // CallFrame* callFrame; // passed in EDX
- JSObject* callee;
- JSValue thisValue;
- ArgList* argPointer;
- ArgList args;
- JSValue result;
- };
- struct NativeFunctionCalleeSignature {
- JSObject* callee;
- JSValue thisValue;
- ArgList* argPointer;
- };
-#if COMPILER(MSVC)
-#pragma pack(pop)
-#endif // COMPILER(MSVC)
-#else
- struct NativeCallFrameStructure {
- // CallFrame* callFrame; // passed in ECX
- // JSObject* callee; // passed in EDX
- JSValue thisValue;
- ArgList* argPointer;
- ArgList args;
- };
- struct NativeFunctionCalleeSignature {
- JSValue thisValue;
- ArgList* argPointer;
- };
-#endif
-
- const int NativeCallFrameSize = (sizeof(NativeCallFrameStructure) + 15) & ~15;
- // Allocate system stack frame
- subPtr(Imm32(NativeCallFrameSize), stackPointerRegister);
-
- // Set up arguments
- subPtr(Imm32(1), regT0); // Don't include 'this' in argcount
-
- // push argcount
- storePtr(regT0, Address(stackPointerRegister, OBJECT_OFFSETOF(NativeCallFrameStructure, args) + OBJECT_OFFSETOF(ArgList, m_argCount)));
-
- // Calculate the start of the callframe header, and store in regT1
- addPtr(Imm32(-RegisterFile::CallFrameHeaderSize * (int)sizeof(Register)), callFrameRegister, regT1);
-
- // Calculate start of arguments as callframe header - sizeof(Register) * argcount (regT0)
- mul32(Imm32(sizeof(Register)), regT0, regT0);
- subPtr(regT0, regT1);
- storePtr(regT1, Address(stackPointerRegister, OBJECT_OFFSETOF(NativeCallFrameStructure, args) + OBJECT_OFFSETOF(ArgList, m_args)));
-
- // ArgList is passed by reference so is stackPointerRegister + 4 * sizeof(Register)
- addPtr(Imm32(OBJECT_OFFSETOF(NativeCallFrameStructure, args)), stackPointerRegister, regT0);
- storePtr(regT0, Address(stackPointerRegister, OBJECT_OFFSETOF(NativeCallFrameStructure, argPointer)));
-
- // regT1 currently points to the first argument, regT1 - sizeof(Register) points to 'this'
- loadPtr(Address(regT1, -(int)sizeof(Register) + OBJECT_OFFSETOF(JSValue, u.asBits.payload)), regT2);
- loadPtr(Address(regT1, -(int)sizeof(Register) + OBJECT_OFFSETOF(JSValue, u.asBits.tag)), regT3);
- storePtr(regT2, Address(stackPointerRegister, OBJECT_OFFSETOF(NativeCallFrameStructure, thisValue) + OBJECT_OFFSETOF(JSValue, u.asBits.payload)));
- storePtr(regT3, Address(stackPointerRegister, OBJECT_OFFSETOF(NativeCallFrameStructure, thisValue) + OBJECT_OFFSETOF(JSValue, u.asBits.tag)));
-
-#if COMPILER(MSVC) || OS(LINUX)
- // ArgList is passed by reference so is stackPointerRegister + 4 * sizeof(Register)
- addPtr(Imm32(OBJECT_OFFSETOF(NativeCallFrameStructure, result)), stackPointerRegister, X86Registers::ecx);
-
- // Plant callee
- emitGetFromCallFrameHeaderPtr(RegisterFile::Callee, X86Registers::eax);
- storePtr(X86Registers::eax, Address(stackPointerRegister, OBJECT_OFFSETOF(NativeCallFrameStructure, callee)));
-
- // Plant callframe
- move(callFrameRegister, X86Registers::edx);
-
- loadPtr(Address(X86Registers::eax, OBJECT_OFFSETOF(JSFunction, m_executable)), X86Registers::ebx);
- call(Address(X86Registers::ebx, OBJECT_OFFSETOF(NativeExecutable, m_function)));
-
- // JSValue is a non-POD type, so eax points to it
- emitLoad(0, regT1, regT0, X86Registers::eax);
-#else
- emitGetFromCallFrameHeaderPtr(RegisterFile::Callee, X86Registers::edx); // callee
- move(callFrameRegister, X86Registers::ecx); // callFrame
- loadPtr(Address(X86Registers::edx, OBJECT_OFFSETOF(JSFunction, m_executable)), X86Registers::ebx);
- call(Address(X86Registers::ebx, OBJECT_OFFSETOF(NativeExecutable, m_function)));
-#endif
-
- // We've put a few temporaries on the stack in addition to the actual arguments
- // so pull them off now
- addPtr(Imm32(NativeCallFrameSize - sizeof(NativeFunctionCalleeSignature)), stackPointerRegister);
-
-#elif CPU(ARM_TRADITIONAL)
- emitGetFromCallFrameHeader32(RegisterFile::ArgumentCount, regT0);
-
- // Allocate stack space for our arglist
- COMPILE_ASSERT((sizeof(ArgList) & 0x7) == 0 && sizeof(JSValue) == 8 && sizeof(Register) == 8, ArgList_should_by_8byte_aligned);
- subPtr(Imm32(sizeof(ArgList)), stackPointerRegister);
-
- // Set up arguments
- subPtr(Imm32(1), regT0); // Don't include 'this' in argcount
-
- // Push argcount
- storePtr(regT0, Address(stackPointerRegister, OBJECT_OFFSETOF(ArgList, m_argCount)));
-
- // Calculate the start of the callframe header, and store in regT1
- move(callFrameRegister, regT1);
- sub32(Imm32(RegisterFile::CallFrameHeaderSize * (int32_t)sizeof(Register)), regT1);
-
- // Calculate start of arguments as callframe header - sizeof(Register) * argcount (regT1)
- mul32(Imm32(sizeof(Register)), regT0, regT0);
- subPtr(regT0, regT1);
-
- // push pointer to arguments
- storePtr(regT1, Address(stackPointerRegister, OBJECT_OFFSETOF(ArgList, m_args)));
-
- // Argument passing method:
- // r0 - points to return value
- // r1 - callFrame
- // r2 - callee
- // stack: this(JSValue) and a pointer to ArgList
-
-#if OS(WINCE)
- // Setup arg4:
- push(stackPointerRegister);
-
- // Setup arg3:
- // regT1 currently points to the first argument, regT1-sizeof(Register) points to 'this'
- load32(Address(regT1, -(int32_t)sizeof(void*) * 2), ARMRegisters::r3);
- push(ARMRegisters::r3);
- load32(Address(regT1, -(int32_t)sizeof(void*)), regT3);
- storePtr(regT3, Address(stackPointerRegister));
-
- // Setup arg2:
- emitGetFromCallFrameHeaderPtr(RegisterFile::Callee, regT2);
-
- // Setup arg1:
- move(callFrameRegister, regT1);
-
- // Setup arg0:
- move(stackPointerRegister, regT0);
-
- loadPtr(Address(regT2, OBJECT_OFFSETOF(JSFunction, m_executable)), regT3);
- call(Address(regT3, OBJECT_OFFSETOF(NativeExecutable, m_function)));
-
- load32(Address(stackPointerRegister, 0), regT0);
- load32(Address(stackPointerRegister, 4), regT1);
-
- addPtr(Imm32(sizeof(ArgList) + 8), stackPointerRegister);
-#else // OS(WINCE)
- move(stackPointerRegister, regT3);
- subPtr(Imm32(8), stackPointerRegister);
- move(stackPointerRegister, regT0);
- subPtr(Imm32(8 + 4 + 4 /* padding */), stackPointerRegister);
-
- // Setup arg4:
- storePtr(regT3, Address(stackPointerRegister, 8));
-
- // Setup arg3:
- // regT1 currently points to the first argument, regT1-sizeof(Register) points to 'this'
- load32(Address(regT1, -(int32_t)sizeof(void*) * 2), regT3);
- storePtr(regT3, Address(stackPointerRegister, 0));
- load32(Address(regT1, -(int32_t)sizeof(void*)), regT3);
- storePtr(regT3, Address(stackPointerRegister, 4));
-
- // Setup arg2:
- emitGetFromCallFrameHeaderPtr(RegisterFile::Callee, regT2);
-
- // Setup arg1:
- move(callFrameRegister, regT1);
-
- loadPtr(Address(regT2, OBJECT_OFFSETOF(JSFunction, m_executable)), regT3);
- call(Address(regT3, OBJECT_OFFSETOF(NativeExecutable, m_function)));
-
- // Load return value
- load32(Address(stackPointerRegister, 16), regT0);
- load32(Address(stackPointerRegister, 20), regT1);
-
- addPtr(Imm32(sizeof(ArgList) + 16 + 8), stackPointerRegister);
-#endif // OS(WINCE)
-
-#endif
-
- // Check for an exception
- move(ImmPtr(&globalData->exception), regT2);
- Jump sawException = branch32(NotEqual, tagFor(0, regT2), Imm32(JSValue::EmptyValueTag));
-
- // Grab the return address.
- emitGetFromCallFrameHeaderPtr(RegisterFile::ReturnPC, regT3);
-
- // Restore our caller's "r".
- emitGetFromCallFrameHeaderPtr(RegisterFile::CallerFrame, callFrameRegister);
-
- // Return.
- restoreReturnAddressBeforeReturn(regT3);
- ret();
-
- // Handle an exception
- sawException.link(this);
- // Grab the return address.
- emitGetFromCallFrameHeaderPtr(RegisterFile::ReturnPC, regT1);
- move(ImmPtr(&globalData->exceptionLocation), regT2);
- storePtr(regT1, regT2);
- move(ImmPtr(FunctionPtr(ctiVMThrowTrampoline).value()), regT2);
- emitGetFromCallFrameHeaderPtr(RegisterFile::CallerFrame, callFrameRegister);
- poke(callFrameRegister, OBJECT_OFFSETOF(struct JITStackFrame, callFrame) / sizeof(void*));
- restoreReturnAddressBeforeReturn(regT2);
- ret();
-
-#elif ENABLE(JIT_OPTIMIZE_NATIVE_CALL)
-#error "JIT_OPTIMIZE_NATIVE_CALL not yet supported on this platform."
-#else
- breakpoint();
-#endif
+ // NativeCall Trampoline
+ Label nativeCallThunk = privateCompileCTINativeCall(globalData);
+ Label nativeConstructThunk = privateCompileCTINativeCall(globalData, true);
#if ENABLE(JIT_OPTIMIZE_PROPERTY_ACCESS)
Call string_failureCases1Call = makeTailRecursiveCall(string_failureCases1);
@@ -464,17 +150,11 @@ void JIT::privateCompileCTIMachineTrampolines(RefPtr<ExecutablePool>* executable
patchBuffer.link(string_failureCases3Call, FunctionPtr(cti_op_get_by_id_string_fail));
#endif
#if ENABLE(JIT_OPTIMIZE_CALL)
- patchBuffer.link(callArityCheck1, FunctionPtr(cti_op_call_arityCheck));
- patchBuffer.link(callJSFunction1, FunctionPtr(cti_op_call_jitCompile));
- patchBuffer.link(callLazyLinkCall1, FunctionPtr(cti_vm_lazyLinkCall));
- patchBuffer.link(callArityCheck2, FunctionPtr(cti_op_construct_arityCheck));
- patchBuffer.link(callJSFunction2, FunctionPtr(cti_op_construct_jitCompile));
- patchBuffer.link(callLazyLinkCall2, FunctionPtr(cti_vm_lazyLinkConstruct));
+ patchBuffer.link(callLazyLinkCall, FunctionPtr(cti_vm_lazyLinkCall));
+ patchBuffer.link(callLazyLinkConstruct, FunctionPtr(cti_vm_lazyLinkConstruct));
#endif
- patchBuffer.link(callArityCheck3, FunctionPtr(cti_op_call_arityCheck));
- patchBuffer.link(callJSFunction3, FunctionPtr(cti_op_call_jitCompile));
- patchBuffer.link(callArityCheck4, FunctionPtr(cti_op_construct_arityCheck));
- patchBuffer.link(callJSFunction4, FunctionPtr(cti_op_construct_jitCompile));
+ patchBuffer.link(callCompileCall, FunctionPtr(cti_op_call_jitCompile));
+ patchBuffer.link(callCompileCconstruct, FunctionPtr(cti_op_construct_jitCompile));
CodeRef finalCode = patchBuffer.finalizeCode();
*executablePool = finalCode.m_executablePool;
@@ -482,6 +162,7 @@ void JIT::privateCompileCTIMachineTrampolines(RefPtr<ExecutablePool>* executable
trampolines->ctiVirtualCall = trampolineAt(finalCode, virtualCallBegin);
trampolines->ctiVirtualConstruct = trampolineAt(finalCode, virtualConstructBegin);
trampolines->ctiNativeCall = trampolineAt(finalCode, nativeCallThunk);
+ trampolines->ctiNativeConstruct = trampolineAt(finalCode, nativeConstructThunk);
#if ENABLE(JIT_OPTIMIZE_PROPERTY_ACCESS)
trampolines->ctiStringLengthTrampoline = trampolineAt(finalCode, stringLengthBegin);
#endif
@@ -494,246 +175,112 @@ void JIT::privateCompileCTIMachineTrampolines(RefPtr<ExecutablePool>* executable
#endif
}
-JIT::CodePtr JIT::privateCompileCTINativeCall(PassRefPtr<ExecutablePool> executablePool, JSGlobalData* globalData, NativeFunction func)
+JIT::Label JIT::privateCompileCTINativeCall(JSGlobalData* globalData, bool isConstruct)
{
-#if CPU(X86) || CPU(ARM_TRADITIONAL)
+ int executableOffsetToFunction = isConstruct ? OBJECT_OFFSETOF(NativeExecutable, m_constructor) : OBJECT_OFFSETOF(NativeExecutable, m_function);
+
Label nativeCallThunk = align();
- preserveReturnAddressAfterCall(regT0);
- emitPutToCallFrameHeader(regT0, RegisterFile::ReturnPC); // Push return address
// Load caller frame's scope chain into this callframe so that whatever we call can
// get to its global data.
- emitGetFromCallFrameHeaderPtr(RegisterFile::CallerFrame, regT1);
- emitGetFromCallFrameHeaderPtr(RegisterFile::ScopeChain, regT1, regT1);
+ emitGetFromCallFrameHeaderPtr(RegisterFile::CallerFrame, regT0);
+ emitGetFromCallFrameHeaderPtr(RegisterFile::ScopeChain, regT1, regT0);
emitPutToCallFrameHeader(regT1, RegisterFile::ScopeChain);
-#if CPU(X86)
- emitGetFromCallFrameHeader32(RegisterFile::ArgumentCount, regT0);
-
- /* We have two structs that we use to describe the stackframe we set up for our
- * call to native code. NativeCallFrameStructure describes the how we set up the stack
- * in advance of the call. NativeFunctionCalleeSignature describes the callframe
- * as the native code expects it. We do this as we are using the fastcall calling
- * convention which results in the callee popping its arguments off the stack, but
- * not the rest of the callframe so we need a nice way to ensure we increment the
- * stack pointer by the right amount after the call.
- */
-
-#if COMPILER(MSVC) || OS(LINUX)
-#if COMPILER(MSVC)
-#pragma pack(push)
-#pragma pack(4)
-#endif // COMPILER(MSVC)
- struct NativeCallFrameStructure {
- // CallFrame* callFrame; // passed in EDX
- JSObject* callee;
- JSValue thisValue;
- ArgList* argPointer;
- ArgList args;
- JSValue result;
- };
- struct NativeFunctionCalleeSignature {
- JSObject* callee;
- JSValue thisValue;
- ArgList* argPointer;
- };
-#if COMPILER(MSVC)
-#pragma pack(pop)
-#endif // COMPILER(MSVC)
-#else
- struct NativeCallFrameStructure {
- // CallFrame* callFrame; // passed in ECX
- // JSObject* callee; // passed in EDX
- JSValue thisValue;
- ArgList* argPointer;
- ArgList args;
- };
- struct NativeFunctionCalleeSignature {
- JSValue thisValue;
- ArgList* argPointer;
- };
-#endif
-
- const int NativeCallFrameSize = (sizeof(NativeCallFrameStructure) + 15) & ~15;
- // Allocate system stack frame
- subPtr(Imm32(NativeCallFrameSize), stackPointerRegister);
-
- // Set up arguments
- subPtr(Imm32(1), regT0); // Don't include 'this' in argcount
-
- // push argcount
- storePtr(regT0, Address(stackPointerRegister, OBJECT_OFFSETOF(NativeCallFrameStructure, args) + OBJECT_OFFSETOF(ArgList, m_argCount)));
+ peek(regT1);
+ emitPutToCallFrameHeader(regT1, RegisterFile::ReturnPC);
- // Calculate the start of the callframe header, and store in regT1
- addPtr(Imm32(-RegisterFile::CallFrameHeaderSize * (int)sizeof(Register)), callFrameRegister, regT1);
-
- // Calculate start of arguments as callframe header - sizeof(Register) * argcount (regT0)
- mul32(Imm32(sizeof(Register)), regT0, regT0);
- subPtr(regT0, regT1);
- storePtr(regT1, Address(stackPointerRegister, OBJECT_OFFSETOF(NativeCallFrameStructure, args) + OBJECT_OFFSETOF(ArgList, m_args)));
-
- // ArgList is passed by reference so is stackPointerRegister + 4 * sizeof(Register)
- addPtr(Imm32(OBJECT_OFFSETOF(NativeCallFrameStructure, args)), stackPointerRegister, regT0);
- storePtr(regT0, Address(stackPointerRegister, OBJECT_OFFSETOF(NativeCallFrameStructure, argPointer)));
-
- // regT1 currently points to the first argument, regT1 - sizeof(Register) points to 'this'
- loadPtr(Address(regT1, -(int)sizeof(Register) + OBJECT_OFFSETOF(JSValue, u.asBits.payload)), regT2);
- loadPtr(Address(regT1, -(int)sizeof(Register) + OBJECT_OFFSETOF(JSValue, u.asBits.tag)), regT3);
- storePtr(regT2, Address(stackPointerRegister, OBJECT_OFFSETOF(NativeCallFrameStructure, thisValue) + OBJECT_OFFSETOF(JSValue, u.asBits.payload)));
- storePtr(regT3, Address(stackPointerRegister, OBJECT_OFFSETOF(NativeCallFrameStructure, thisValue) + OBJECT_OFFSETOF(JSValue, u.asBits.tag)));
-
-#if COMPILER(MSVC) || OS(LINUX)
- // ArgList is passed by reference so is stackPointerRegister + 4 * sizeof(Register)
- addPtr(Imm32(OBJECT_OFFSETOF(NativeCallFrameStructure, result)), stackPointerRegister, X86Registers::ecx);
+#if CPU(X86)
+ // Calling convention: f(ecx, edx, ...);
+ // Host function signature: f(ExecState*);
+ move(callFrameRegister, X86Registers::ecx);
- // Plant callee
- emitGetFromCallFrameHeaderPtr(RegisterFile::Callee, X86Registers::eax);
- storePtr(X86Registers::eax, Address(stackPointerRegister, OBJECT_OFFSETOF(NativeCallFrameStructure, callee)));
+ subPtr(Imm32(16 - sizeof(void*)), stackPointerRegister); // Align stack after call.
- // Plant callframe
- move(callFrameRegister, X86Registers::edx);
+ // call the function
+ emitGetFromCallFrameHeaderPtr(RegisterFile::Callee, regT1);
+ loadPtr(Address(regT1, OBJECT_OFFSETOF(JSFunction, m_executable)), regT1);
+ move(regT0, callFrameRegister); // Eagerly restore caller frame register to avoid loading from stack.
+ call(Address(regT1, executableOffsetToFunction));
- Call nativeCall = call();
+ addPtr(Imm32(16 - sizeof(void*)), stackPointerRegister);
- // JSValue is a non-POD type, so eax points to it
- emitLoad(0, regT1, regT0, X86Registers::eax);
+#elif ENABLE(JIT_OPTIMIZE_NATIVE_CALL)
+#error "JIT_OPTIMIZE_NATIVE_CALL not yet supported on this platform."
#else
- emitGetFromCallFrameHeaderPtr(RegisterFile::Callee, X86Registers::edx); // callee
- move(callFrameRegister, X86Registers::ecx); // callFrame
- Call nativeCall = call();
-#endif
-
- // We've put a few temporaries on the stack in addition to the actual arguments
- // so pull them off now
- addPtr(Imm32(NativeCallFrameSize - sizeof(NativeFunctionCalleeSignature)), stackPointerRegister);
-
-#elif CPU(ARM_TRADITIONAL)
- emitGetFromCallFrameHeader32(RegisterFile::ArgumentCount, regT0);
-
- // Allocate stack space for our arglist
- COMPILE_ASSERT((sizeof(ArgList) & 0x7) == 0 && sizeof(JSValue) == 8 && sizeof(Register) == 8, ArgList_should_by_8byte_aligned);
- subPtr(Imm32(sizeof(ArgList)), stackPointerRegister);
-
- // Set up arguments
- subPtr(Imm32(1), regT0); // Don't include 'this' in argcount
-
- // Push argcount
- storePtr(regT0, Address(stackPointerRegister, OBJECT_OFFSETOF(ArgList, m_argCount)));
-
- // Calculate the start of the callframe header, and store in regT1
- move(callFrameRegister, regT1);
- sub32(Imm32(RegisterFile::CallFrameHeaderSize * (int32_t)sizeof(Register)), regT1);
-
- // Calculate start of arguments as callframe header - sizeof(Register) * argcount (regT1)
- mul32(Imm32(sizeof(Register)), regT0, regT0);
- subPtr(regT0, regT1);
-
- // push pointer to arguments
- storePtr(regT1, Address(stackPointerRegister, OBJECT_OFFSETOF(ArgList, m_args)));
-
- // Argument passing method:
- // r0 - points to return value
- // r1 - callFrame
- // r2 - callee
- // stack: this(JSValue) and a pointer to ArgList
-
-#if OS(WINCE)
- // Setup arg4:
- push(stackPointerRegister);
-
- // Setup arg3:
- // regT1 currently points to the first argument, regT1-sizeof(Register) points to 'this'
- load32(Address(regT1, -(int32_t)sizeof(void*) * 2), ARMRegisters::r3);
- push(ARMRegisters::r3);
- load32(Address(regT1, -(int32_t)sizeof(void*)), regT3);
- storePtr(regT3, Address(stackPointerRegister));
+ breakpoint();
+#endif // CPU(X86)
- // Setup arg2:
- emitGetFromCallFrameHeaderPtr(RegisterFile::Callee, regT2);
+ // Check for an exception
+ Jump sawException = branch32(NotEqual, AbsoluteAddress(reinterpret_cast<char*>(&globalData->exception) + OBJECT_OFFSETOF(JSValue, u.asBits.tag)), Imm32(JSValue::EmptyValueTag));
- // Setup arg1:
- move(callFrameRegister, regT1);
+ // Return.
+ ret();
- // Setup arg0:
- move(stackPointerRegister, regT0);
+ // Handle an exception
+ sawException.link(this);
+ peek(regT1);
+ move(ImmPtr(&globalData->exceptionLocation), regT2);
+ storePtr(regT1, regT2);
+ poke(callFrameRegister, 1 + OBJECT_OFFSETOF(struct JITStackFrame, callFrame) / sizeof(void*));
+ poke(ImmPtr(FunctionPtr(ctiVMThrowTrampoline).value()));
+ ret();
- Call nativeCall = call();
+ return nativeCallThunk;
+}
- load32(Address(stackPointerRegister, 0), regT0);
- load32(Address(stackPointerRegister, 4), regT1);
+JIT::CodePtr JIT::privateCompileCTINativeCall(PassRefPtr<ExecutablePool> executablePool, JSGlobalData* globalData, NativeFunction func)
+{
+ Label nativeCallThunk = align();
- addPtr(Imm32(sizeof(ArgList) + 8), stackPointerRegister);
-#else // OS(WINCE)
- move(stackPointerRegister, regT3);
- subPtr(Imm32(8), stackPointerRegister);
- move(stackPointerRegister, regT0);
- subPtr(Imm32(8 + 4 + 4 /* padding */), stackPointerRegister);
+#if CPU(X86)
+ // Load caller frame's scope chain into this callframe so that whatever we call can
+ // get to its global data.
+ emitGetFromCallFrameHeaderPtr(RegisterFile::CallerFrame, regT0);
+ emitGetFromCallFrameHeaderPtr(RegisterFile::ScopeChain, regT1, regT0);
+ emitPutToCallFrameHeader(regT1, RegisterFile::ScopeChain);
- // Setup arg4:
- storePtr(regT3, Address(stackPointerRegister, 8));
+ peek(regT1);
+ emitPutToCallFrameHeader(regT1, RegisterFile::ReturnPC);
- // Setup arg3:
- // regT1 currently points to the first argument, regT1-sizeof(Register) points to 'this'
- load32(Address(regT1, -(int32_t)sizeof(void*) * 2), regT3);
- storePtr(regT3, Address(stackPointerRegister, 0));
- load32(Address(regT1, -(int32_t)sizeof(void*)), regT3);
- storePtr(regT3, Address(stackPointerRegister, 4));
+ // Calling convention: f(ecx, edx, ...);
+ // Host function signature: f(ExecState*);
+ move(callFrameRegister, X86Registers::ecx);
- // Setup arg2:
- emitGetFromCallFrameHeaderPtr(RegisterFile::Callee, regT2);
+ subPtr(Imm32(16 - sizeof(void*)), stackPointerRegister); // Align stack after call.
- // Setup arg1:
- move(callFrameRegister, regT1);
+ move(regT0, callFrameRegister); // Eagerly restore caller frame register to avoid loading from stack.
+ // call the function
Call nativeCall = call();
- // Load return value
- load32(Address(stackPointerRegister, 16), regT0);
- load32(Address(stackPointerRegister, 20), regT1);
-
- addPtr(Imm32(sizeof(ArgList) + 16 + 8), stackPointerRegister);
-#endif // OS(WINCE)
+ addPtr(Imm32(16 - sizeof(void*)), stackPointerRegister);
-#endif
+#elif ENABLE(JIT_OPTIMIZE_NATIVE_CALL)
+#error "JIT_OPTIMIZE_NATIVE_CALL not yet supported on this platform."
+#else
+ breakpoint();
+#endif // CPU(X86)
// Check for an exception
- move(ImmPtr(&globalData->exception), regT2);
- Jump sawException = branch32(NotEqual, tagFor(0, regT2), Imm32(JSValue::EmptyValueTag));
-
- // Grab the return address.
- emitGetFromCallFrameHeaderPtr(RegisterFile::ReturnPC, regT3);
-
- // Restore our caller's "r".
- emitGetFromCallFrameHeaderPtr(RegisterFile::CallerFrame, callFrameRegister);
+ Jump sawException = branch32(NotEqual, AbsoluteAddress(reinterpret_cast<char*>(&globalData->exception) + OBJECT_OFFSETOF(JSValue, u.asBits.tag)), Imm32(JSValue::EmptyValueTag));
// Return.
- restoreReturnAddressBeforeReturn(regT3);
ret();
// Handle an exception
sawException.link(this);
- // Grab the return address.
- emitGetFromCallFrameHeaderPtr(RegisterFile::ReturnPC, regT1);
+ peek(regT1);
move(ImmPtr(&globalData->exceptionLocation), regT2);
storePtr(regT1, regT2);
- move(ImmPtr(FunctionPtr(ctiVMThrowTrampoline).value()), regT2);
- emitGetFromCallFrameHeaderPtr(RegisterFile::CallerFrame, callFrameRegister);
- poke(callFrameRegister, OBJECT_OFFSETOF(struct JITStackFrame, callFrame) / sizeof(void*));
- restoreReturnAddressBeforeReturn(regT2);
+ poke(callFrameRegister, 1 + OBJECT_OFFSETOF(struct JITStackFrame, callFrame) / sizeof(void*));
+ poke(ImmPtr(FunctionPtr(ctiVMThrowTrampoline).value()));
ret();
-#elif ENABLE(JIT_OPTIMIZE_NATIVE_CALL)
-#error "JIT_OPTIMIZE_NATIVE_CALL not yet supported on this platform."
-#else
- breakpoint();
-#endif
-
// All trampolines constructed! copy the code, link up calls, and set the pointers on the Machine object.
LinkBuffer patchBuffer(this, executablePool);
-#if ENABLE(JIT_OPTIMIZE_NATIVE_CALL)
patchBuffer.link(nativeCall, FunctionPtr(func));
-#endif
CodeRef finalCode = patchBuffer.finalizeCode();
return trampolineAt(finalCode, nativeCallThunk);
@@ -1814,6 +1361,22 @@ void JIT::emit_op_init_arguments(Instruction* currentInstruction)
emitStore(unmodifiedArgumentsRegister(dst), JSValue());
}
+void JIT::emit_op_get_callee(Instruction* currentInstruction)
+{
+ int dst = currentInstruction[1].u.operand;
+ emitGetFromCallFrameHeaderPtr(RegisterFile::Callee, regT0);
+ emitStoreCell(dst, regT0);
+}
+
+void JIT::emit_op_create_this(Instruction* currentInstruction)
+{
+ unsigned protoRegister = currentInstruction[2].u.operand;
+ emitLoad(protoRegister, regT1, regT0);
+ JITStubCall stubCall(this, cti_op_create_this);
+ stubCall.addArgument(regT1, regT0);
+ stubCall.call(currentInstruction[1].u.operand);
+}
+
void JIT::emit_op_convert_this(Instruction* currentInstruction)
{
unsigned thisRegister = currentInstruction[1].u.operand;
diff --git a/JavaScriptCore/jit/JITStubs.cpp b/JavaScriptCore/jit/JITStubs.cpp
index aea80a7..9da3c40 100644
--- a/JavaScriptCore/jit/JITStubs.cpp
+++ b/JavaScriptCore/jit/JITStubs.cpp
@@ -1202,6 +1202,28 @@ RVCT()
#define DEFINE_STUB_FUNCTION(rtype, op) rtype JIT_STUB cti_##op(STUB_ARGS_DECLARATION)
#endif
+DEFINE_STUB_FUNCTION(EncodedJSValue, op_create_this)
+{
+ STUB_INIT_STACK_FRAME(stackFrame);
+ CallFrame* callFrame = stackFrame.callFrame;
+
+ JSFunction* constructor = asFunction(callFrame->callee());
+#if !ASSERT_DISABLED
+ ConstructData constructData;
+ ASSERT(constructor->getConstructData(constructData) == ConstructTypeJS);
+#endif
+
+ Structure* structure;
+ JSValue proto = stackFrame.args[0].jsValue();
+ if (proto.isObject())
+ structure = asObject(proto)->inheritorID();
+ else
+ structure = constructor->scope().node()->globalObject->emptyObjectStructure();
+ JSValue result = new (&callFrame->globalData()) JSObject(structure);
+
+ return JSValue::encode(result);
+}
+
DEFINE_STUB_FUNCTION(EncodedJSValue, op_convert_this)
{
STUB_INIT_STACK_FRAME(stackFrame);
@@ -1783,10 +1805,10 @@ DEFINE_STUB_FUNCTION(void*, op_call_jitCompile)
#if !ASSERT_DISABLED
CallData callData;
- ASSERT(stackFrame.args[0].jsValue().getCallData(callData) == CallTypeJS);
+ ASSERT(stackFrame.callFrame->callee()->getCallData(callData) == CallTypeJS);
#endif
- JSFunction* function = asFunction(stackFrame.args[0].jsValue());
+ JSFunction* function = asFunction(stackFrame.callFrame->callee());
ASSERT(!function->isHostFunction());
FunctionExecutable* executable = function->jsExecutable();
ScopeChainNode* callDataScopeChain = function->scope().node();
@@ -1800,11 +1822,11 @@ DEFINE_STUB_FUNCTION(void*, op_construct_jitCompile)
STUB_INIT_STACK_FRAME(stackFrame);
#if !ASSERT_DISABLED
- CallData callData;
- ASSERT(stackFrame.args[0].jsValue().getCallData(callData) == CallTypeJS);
+ ConstructData constructData;
+ ASSERT(asFunction(stackFrame.callFrame->callee())->getConstructData(constructData) == ConstructTypeJS);
#endif
- JSFunction* function = asFunction(stackFrame.args[0].jsValue());
+ JSFunction* function = asFunction(stackFrame.callFrame->callee());
ASSERT(!function->isHostFunction());
FunctionExecutable* executable = function->jsExecutable();
ScopeChainNode* callDataScopeChain = function->scope().node();
@@ -1813,139 +1835,183 @@ DEFINE_STUB_FUNCTION(void*, op_construct_jitCompile)
return function;
}
-DEFINE_STUB_FUNCTION(VoidPtrPair, op_call_arityCheck)
+DEFINE_STUB_FUNCTION(void*, op_call_arityCheck)
{
STUB_INIT_STACK_FRAME(stackFrame);
CallFrame* callFrame = stackFrame.callFrame;
- JSFunction* callee = asFunction(stackFrame.args[0].jsValue());
+ JSFunction* callee = asFunction(callFrame->callee());
ASSERT(!callee->isHostFunction());
CodeBlock* newCodeBlock = &callee->jsExecutable()->generatedBytecodeForCall();
- int argCount = stackFrame.args[2].int32();
+ int argCount = callFrame->argumentCountIncludingThis();
+ ReturnAddressPtr pc = callFrame->returnPC();
ASSERT(argCount != newCodeBlock->m_numParameters);
CallFrame* oldCallFrame = callFrame->callerFrame();
+ Register* r;
if (argCount > newCodeBlock->m_numParameters) {
size_t numParameters = newCodeBlock->m_numParameters;
- Register* r = callFrame->registers() + numParameters;
+ r = callFrame->registers() + numParameters;
+ Register* newEnd = r + newCodeBlock->m_numCalleeRegisters;
+ if (!stackFrame.registerFile->grow(newEnd)) {
+ // Rewind to the previous call frame because op_call already optimistically
+ // moved the call frame forward.
+ stackFrame.callFrame = oldCallFrame;
+ throwStackOverflowError(oldCallFrame, stackFrame.globalData, pc, STUB_RETURN_ADDRESS);
+ return 0;
+ }
Register* argv = r - RegisterFile::CallFrameHeaderSize - numParameters - argCount;
for (size_t i = 0; i < numParameters; ++i)
argv[i + argCount] = argv[i];
-
- callFrame = CallFrame::create(r);
- callFrame->setCallerFrame(oldCallFrame);
} else {
size_t omittedArgCount = newCodeBlock->m_numParameters - argCount;
- Register* r = callFrame->registers() + omittedArgCount;
+ r = callFrame->registers() + omittedArgCount;
Register* newEnd = r + newCodeBlock->m_numCalleeRegisters;
if (!stackFrame.registerFile->grow(newEnd)) {
// Rewind to the previous call frame because op_call already optimistically
// moved the call frame forward.
stackFrame.callFrame = oldCallFrame;
- throwStackOverflowError(oldCallFrame, stackFrame.globalData, stackFrame.args[1].returnAddress(), STUB_RETURN_ADDRESS);
- RETURN_POINTER_PAIR(0, 0);
+ throwStackOverflowError(oldCallFrame, stackFrame.globalData, pc, STUB_RETURN_ADDRESS);
+ return 0;
}
Register* argv = r - RegisterFile::CallFrameHeaderSize - omittedArgCount;
for (size_t i = 0; i < omittedArgCount; ++i)
argv[i] = jsUndefined();
-
- callFrame = CallFrame::create(r);
- callFrame->setCallerFrame(oldCallFrame);
}
- RETURN_POINTER_PAIR(callee, callFrame);
+ callFrame = CallFrame::create(r);
+ callFrame->setCallerFrame(oldCallFrame);
+ callFrame->setArgumentCountIncludingThis(argCount);
+ callFrame->setCallee(callee);
+ callFrame->setScopeChain(callee->scope().node());
+ callFrame->setReturnPC(pc.value());
+
+ ASSERT((void*)callFrame <= stackFrame.registerFile->end());
+ return callFrame;
}
-DEFINE_STUB_FUNCTION(VoidPtrPair, op_construct_arityCheck)
+DEFINE_STUB_FUNCTION(void*, op_construct_arityCheck)
{
STUB_INIT_STACK_FRAME(stackFrame);
CallFrame* callFrame = stackFrame.callFrame;
- JSFunction* callee = asFunction(stackFrame.args[0].jsValue());
+ JSFunction* callee = asFunction(callFrame->callee());
ASSERT(!callee->isHostFunction());
CodeBlock* newCodeBlock = &callee->jsExecutable()->generatedBytecodeForConstruct();
- int argCount = stackFrame.args[2].int32();
+ int argCount = callFrame->argumentCountIncludingThis();
+ ReturnAddressPtr pc = callFrame->returnPC();
ASSERT(argCount != newCodeBlock->m_numParameters);
CallFrame* oldCallFrame = callFrame->callerFrame();
+ Register* r;
if (argCount > newCodeBlock->m_numParameters) {
size_t numParameters = newCodeBlock->m_numParameters;
- Register* r = callFrame->registers() + numParameters;
+ r = callFrame->registers() + numParameters;
+ Register* newEnd = r + newCodeBlock->m_numCalleeRegisters;
+ if (!stackFrame.registerFile->grow(newEnd)) {
+ // Rewind to the previous call frame because op_call already optimistically
+ // moved the call frame forward.
+ stackFrame.callFrame = oldCallFrame;
+ throwStackOverflowError(oldCallFrame, stackFrame.globalData, pc, STUB_RETURN_ADDRESS);
+ return 0;
+ }
Register* argv = r - RegisterFile::CallFrameHeaderSize - numParameters - argCount;
for (size_t i = 0; i < numParameters; ++i)
argv[i + argCount] = argv[i];
-
- callFrame = CallFrame::create(r);
- callFrame->setCallerFrame(oldCallFrame);
} else {
size_t omittedArgCount = newCodeBlock->m_numParameters - argCount;
- Register* r = callFrame->registers() + omittedArgCount;
+ r = callFrame->registers() + omittedArgCount;
Register* newEnd = r + newCodeBlock->m_numCalleeRegisters;
if (!stackFrame.registerFile->grow(newEnd)) {
// Rewind to the previous call frame because op_call already optimistically
// moved the call frame forward.
stackFrame.callFrame = oldCallFrame;
- throwStackOverflowError(oldCallFrame, stackFrame.globalData, stackFrame.args[1].returnAddress(), STUB_RETURN_ADDRESS);
- RETURN_POINTER_PAIR(0, 0);
+ throwStackOverflowError(oldCallFrame, stackFrame.globalData, pc, STUB_RETURN_ADDRESS);
+ return 0;
}
Register* argv = r - RegisterFile::CallFrameHeaderSize - omittedArgCount;
for (size_t i = 0; i < omittedArgCount; ++i)
argv[i] = jsUndefined();
-
- callFrame = CallFrame::create(r);
- callFrame->setCallerFrame(oldCallFrame);
}
- RETURN_POINTER_PAIR(callee, callFrame);
+ callFrame = CallFrame::create(r);
+ callFrame->setCallerFrame(oldCallFrame);
+ callFrame->setArgumentCountIncludingThis(argCount);
+ callFrame->setCallee(callee);
+ callFrame->setScopeChain(callee->scope().node());
+ callFrame->setReturnPC(pc.value());
+
+ ASSERT((void*)callFrame <= stackFrame.registerFile->end());
+ return callFrame;
}
#if ENABLE(JIT_OPTIMIZE_CALL)
DEFINE_STUB_FUNCTION(void*, vm_lazyLinkCall)
{
STUB_INIT_STACK_FRAME(stackFrame);
- JSFunction* callee = asFunction(stackFrame.args[0].jsValue());
+ CallFrame* callFrame = stackFrame.callFrame;
+ JSFunction* callee = asFunction(callFrame->callee());
ExecutableBase* executable = callee->executable();
- JITCode& jitCode = executable->generatedJITCodeForCall();
-
+
+ MacroAssemblerCodePtr codePtr;
CodeBlock* codeBlock = 0;
- if (!executable->isHostFunction())
- codeBlock = &static_cast<FunctionExecutable*>(executable)->bytecodeForCall(stackFrame.callFrame, callee->scope().node());
- CallLinkInfo* callLinkInfo = &stackFrame.callFrame->callerFrame()->codeBlock()->getCallLinkInfo(stackFrame.args[1].returnAddress());
+ if (executable->isHostFunction())
+ codePtr = executable->generatedJITCodeForCall().addressForCall();
+ else {
+ FunctionExecutable* functionExecutable = static_cast<FunctionExecutable*>(executable);
+ codeBlock = &functionExecutable->bytecodeForCall(stackFrame.callFrame, callee->scope().node());
+ functionExecutable->jitCodeForCall(callFrame, callee->scope().node());
+ if (callFrame->argumentCountIncludingThis() == static_cast<size_t>(codeBlock->m_numParameters))
+ codePtr = functionExecutable->generatedJITCodeForCall().addressForCall();
+ else
+ codePtr = functionExecutable->generatedJITCodeForCallWithArityCheck();
+ }
+ CallLinkInfo* callLinkInfo = &stackFrame.callFrame->callerFrame()->codeBlock()->getCallLinkInfo(callFrame->returnPC());
if (!callLinkInfo->seenOnce())
callLinkInfo->setSeen();
else
- JIT::linkCall(callee, stackFrame.callFrame->callerFrame()->codeBlock(), codeBlock, jitCode, callLinkInfo, stackFrame.args[2].int32(), stackFrame.globalData);
+ JIT::linkCall(callee, stackFrame.callFrame->callerFrame()->codeBlock(), codeBlock, codePtr, callLinkInfo, callFrame->argumentCountIncludingThis(), stackFrame.globalData);
- return jitCode.addressForCall().executableAddress();
+ return codePtr.executableAddress();
}
DEFINE_STUB_FUNCTION(void*, vm_lazyLinkConstruct)
{
STUB_INIT_STACK_FRAME(stackFrame);
- JSFunction* callee = asFunction(stackFrame.args[0].jsValue());
+ CallFrame* callFrame = stackFrame.callFrame;
+ JSFunction* callee = asFunction(callFrame->callee());
ExecutableBase* executable = callee->executable();
- JITCode& jitCode = executable->generatedJITCodeForConstruct();
-
+
+ MacroAssemblerCodePtr codePtr;
CodeBlock* codeBlock = 0;
- if (!executable->isHostFunction())
- codeBlock = &static_cast<FunctionExecutable*>(executable)->bytecodeForConstruct(stackFrame.callFrame, callee->scope().node());
- CallLinkInfo* callLinkInfo = &stackFrame.callFrame->callerFrame()->codeBlock()->getCallLinkInfo(stackFrame.args[1].returnAddress());
+ if (executable->isHostFunction())
+ codePtr = executable->generatedJITCodeForConstruct().addressForCall();
+ else {
+ FunctionExecutable* functionExecutable = static_cast<FunctionExecutable*>(executable);
+ codeBlock = &functionExecutable->bytecodeForConstruct(stackFrame.callFrame, callee->scope().node());
+ functionExecutable->jitCodeForConstruct(callFrame, callee->scope().node());
+ if (callFrame->argumentCountIncludingThis() == static_cast<size_t>(codeBlock->m_numParameters))
+ codePtr = functionExecutable->generatedJITCodeForConstruct().addressForCall();
+ else
+ codePtr = functionExecutable->generatedJITCodeForConstructWithArityCheck();
+ }
+ CallLinkInfo* callLinkInfo = &stackFrame.callFrame->callerFrame()->codeBlock()->getCallLinkInfo(callFrame->returnPC());
if (!callLinkInfo->seenOnce())
callLinkInfo->setSeen();
else
- JIT::linkConstruct(callee, stackFrame.callFrame->callerFrame()->codeBlock(), codeBlock, jitCode, callLinkInfo, stackFrame.args[2].int32(), stackFrame.globalData);
+ JIT::linkConstruct(callee, stackFrame.callFrame->callerFrame()->codeBlock(), codeBlock, codePtr, callLinkInfo, callFrame->argumentCountIncludingThis(), stackFrame.globalData);
- return jitCode.addressForCall().executableAddress();
+ return codePtr.executableAddress();
}
#endif // !ENABLE(JIT_OPTIMIZE_CALL)
@@ -1975,22 +2041,13 @@ DEFINE_STUB_FUNCTION(EncodedJSValue, op_call_NotJSFunction)
CallFrame* previousCallFrame = stackFrame.callFrame;
CallFrame* callFrame = CallFrame::create(previousCallFrame->registers() + registerOffset);
- callFrame->init(0, static_cast<Instruction*>((STUB_RETURN_ADDRESS).value()), previousCallFrame->scopeChain(), previousCallFrame, 0, argCount, 0);
+ callFrame->init(0, static_cast<Instruction*>((STUB_RETURN_ADDRESS).value()), previousCallFrame->scopeChain(), previousCallFrame, argCount, asObject(funcVal));
stackFrame.callFrame = callFrame;
- Register* argv = stackFrame.callFrame->registers() - RegisterFile::CallFrameHeaderSize - argCount;
- ArgList argList(argv + 1, argCount - 1);
-
JSValue returnValue;
{
SamplingTool::HostCallRecord callRecord(CTI_SAMPLER);
-
- // FIXME: All host methods should be calling toThisObject, but this is not presently the case.
- JSValue thisValue = argv[0].jsValue();
- if (thisValue == jsNull())
- thisValue = callFrame->globalThisValue();
-
- returnValue = callData.native.function(callFrame, asObject(funcVal), thisValue, argList);
+ returnValue = callData.native.function(callFrame);
}
stackFrame.callFrame = previousCallFrame;
CHECK_FOR_EXCEPTION();
@@ -2102,32 +2159,6 @@ DEFINE_STUB_FUNCTION(EncodedJSValue, op_resolve)
VM_THROW_EXCEPTION();
}
-DEFINE_STUB_FUNCTION(JSObject*, op_construct_JSConstruct)
-{
- STUB_INIT_STACK_FRAME(stackFrame);
-
- JSFunction* constructor = asFunction(stackFrame.args[0].jsValue());
- if (constructor->isHostFunction()) {
- CallFrame* callFrame = stackFrame.callFrame;
- CodeBlock* codeBlock = callFrame->codeBlock();
- unsigned vPCIndex = codeBlock->bytecodeOffset(callFrame, STUB_RETURN_ADDRESS);
- stackFrame.globalData->exception = createNotAConstructorError(callFrame, constructor, vPCIndex, codeBlock);
- VM_THROW_EXCEPTION();
- }
-
-#if !ASSERT_DISABLED
- ConstructData constructData;
- ASSERT(constructor->getConstructData(constructData) == ConstructTypeJS);
-#endif
-
- Structure* structure;
- if (stackFrame.args[3].jsValue().isObject())
- structure = asObject(stackFrame.args[3].jsValue())->inheritorID();
- else
- structure = constructor->scope().node()->globalObject->emptyObjectStructure();
- return new (stackFrame.globalData) JSObject(structure);
-}
-
DEFINE_STUB_FUNCTION(EncodedJSValue, op_construct_NotJSConstruct)
{
STUB_INIT_STACK_FRAME(stackFrame);
@@ -2136,13 +2167,14 @@ DEFINE_STUB_FUNCTION(EncodedJSValue, op_construct_NotJSConstruct)
JSValue constrVal = stackFrame.args[0].jsValue();
int argCount = stackFrame.args[2].int32();
- int thisRegister = stackFrame.args[4].int32();
ConstructData constructData;
ConstructType constructType = constrVal.getConstructData(constructData);
if (constructType == ConstructTypeHost) {
- ArgList argList(callFrame->registers() + thisRegister + 1, argCount - 1);
+ int registerOffset = stackFrame.args[1].int32();
+ Register* thisRegister = callFrame->registers() + registerOffset - RegisterFile::CallFrameHeaderSize - argCount;
+ ArgList argList(thisRegister + 1, argCount - 1);
JSValue returnValue;
{
@@ -2406,7 +2438,7 @@ DEFINE_STUB_FUNCTION(int, op_load_varargs)
stackFrame.globalData->exception = createStackOverflowError(callFrame);
VM_THROW_EXCEPTION();
}
- int32_t expectedParams = callFrame->callee()->jsExecutable()->parameterCount();
+ int32_t expectedParams = asFunction(callFrame->callee())->jsExecutable()->parameterCount();
int32_t inplaceArgs = min(providedParams, expectedParams);
Register* inplaceArgsDst = callFrame->registers() + argsOffset;
@@ -2993,10 +3025,10 @@ DEFINE_STUB_FUNCTION(EncodedJSValue, op_call_eval)
Register* newCallFrame = callFrame->registers() + registerOffset;
Register* argv = newCallFrame - RegisterFile::CallFrameHeaderSize - argCount;
- JSValue thisValue = argv[0].jsValue();
+ JSValue baseValue = argv[0].jsValue();
JSGlobalObject* globalObject = callFrame->scopeChain()->globalObject;
- if (thisValue == globalObject && funcVal == globalObject->evalFunction()) {
+ if (baseValue == globalObject && funcVal == globalObject->evalFunction()) {
JSValue exceptionValue;
JSValue result = interpreter->callEval(callFrame, registerFile, argv, argCount, registerOffset, exceptionValue);
if (UNLIKELY(exceptionValue)) {
@@ -3426,7 +3458,7 @@ PassRefPtr<NativeExecutable> JITThunks::hostFunctionStub(JSGlobalData* globalDat
{
std::pair<HostFunctionStubMap::iterator, bool> entry = m_hostFunctionStubMap.add(function, 0);
if (entry.second)
- entry.first->second = NativeExecutable::create(JIT::compileCTINativeCall(globalData, m_executablePool, function), function);
+ entry.first->second = NativeExecutable::create(JIT::compileCTINativeCall(globalData, m_executablePool, function), function, ctiNativeConstruct(), callHostFunctionAsConstructor);
return entry.first->second;
}
@@ -3434,7 +3466,7 @@ PassRefPtr<NativeExecutable> JITThunks::hostFunctionStub(JSGlobalData* globalDat
{
std::pair<HostFunctionStubMap::iterator, bool> entry = m_hostFunctionStubMap.add(function, 0);
if (entry.second)
- entry.first->second = NativeExecutable::create(generator(globalData, m_executablePool.get()), function);
+ entry.first->second = NativeExecutable::create(generator(globalData, m_executablePool.get()), function, ctiNativeConstruct(), callHostFunctionAsConstructor);
return entry.first->second;
}
diff --git a/JavaScriptCore/jit/JITStubs.h b/JavaScriptCore/jit/JITStubs.h
index e5d1419..bfed811 100644
--- a/JavaScriptCore/jit/JITStubs.h
+++ b/JavaScriptCore/jit/JITStubs.h
@@ -82,6 +82,7 @@ namespace JSC {
MacroAssemblerCodePtr ctiVirtualCall;
MacroAssemblerCodePtr ctiVirtualConstruct;
MacroAssemblerCodePtr ctiNativeCall;
+ MacroAssemblerCodePtr ctiNativeConstruct;
MacroAssemblerCodePtr ctiSoftModulo;
};
@@ -245,23 +246,6 @@ namespace JSC {
#endif
#endif
-#if CPU(X86_64)
- struct VoidPtrPair {
- void* first;
- void* second;
- };
- #define RETURN_POINTER_PAIR(a,b) VoidPtrPair pair = { a, b }; return pair
-#else
- // MSVC doesn't support returning a two-value struct in two registers, so
- // we cast the struct to int64_t instead.
- typedef uint64_t VoidPtrPair;
- union VoidPtrPairUnion {
- struct { void* first; void* second; } s;
- VoidPtrPair i;
- };
- #define RETURN_POINTER_PAIR(a,b) VoidPtrPairUnion pair = {{ a, b }}; return pair.i
-#endif
-
extern "C" void ctiVMThrowTrampoline();
extern "C" void ctiOpThrowNotCaught();
extern "C" EncodedJSValue ctiTrampoline(void* code, RegisterFile*, CallFrame*, JSValue* exception, Profiler**, JSGlobalData*);
@@ -280,6 +264,7 @@ namespace JSC {
MacroAssemblerCodePtr ctiVirtualCall() { return m_trampolineStructure.ctiVirtualCall; }
MacroAssemblerCodePtr ctiVirtualConstruct() { return m_trampolineStructure.ctiVirtualConstruct; }
MacroAssemblerCodePtr ctiNativeCall() { return m_trampolineStructure.ctiNativeCall; }
+ MacroAssemblerCodePtr ctiNativeConstruct() { return m_trampolineStructure.ctiNativeConstruct; }
MacroAssemblerCodePtr ctiSoftModulo() { return m_trampolineStructure.ctiSoftModulo; }
MacroAssemblerCodePtr ctiStub(JSGlobalData* globalData, ThunkGenerator generator);
@@ -305,6 +290,7 @@ extern "C" {
EncodedJSValue JIT_STUB cti_op_call_NotJSFunction(STUB_ARGS_DECLARATION);
EncodedJSValue JIT_STUB cti_op_call_eval(STUB_ARGS_DECLARATION);
EncodedJSValue JIT_STUB cti_op_construct_NotJSConstruct(STUB_ARGS_DECLARATION);
+ EncodedJSValue JIT_STUB cti_op_create_this(STUB_ARGS_DECLARATION);
EncodedJSValue JIT_STUB cti_op_convert_this(STUB_ARGS_DECLARATION);
EncodedJSValue JIT_STUB cti_op_create_arguments(STUB_ARGS_DECLARATION);
EncodedJSValue JIT_STUB cti_op_create_arguments_no_params(STUB_ARGS_DECLARATION);
@@ -362,7 +348,6 @@ extern "C" {
EncodedJSValue JIT_STUB cti_op_urshift(STUB_ARGS_DECLARATION);
EncodedJSValue JIT_STUB cti_to_object(STUB_ARGS_DECLARATION);
EncodedJSValue JIT_STUB cti_vm_throw(STUB_ARGS_DECLARATION);
- JSObject* JIT_STUB cti_op_construct_JSConstruct(STUB_ARGS_DECLARATION);
JSObject* JIT_STUB cti_op_new_array(STUB_ARGS_DECLARATION);
JSObject* JIT_STUB cti_op_new_error(STUB_ARGS_DECLARATION);
JSObject* JIT_STUB cti_op_new_func(STUB_ARGS_DECLARATION);
@@ -374,8 +359,6 @@ extern "C" {
JSObject* JIT_STUB cti_op_push_scope(STUB_ARGS_DECLARATION);
JSObject* JIT_STUB cti_op_put_by_id_transition_realloc(STUB_ARGS_DECLARATION);
JSPropertyNameIterator* JIT_STUB cti_op_get_pnames(STUB_ARGS_DECLARATION);
- VoidPtrPair JIT_STUB cti_op_call_arityCheck(STUB_ARGS_DECLARATION);
- VoidPtrPair JIT_STUB cti_op_construct_arityCheck(STUB_ARGS_DECLARATION);
int JIT_STUB cti_op_eq(STUB_ARGS_DECLARATION);
int JIT_STUB cti_op_eq_strings(STUB_ARGS_DECLARATION);
int JIT_STUB cti_op_jless(STUB_ARGS_DECLARATION);
@@ -403,6 +386,8 @@ extern "C" {
void JIT_STUB cti_op_tear_off_activation(STUB_ARGS_DECLARATION);
void JIT_STUB cti_op_tear_off_arguments(STUB_ARGS_DECLARATION);
void JIT_STUB cti_register_file_check(STUB_ARGS_DECLARATION);
+ void* JIT_STUB cti_op_call_arityCheck(STUB_ARGS_DECLARATION);
+ void* JIT_STUB cti_op_construct_arityCheck(STUB_ARGS_DECLARATION);
void* JIT_STUB cti_op_call_jitCompile(STUB_ARGS_DECLARATION);
void* JIT_STUB cti_op_construct_jitCompile(STUB_ARGS_DECLARATION);
void* JIT_STUB cti_op_switch_char(STUB_ARGS_DECLARATION);
diff --git a/JavaScriptCore/jsc.cpp b/JavaScriptCore/jsc.cpp
index 46eaccc..35ac7f4 100644
--- a/JavaScriptCore/jsc.cpp
+++ b/JavaScriptCore/jsc.cpp
@@ -71,19 +71,19 @@ using namespace WTF;
static void cleanupGlobalData(JSGlobalData*);
static bool fillBufferWithContentsOfFile(const UString& fileName, Vector<char>& buffer);
-static JSValue JSC_HOST_CALL functionPrint(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL functionDebug(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL functionGC(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL functionVersion(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL functionRun(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL functionLoad(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL functionCheckSyntax(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL functionReadline(ExecState*, JSObject*, JSValue, const ArgList&);
-static NO_RETURN_WITH_VALUE JSValue JSC_HOST_CALL functionQuit(ExecState*, JSObject*, JSValue, const ArgList&);
+static JSValue JSC_HOST_CALL functionPrint(ExecState*);
+static JSValue JSC_HOST_CALL functionDebug(ExecState*);
+static JSValue JSC_HOST_CALL functionGC(ExecState*);
+static JSValue JSC_HOST_CALL functionVersion(ExecState*);
+static JSValue JSC_HOST_CALL functionRun(ExecState*);
+static JSValue JSC_HOST_CALL functionLoad(ExecState*);
+static JSValue JSC_HOST_CALL functionCheckSyntax(ExecState*);
+static JSValue JSC_HOST_CALL functionReadline(ExecState*);
+static NO_RETURN_WITH_VALUE JSValue JSC_HOST_CALL functionQuit(ExecState*);
#if ENABLE(SAMPLING_FLAGS)
-static JSValue JSC_HOST_CALL functionSetSamplingFlags(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL functionClearSamplingFlags(ExecState*, JSObject*, JSValue, const ArgList&);
+static JSValue JSC_HOST_CALL functionSetSamplingFlags(ExecState*);
+static JSValue JSC_HOST_CALL functionClearSamplingFlags(ExecState*);
#endif
struct Script {
@@ -171,13 +171,13 @@ GlobalObject::GlobalObject(const Vector<UString>& arguments)
putDirect(Identifier(globalExec(), "arguments"), array);
}
-JSValue JSC_HOST_CALL functionPrint(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL functionPrint(ExecState* exec)
{
- for (unsigned i = 0; i < args.size(); ++i) {
+ for (unsigned i = 0; i < exec->argumentCount(); ++i) {
if (i)
putchar(' ');
- printf("%s", args.at(i).toString(exec).UTF8String().data());
+ printf("%s", exec->argument(i).toString(exec).UTF8String().data());
}
putchar('\n');
@@ -185,30 +185,30 @@ JSValue JSC_HOST_CALL functionPrint(ExecState* exec, JSObject*, JSValue, const A
return jsUndefined();
}
-JSValue JSC_HOST_CALL functionDebug(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL functionDebug(ExecState* exec)
{
- fprintf(stderr, "--> %s\n", args.at(0).toString(exec).UTF8String().data());
+ fprintf(stderr, "--> %s\n", exec->argument(0).toString(exec).UTF8String().data());
return jsUndefined();
}
-JSValue JSC_HOST_CALL functionGC(ExecState* exec, JSObject*, JSValue, const ArgList&)
+JSValue JSC_HOST_CALL functionGC(ExecState* exec)
{
JSLock lock(SilenceAssertionsOnly);
exec->heap()->collectAllGarbage();
return jsUndefined();
}
-JSValue JSC_HOST_CALL functionVersion(ExecState*, JSObject*, JSValue, const ArgList&)
+JSValue JSC_HOST_CALL functionVersion(ExecState*)
{
// We need this function for compatibility with the Mozilla JS tests but for now
// we don't actually do any version-specific handling
return jsUndefined();
}
-JSValue JSC_HOST_CALL functionRun(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL functionRun(ExecState* exec)
{
StopWatch stopWatch;
- UString fileName = args.at(0).toString(exec);
+ UString fileName = exec->argument(0).toString(exec);
Vector<char> script;
if (!fillBufferWithContentsOfFile(fileName, script))
return throwError(exec, GeneralError, "Could not open file.");
@@ -222,11 +222,9 @@ JSValue JSC_HOST_CALL functionRun(ExecState* exec, JSObject*, JSValue, const Arg
return jsNumber(globalObject->globalExec(), stopWatch.getElapsedMS());
}
-JSValue JSC_HOST_CALL functionLoad(ExecState* exec, JSObject* o, JSValue v, const ArgList& args)
+JSValue JSC_HOST_CALL functionLoad(ExecState* exec)
{
- UNUSED_PARAM(o);
- UNUSED_PARAM(v);
- UString fileName = args.at(0).toString(exec);
+ UString fileName = exec->argument(0).toString(exec);
Vector<char> script;
if (!fillBufferWithContentsOfFile(fileName, script))
return throwError(exec, GeneralError, "Could not open file.");
@@ -238,11 +236,9 @@ JSValue JSC_HOST_CALL functionLoad(ExecState* exec, JSObject* o, JSValue v, cons
return result.value();
}
-JSValue JSC_HOST_CALL functionCheckSyntax(ExecState* exec, JSObject* o, JSValue v, const ArgList& args)
+JSValue JSC_HOST_CALL functionCheckSyntax(ExecState* exec)
{
- UNUSED_PARAM(o);
- UNUSED_PARAM(v);
- UString fileName = args.at(0).toString(exec);
+ UString fileName = exec->argument(0).toString(exec);
Vector<char> script;
if (!fillBufferWithContentsOfFile(fileName, script))
return throwError(exec, GeneralError, "Could not open file.");
@@ -255,20 +251,20 @@ JSValue JSC_HOST_CALL functionCheckSyntax(ExecState* exec, JSObject* o, JSValue
}
#if ENABLE(SAMPLING_FLAGS)
-JSValue JSC_HOST_CALL functionSetSamplingFlags(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL functionSetSamplingFlags(ExecState* exec)
{
- for (unsigned i = 0; i < args.size(); ++i) {
- unsigned flag = static_cast<unsigned>(args.at(i).toNumber(exec));
+ for (unsigned i = 0; i < exec->argumentCount(); ++i) {
+ unsigned flag = static_cast<unsigned>(exec->argument(i).toNumber(exec));
if ((flag >= 1) && (flag <= 32))
SamplingFlags::setFlag(flag);
}
return jsNull();
}
-JSValue JSC_HOST_CALL functionClearSamplingFlags(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL functionClearSamplingFlags(ExecState* exec)
{
- for (unsigned i = 0; i < args.size(); ++i) {
- unsigned flag = static_cast<unsigned>(args.at(i).toNumber(exec));
+ for (unsigned i = 0; i < exec->argumentCount(); ++i) {
+ unsigned flag = static_cast<unsigned>(exec->argument(i).toNumber(exec));
if ((flag >= 1) && (flag <= 32))
SamplingFlags::clearFlag(flag);
}
@@ -276,7 +272,7 @@ JSValue JSC_HOST_CALL functionClearSamplingFlags(ExecState* exec, JSObject*, JSV
}
#endif
-JSValue JSC_HOST_CALL functionReadline(ExecState* exec, JSObject*, JSValue, const ArgList&)
+JSValue JSC_HOST_CALL functionReadline(ExecState* exec)
{
Vector<char, 256> line;
int c;
@@ -290,7 +286,7 @@ JSValue JSC_HOST_CALL functionReadline(ExecState* exec, JSObject*, JSValue, cons
return jsString(exec, line.data());
}
-JSValue JSC_HOST_CALL functionQuit(ExecState* exec, JSObject*, JSValue, const ArgList&)
+JSValue JSC_HOST_CALL functionQuit(ExecState* exec)
{
// Technically, destroying the heap in the middle of JS execution is a no-no,
// but we want to maintain compatibility with the Mozilla test suite, so
diff --git a/JavaScriptCore/runtime/ArgList.h b/JavaScriptCore/runtime/ArgList.h
index 8e1fdbe..cd563a2 100644
--- a/JavaScriptCore/runtime/ArgList.h
+++ b/JavaScriptCore/runtime/ArgList.h
@@ -22,6 +22,7 @@
#ifndef ArgList_h
#define ArgList_h
+#include "CallFrame.h"
#include "Register.h"
#include <wtf/HashSet.h>
#include <wtf/Noncopyable.h>
@@ -187,6 +188,12 @@ namespace JSC {
{
}
+ ArgList(ExecState* exec)
+ : m_args(reinterpret_cast<JSValue*>(&exec[exec->hostThisRegister() + 1]))
+ , m_argCount(exec->argumentCount())
+ {
+ }
+
ArgList(JSValue* args, unsigned argCount)
: m_args(args)
, m_argCount(argCount)
diff --git a/JavaScriptCore/runtime/Arguments.h b/JavaScriptCore/runtime/Arguments.h
index 5b8e51c..169c6f6 100644
--- a/JavaScriptCore/runtime/Arguments.h
+++ b/JavaScriptCore/runtime/Arguments.h
@@ -119,10 +119,10 @@ namespace JSC {
ALWAYS_INLINE void Arguments::getArgumentsData(CallFrame* callFrame, JSFunction*& function, ptrdiff_t& firstParameterIndex, Register*& argv, int& argc)
{
- function = callFrame->callee();
+ function = asFunction(callFrame->callee());
int numParameters = function->jsExecutable()->parameterCount();
- argc = callFrame->argumentCount();
+ argc = callFrame->argumentCountIncludingThis();
if (argc <= numParameters)
argv = callFrame->registers() - RegisterFile::CallFrameHeaderSize - numParameters;
@@ -174,9 +174,9 @@ namespace JSC {
: JSObject(callFrame->lexicalGlobalObject()->argumentsStructure())
, d(new ArgumentsData)
{
- ASSERT(!callFrame->callee()->jsExecutable()->parameterCount());
+ ASSERT(!asFunction(callFrame->callee())->jsExecutable()->parameterCount());
- unsigned numArguments = callFrame->argumentCount() - 1;
+ unsigned numArguments = callFrame->argumentCount();
d->numParameters = 0;
d->numArguments = numArguments;
@@ -194,7 +194,7 @@ namespace JSC {
d->extraArguments = extraArguments;
- d->callee = callFrame->callee();
+ d->callee = asFunction(callFrame->callee());
d->overrodeLength = false;
d->overrodeCallee = false;
}
diff --git a/JavaScriptCore/runtime/ArrayConstructor.cpp b/JavaScriptCore/runtime/ArrayConstructor.cpp
index c159be4..674d00a 100644
--- a/JavaScriptCore/runtime/ArrayConstructor.cpp
+++ b/JavaScriptCore/runtime/ArrayConstructor.cpp
@@ -35,7 +35,7 @@ namespace JSC {
ASSERT_CLASS_FITS_IN_CELL(ArrayConstructor);
-static JSValue JSC_HOST_CALL arrayConstructorIsArray(ExecState*, JSObject*, JSValue, const ArgList&);
+static JSValue JSC_HOST_CALL arrayConstructorIsArray(ExecState*);
ArrayConstructor::ArrayConstructor(ExecState* exec, JSGlobalObject* globalObject, NonNullPassRefPtr<Structure> structure, ArrayPrototype* arrayPrototype, Structure* prototypeFunctionStructure)
: InternalFunction(&exec->globalData(), globalObject, structure, Identifier(exec, arrayPrototype->classInfo()->className))
@@ -76,8 +76,9 @@ ConstructType ArrayConstructor::getConstructData(ConstructData& constructData)
return ConstructTypeHost;
}
-static JSValue JSC_HOST_CALL callArrayConstructor(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+static JSValue JSC_HOST_CALL callArrayConstructor(ExecState* exec)
{
+ ArgList args(exec);
return constructArrayWithSizeQuirk(exec, args);
}
@@ -89,9 +90,9 @@ CallType ArrayConstructor::getCallData(CallData& callData)
return CallTypeHost;
}
-JSValue JSC_HOST_CALL arrayConstructorIsArray(ExecState*, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL arrayConstructorIsArray(ExecState* exec)
{
- return jsBoolean(args.at(0).inherits(&JSArray::info));
+ return jsBoolean(exec->argument(0).inherits(&JSArray::info));
}
} // namespace JSC
diff --git a/JavaScriptCore/runtime/ArrayPrototype.cpp b/JavaScriptCore/runtime/ArrayPrototype.cpp
index 70ce69f..c7dea3b 100644
--- a/JavaScriptCore/runtime/ArrayPrototype.cpp
+++ b/JavaScriptCore/runtime/ArrayPrototype.cpp
@@ -40,27 +40,27 @@ namespace JSC {
ASSERT_CLASS_FITS_IN_CELL(ArrayPrototype);
-static JSValue JSC_HOST_CALL arrayProtoFuncToString(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL arrayProtoFuncToLocaleString(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL arrayProtoFuncConcat(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL arrayProtoFuncJoin(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL arrayProtoFuncPop(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL arrayProtoFuncPush(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL arrayProtoFuncReverse(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL arrayProtoFuncShift(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL arrayProtoFuncSlice(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL arrayProtoFuncSort(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL arrayProtoFuncSplice(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL arrayProtoFuncUnShift(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL arrayProtoFuncEvery(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL arrayProtoFuncForEach(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL arrayProtoFuncSome(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL arrayProtoFuncIndexOf(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL arrayProtoFuncFilter(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL arrayProtoFuncMap(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL arrayProtoFuncReduce(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL arrayProtoFuncReduceRight(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL arrayProtoFuncLastIndexOf(ExecState*, JSObject*, JSValue, const ArgList&);
+static JSValue JSC_HOST_CALL arrayProtoFuncToString(ExecState*);
+static JSValue JSC_HOST_CALL arrayProtoFuncToLocaleString(ExecState*);
+static JSValue JSC_HOST_CALL arrayProtoFuncConcat(ExecState*);
+static JSValue JSC_HOST_CALL arrayProtoFuncJoin(ExecState*);
+static JSValue JSC_HOST_CALL arrayProtoFuncPop(ExecState*);
+static JSValue JSC_HOST_CALL arrayProtoFuncPush(ExecState*);
+static JSValue JSC_HOST_CALL arrayProtoFuncReverse(ExecState*);
+static JSValue JSC_HOST_CALL arrayProtoFuncShift(ExecState*);
+static JSValue JSC_HOST_CALL arrayProtoFuncSlice(ExecState*);
+static JSValue JSC_HOST_CALL arrayProtoFuncSort(ExecState*);
+static JSValue JSC_HOST_CALL arrayProtoFuncSplice(ExecState*);
+static JSValue JSC_HOST_CALL arrayProtoFuncUnShift(ExecState*);
+static JSValue JSC_HOST_CALL arrayProtoFuncEvery(ExecState*);
+static JSValue JSC_HOST_CALL arrayProtoFuncForEach(ExecState*);
+static JSValue JSC_HOST_CALL arrayProtoFuncSome(ExecState*);
+static JSValue JSC_HOST_CALL arrayProtoFuncIndexOf(ExecState*);
+static JSValue JSC_HOST_CALL arrayProtoFuncFilter(ExecState*);
+static JSValue JSC_HOST_CALL arrayProtoFuncMap(ExecState*);
+static JSValue JSC_HOST_CALL arrayProtoFuncReduce(ExecState*);
+static JSValue JSC_HOST_CALL arrayProtoFuncReduceRight(ExecState*);
+static JSValue JSC_HOST_CALL arrayProtoFuncLastIndexOf(ExecState*);
}
@@ -149,8 +149,9 @@ static void putProperty(ExecState* exec, JSObject* obj, const Identifier& proper
obj->put(exec, propertyName, value, slot);
}
-JSValue JSC_HOST_CALL arrayProtoFuncToString(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL arrayProtoFuncToString(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
bool isRealArray = isJSArray(&exec->globalData(), thisValue);
if (!isRealArray && !thisValue.inherits(&JSArray::info))
return throwError(exec, TypeError);
@@ -208,8 +209,9 @@ JSValue JSC_HOST_CALL arrayProtoFuncToString(ExecState* exec, JSObject*, JSValue
return jsString(exec, UString::adopt(buffer));
}
-JSValue JSC_HOST_CALL arrayProtoFuncToLocaleString(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL arrayProtoFuncToLocaleString(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
if (!thisValue.inherits(&JSArray::info))
return throwError(exec, TypeError);
JSObject* thisObj = asArray(thisValue);
@@ -248,8 +250,9 @@ JSValue JSC_HOST_CALL arrayProtoFuncToLocaleString(ExecState* exec, JSObject*, J
return strBuffer.build(exec);
}
-JSValue JSC_HOST_CALL arrayProtoFuncJoin(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL arrayProtoFuncJoin(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
JSObject* thisObj = thisValue.toThisObject(exec);
HashSet<JSObject*>& arrayVisitedElements = exec->globalData().arrayVisitedElements;
@@ -265,8 +268,8 @@ JSValue JSC_HOST_CALL arrayProtoFuncJoin(ExecState* exec, JSObject*, JSValue thi
JSStringBuilder strBuffer;
UString separator;
- if (!args.at(0).isUndefined())
- separator = args.at(0).toString(exec);
+ if (!exec->argument(0).isUndefined())
+ separator = exec->argument(0).toString(exec);
unsigned length = thisObj->get(exec, exec->propertyNames().length).toUInt32(exec);
unsigned k = 0;
@@ -319,13 +322,14 @@ JSValue JSC_HOST_CALL arrayProtoFuncJoin(ExecState* exec, JSObject*, JSValue thi
return strBuffer.build(exec);
}
-JSValue JSC_HOST_CALL arrayProtoFuncConcat(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL arrayProtoFuncConcat(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
JSArray* arr = constructEmptyArray(exec);
int n = 0;
JSValue curArg = thisValue.toThisObject(exec);
- ArgList::const_iterator it = args.begin();
- ArgList::const_iterator end = args.end();
+ size_t i = 0;
+ size_t argCount = exec->argumentCount();
while (1) {
if (curArg.inherits(&JSArray::info)) {
unsigned length = curArg.get(exec, exec->propertyNames().length).toUInt32(exec);
@@ -339,17 +343,18 @@ JSValue JSC_HOST_CALL arrayProtoFuncConcat(ExecState* exec, JSObject*, JSValue t
arr->put(exec, n, curArg);
n++;
}
- if (it == end)
+ if (i == argCount)
break;
- curArg = (*it);
- ++it;
+ curArg = (exec->argument(i));
+ ++i;
}
arr->setLength(n);
return arr;
}
-JSValue JSC_HOST_CALL arrayProtoFuncPop(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL arrayProtoFuncPop(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
if (isJSArray(&exec->globalData(), thisValue))
return asArray(thisValue)->pop();
@@ -367,25 +372,27 @@ JSValue JSC_HOST_CALL arrayProtoFuncPop(ExecState* exec, JSObject*, JSValue this
return result;
}
-JSValue JSC_HOST_CALL arrayProtoFuncPush(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL arrayProtoFuncPush(ExecState* exec)
{
- if (isJSArray(&exec->globalData(), thisValue) && args.size() == 1) {
+ JSValue thisValue = exec->hostThisValue();
+ if (isJSArray(&exec->globalData(), thisValue) && exec->argumentCount() == 1) {
JSArray* array = asArray(thisValue);
- array->push(exec, *args.begin());
+ array->push(exec, exec->argument(0));
return jsNumber(exec, array->length());
}
JSObject* thisObj = thisValue.toThisObject(exec);
unsigned length = thisObj->get(exec, exec->propertyNames().length).toUInt32(exec);
- for (unsigned n = 0; n < args.size(); n++)
- thisObj->put(exec, length + n, args.at(n));
- length += args.size();
+ for (unsigned n = 0; n < exec->argumentCount(); n++)
+ thisObj->put(exec, length + n, exec->argument(n));
+ length += exec->argumentCount();
putProperty(exec, thisObj, exec->propertyNames().length, jsNumber(exec, length));
return jsNumber(exec, length);
}
-JSValue JSC_HOST_CALL arrayProtoFuncReverse(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL arrayProtoFuncReverse(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
JSObject* thisObj = thisValue.toThisObject(exec);
unsigned length = thisObj->get(exec, exec->propertyNames().length).toUInt32(exec);
unsigned middle = length / 2;
@@ -408,8 +415,9 @@ JSValue JSC_HOST_CALL arrayProtoFuncReverse(ExecState* exec, JSObject*, JSValue
return thisObj;
}
-JSValue JSC_HOST_CALL arrayProtoFuncShift(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL arrayProtoFuncShift(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
JSObject* thisObj = thisValue.toThisObject(exec);
JSValue result;
@@ -431,8 +439,9 @@ JSValue JSC_HOST_CALL arrayProtoFuncShift(ExecState* exec, JSObject*, JSValue th
return result;
}
-JSValue JSC_HOST_CALL arrayProtoFuncSlice(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL arrayProtoFuncSlice(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
// http://developer.netscape.com/docs/manuals/js/client/jsref/array.htm#1193713 or 15.4.4.10
JSObject* thisObj = thisValue.toThisObject(exec);
@@ -440,7 +449,7 @@ JSValue JSC_HOST_CALL arrayProtoFuncSlice(ExecState* exec, JSObject*, JSValue th
// We return a new array
JSArray* resObj = constructEmptyArray(exec);
JSValue result = resObj;
- double begin = args.at(0).toInteger(exec);
+ double begin = exec->argument(0).toInteger(exec);
unsigned length = thisObj->get(exec, exec->propertyNames().length).toUInt32(exec);
if (begin >= 0) {
if (begin > length)
@@ -451,10 +460,10 @@ JSValue JSC_HOST_CALL arrayProtoFuncSlice(ExecState* exec, JSObject*, JSValue th
begin = 0;
}
double end;
- if (args.at(1).isUndefined())
+ if (exec->argument(1).isUndefined())
end = length;
else {
- end = args.at(1).toInteger(exec);
+ end = exec->argument(1).toInteger(exec);
if (end < 0) {
end += length;
if (end < 0)
@@ -476,11 +485,12 @@ JSValue JSC_HOST_CALL arrayProtoFuncSlice(ExecState* exec, JSObject*, JSValue th
return result;
}
-JSValue JSC_HOST_CALL arrayProtoFuncSort(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL arrayProtoFuncSort(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
JSObject* thisObj = thisValue.toThisObject(exec);
- JSValue function = args.at(0);
+ JSValue function = exec->argument(0);
CallData callData;
CallType callType = function.getCallData(callData);
@@ -534,8 +544,9 @@ JSValue JSC_HOST_CALL arrayProtoFuncSort(ExecState* exec, JSObject*, JSValue thi
return thisObj;
}
-JSValue JSC_HOST_CALL arrayProtoFuncSplice(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL arrayProtoFuncSplice(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
JSObject* thisObj = thisValue.toThisObject(exec);
// 15.4.4.12
@@ -543,11 +554,11 @@ JSValue JSC_HOST_CALL arrayProtoFuncSplice(ExecState* exec, JSObject*, JSValue t
JSValue result = resObj;
// FIXME: Firefox returns an empty array.
- if (!args.size())
+ if (!exec->argumentCount())
return jsUndefined();
unsigned length = thisObj->get(exec, exec->propertyNames().length).toUInt32(exec);
- double relativeBegin = args.at(0).toInteger(exec);
+ double relativeBegin = exec->argument(0).toInteger(exec);
unsigned begin;
if (relativeBegin < 0) {
relativeBegin += length;
@@ -556,8 +567,8 @@ JSValue JSC_HOST_CALL arrayProtoFuncSplice(ExecState* exec, JSObject*, JSValue t
begin = std::min<unsigned>(static_cast<unsigned>(relativeBegin), length);
unsigned deleteCount;
- if (args.size() > 1)
- deleteCount = std::min<int>(std::max<int>(args.at(1).toUInt32(exec), 0), length - begin);
+ if (exec->argumentCount() > 1)
+ deleteCount = std::min<int>(std::max<int>(exec->argument(1).toUInt32(exec), 0), length - begin);
else
deleteCount = length - begin;
@@ -567,7 +578,7 @@ JSValue JSC_HOST_CALL arrayProtoFuncSplice(ExecState* exec, JSObject*, JSValue t
}
resObj->setLength(deleteCount);
- unsigned additionalArgs = std::max<int>(args.size() - 2, 0);
+ unsigned additionalArgs = std::max<int>(exec->argumentCount() - 2, 0);
if (additionalArgs != deleteCount) {
if (additionalArgs < deleteCount) {
for (unsigned k = begin; k < length - deleteCount; ++k) {
@@ -588,19 +599,20 @@ JSValue JSC_HOST_CALL arrayProtoFuncSplice(ExecState* exec, JSObject*, JSValue t
}
}
for (unsigned k = 0; k < additionalArgs; ++k)
- thisObj->put(exec, k + begin, args.at(k + 2));
+ thisObj->put(exec, k + begin, exec->argument(k + 2));
putProperty(exec, thisObj, exec->propertyNames().length, jsNumber(exec, length - deleteCount + additionalArgs));
return result;
}
-JSValue JSC_HOST_CALL arrayProtoFuncUnShift(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL arrayProtoFuncUnShift(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
JSObject* thisObj = thisValue.toThisObject(exec);
// 15.4.4.13
unsigned length = thisObj->get(exec, exec->propertyNames().length).toUInt32(exec);
- unsigned nrArgs = args.size();
+ unsigned nrArgs = exec->argumentCount();
if (nrArgs) {
for (unsigned k = length; k > 0; --k) {
if (JSValue v = getProperty(exec, thisObj, k - 1))
@@ -610,23 +622,24 @@ JSValue JSC_HOST_CALL arrayProtoFuncUnShift(ExecState* exec, JSObject*, JSValue
}
}
for (unsigned k = 0; k < nrArgs; ++k)
- thisObj->put(exec, k, args.at(k));
+ thisObj->put(exec, k, exec->argument(k));
JSValue result = jsNumber(exec, length + nrArgs);
putProperty(exec, thisObj, exec->propertyNames().length, result);
return result;
}
-JSValue JSC_HOST_CALL arrayProtoFuncFilter(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL arrayProtoFuncFilter(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
JSObject* thisObj = thisValue.toThisObject(exec);
- JSValue function = args.at(0);
+ JSValue function = exec->argument(0);
CallData callData;
CallType callType = function.getCallData(callData);
if (callType == CallTypeNone)
return throwError(exec, TypeError);
- JSObject* applyThis = args.at(1).isUndefinedOrNull() ? exec->globalThisValue() : args.at(1).toObject(exec);
+ JSObject* applyThis = exec->argument(1).isUndefinedOrNull() ? exec->globalThisValue() : exec->argument(1).toObject(exec);
JSArray* resultArray = constructEmptyArray(exec);
unsigned filterIndex = 0;
@@ -674,17 +687,18 @@ JSValue JSC_HOST_CALL arrayProtoFuncFilter(ExecState* exec, JSObject*, JSValue t
return resultArray;
}
-JSValue JSC_HOST_CALL arrayProtoFuncMap(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL arrayProtoFuncMap(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
JSObject* thisObj = thisValue.toThisObject(exec);
- JSValue function = args.at(0);
+ JSValue function = exec->argument(0);
CallData callData;
CallType callType = function.getCallData(callData);
if (callType == CallTypeNone)
return throwError(exec, TypeError);
- JSObject* applyThis = args.at(1).isUndefinedOrNull() ? exec->globalThisValue() : args.at(1).toObject(exec);
+ JSObject* applyThis = exec->argument(1).isUndefinedOrNull() ? exec->globalThisValue() : exec->argument(1).toObject(exec);
unsigned length = thisObj->get(exec, exec->propertyNames().length).toUInt32(exec);
@@ -731,17 +745,18 @@ JSValue JSC_HOST_CALL arrayProtoFuncMap(ExecState* exec, JSObject*, JSValue this
// http://developer-test.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Objects:Array:forEach
// http://developer-test.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Objects:Array:some
-JSValue JSC_HOST_CALL arrayProtoFuncEvery(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL arrayProtoFuncEvery(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
JSObject* thisObj = thisValue.toThisObject(exec);
- JSValue function = args.at(0);
+ JSValue function = exec->argument(0);
CallData callData;
CallType callType = function.getCallData(callData);
if (callType == CallTypeNone)
return throwError(exec, TypeError);
- JSObject* applyThis = args.at(1).isUndefinedOrNull() ? exec->globalThisValue() : args.at(1).toObject(exec);
+ JSObject* applyThis = exec->argument(1).isUndefinedOrNull() ? exec->globalThisValue() : exec->argument(1).toObject(exec);
JSValue result = jsBoolean(true);
@@ -787,17 +802,18 @@ JSValue JSC_HOST_CALL arrayProtoFuncEvery(ExecState* exec, JSObject*, JSValue th
return result;
}
-JSValue JSC_HOST_CALL arrayProtoFuncForEach(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL arrayProtoFuncForEach(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
JSObject* thisObj = thisValue.toThisObject(exec);
- JSValue function = args.at(0);
+ JSValue function = exec->argument(0);
CallData callData;
CallType callType = function.getCallData(callData);
if (callType == CallTypeNone)
return throwError(exec, TypeError);
- JSObject* applyThis = args.at(1).isUndefinedOrNull() ? exec->globalThisValue() : args.at(1).toObject(exec);
+ JSObject* applyThis = exec->argument(1).isUndefinedOrNull() ? exec->globalThisValue() : exec->argument(1).toObject(exec);
unsigned length = thisObj->get(exec, exec->propertyNames().length).toUInt32(exec);
unsigned k = 0;
@@ -832,17 +848,18 @@ JSValue JSC_HOST_CALL arrayProtoFuncForEach(ExecState* exec, JSObject*, JSValue
return jsUndefined();
}
-JSValue JSC_HOST_CALL arrayProtoFuncSome(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL arrayProtoFuncSome(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
JSObject* thisObj = thisValue.toThisObject(exec);
- JSValue function = args.at(0);
+ JSValue function = exec->argument(0);
CallData callData;
CallType callType = function.getCallData(callData);
if (callType == CallTypeNone)
return throwError(exec, TypeError);
- JSObject* applyThis = args.at(1).isUndefinedOrNull() ? exec->globalThisValue() : args.at(1).toObject(exec);
+ JSObject* applyThis = exec->argument(1).isUndefinedOrNull() ? exec->globalThisValue() : exec->argument(1).toObject(exec);
JSValue result = jsBoolean(false);
@@ -885,11 +902,12 @@ JSValue JSC_HOST_CALL arrayProtoFuncSome(ExecState* exec, JSObject*, JSValue thi
return result;
}
-JSValue JSC_HOST_CALL arrayProtoFuncReduce(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL arrayProtoFuncReduce(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
JSObject* thisObj = thisValue.toThisObject(exec);
- JSValue function = args.at(0);
+ JSValue function = exec->argument(0);
CallData callData;
CallType callType = function.getCallData(callData);
if (callType == CallTypeNone)
@@ -898,14 +916,14 @@ JSValue JSC_HOST_CALL arrayProtoFuncReduce(ExecState* exec, JSObject*, JSValue t
unsigned i = 0;
JSValue rv;
unsigned length = thisObj->get(exec, exec->propertyNames().length).toUInt32(exec);
- if (!length && args.size() == 1)
+ if (!length && exec->argumentCount() == 1)
return throwError(exec, TypeError);
JSArray* array = 0;
if (isJSArray(&exec->globalData(), thisObj))
array = asArray(thisObj);
- if (args.size() >= 2)
- rv = args.at(1);
+ if (exec->argumentCount() >= 2)
+ rv = exec->argument(1);
else if (array && array->canGetIndex(0)){
rv = array->getIndex(0);
i = 1;
@@ -955,11 +973,12 @@ JSValue JSC_HOST_CALL arrayProtoFuncReduce(ExecState* exec, JSObject*, JSValue t
return rv;
}
-JSValue JSC_HOST_CALL arrayProtoFuncReduceRight(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL arrayProtoFuncReduceRight(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
JSObject* thisObj = thisValue.toThisObject(exec);
- JSValue function = args.at(0);
+ JSValue function = exec->argument(0);
CallData callData;
CallType callType = function.getCallData(callData);
if (callType == CallTypeNone)
@@ -968,14 +987,14 @@ JSValue JSC_HOST_CALL arrayProtoFuncReduceRight(ExecState* exec, JSObject*, JSVa
unsigned i = 0;
JSValue rv;
unsigned length = thisObj->get(exec, exec->propertyNames().length).toUInt32(exec);
- if (!length && args.size() == 1)
+ if (!length && exec->argumentCount() == 1)
return throwError(exec, TypeError);
JSArray* array = 0;
if (isJSArray(&exec->globalData(), thisObj))
array = asArray(thisObj);
- if (args.size() >= 2)
- rv = args.at(1);
+ if (exec->argumentCount() >= 2)
+ rv = exec->argument(1);
else if (array && array->canGetIndex(length - 1)){
rv = array->getIndex(length - 1);
i = 1;
@@ -1024,15 +1043,16 @@ JSValue JSC_HOST_CALL arrayProtoFuncReduceRight(ExecState* exec, JSObject*, JSVa
return rv;
}
-JSValue JSC_HOST_CALL arrayProtoFuncIndexOf(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL arrayProtoFuncIndexOf(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
// JavaScript 1.5 Extension by Mozilla
// Documentation: http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:indexOf
JSObject* thisObj = thisValue.toThisObject(exec);
unsigned index = 0;
- double d = args.at(1).toInteger(exec);
+ double d = exec->argument(1).toInteger(exec);
unsigned length = thisObj->get(exec, exec->propertyNames().length).toUInt32(exec);
if (d < 0)
d += length;
@@ -1043,7 +1063,7 @@ JSValue JSC_HOST_CALL arrayProtoFuncIndexOf(ExecState* exec, JSObject*, JSValue
index = static_cast<unsigned>(d);
}
- JSValue searchElement = args.at(0);
+ JSValue searchElement = exec->argument(0);
for (; index < length; ++index) {
JSValue e = getProperty(exec, thisObj, index);
if (!e)
@@ -1055,8 +1075,9 @@ JSValue JSC_HOST_CALL arrayProtoFuncIndexOf(ExecState* exec, JSObject*, JSValue
return jsNumber(exec, -1);
}
-JSValue JSC_HOST_CALL arrayProtoFuncLastIndexOf(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL arrayProtoFuncLastIndexOf(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
// JavaScript 1.6 Extension by Mozilla
// Documentation: http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:lastIndexOf
@@ -1064,7 +1085,7 @@ JSValue JSC_HOST_CALL arrayProtoFuncLastIndexOf(ExecState* exec, JSObject*, JSVa
unsigned length = thisObj->get(exec, exec->propertyNames().length).toUInt32(exec);
int index = length - 1;
- double d = args.at(1).toIntegerPreserveNaN(exec);
+ double d = exec->argument(1).toIntegerPreserveNaN(exec);
if (d < 0) {
d += length;
@@ -1074,7 +1095,7 @@ JSValue JSC_HOST_CALL arrayProtoFuncLastIndexOf(ExecState* exec, JSObject*, JSVa
if (d < length)
index = static_cast<int>(d);
- JSValue searchElement = args.at(0);
+ JSValue searchElement = exec->argument(0);
for (; index >= 0; --index) {
JSValue e = getProperty(exec, thisObj, index);
if (!e)
diff --git a/JavaScriptCore/runtime/BooleanConstructor.cpp b/JavaScriptCore/runtime/BooleanConstructor.cpp
index 07bcc97..bc12858 100644
--- a/JavaScriptCore/runtime/BooleanConstructor.cpp
+++ b/JavaScriptCore/runtime/BooleanConstructor.cpp
@@ -57,9 +57,9 @@ ConstructType BooleanConstructor::getConstructData(ConstructData& constructData)
}
// ECMA 15.6.1
-static JSValue JSC_HOST_CALL callBooleanConstructor(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+static JSValue JSC_HOST_CALL callBooleanConstructor(ExecState* exec)
{
- return jsBoolean(args.at(0).toBoolean(exec));
+ return jsBoolean(exec->argument(0).toBoolean(exec));
}
CallType BooleanConstructor::getCallData(CallData& callData)
diff --git a/JavaScriptCore/runtime/BooleanPrototype.cpp b/JavaScriptCore/runtime/BooleanPrototype.cpp
index 4378164..dbb27b2 100644
--- a/JavaScriptCore/runtime/BooleanPrototype.cpp
+++ b/JavaScriptCore/runtime/BooleanPrototype.cpp
@@ -32,8 +32,8 @@ namespace JSC {
ASSERT_CLASS_FITS_IN_CELL(BooleanPrototype);
// Functions
-static JSValue JSC_HOST_CALL booleanProtoFuncToString(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL booleanProtoFuncValueOf(ExecState*, JSObject*, JSValue, const ArgList&);
+static JSValue JSC_HOST_CALL booleanProtoFuncToString(ExecState*);
+static JSValue JSC_HOST_CALL booleanProtoFuncValueOf(ExecState*);
// ECMA 15.6.4
@@ -51,8 +51,9 @@ BooleanPrototype::BooleanPrototype(ExecState* exec, JSGlobalObject* globalObject
// ECMA 15.6.4.2 + 15.6.4.3
-JSValue JSC_HOST_CALL booleanProtoFuncToString(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL booleanProtoFuncToString(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
if (thisValue == jsBoolean(false))
return jsNontrivialString(exec, "false");
@@ -69,8 +70,9 @@ JSValue JSC_HOST_CALL booleanProtoFuncToString(ExecState* exec, JSObject*, JSVal
return jsNontrivialString(exec, "true");
}
-JSValue JSC_HOST_CALL booleanProtoFuncValueOf(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL booleanProtoFuncValueOf(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
if (thisValue.isBoolean())
return thisValue;
diff --git a/JavaScriptCore/runtime/CallData.cpp b/JavaScriptCore/runtime/CallData.cpp
index 62e42fe..2b9302a 100644
--- a/JavaScriptCore/runtime/CallData.cpp
+++ b/JavaScriptCore/runtime/CallData.cpp
@@ -26,17 +26,16 @@
#include "config.h"
#include "CallData.h"
+#include "Executable.h"
+#include "Interpreter.h"
#include "JSFunction.h"
namespace JSC {
JSValue call(ExecState* exec, JSValue functionObject, CallType callType, const CallData& callData, JSValue thisValue, const ArgList& args)
{
- if (callType == CallTypeHost)
- return callData.native.function(exec, asObject(functionObject), thisValue, args);
- ASSERT(callType == CallTypeJS);
- // FIXME: Can this be done more efficiently using the callData?
- return asFunction(functionObject)->call(exec, thisValue, args);
+ ASSERT(callType == CallTypeJS || callType == CallTypeHost);
+ return exec->interpreter()->executeCall(exec, asObject(functionObject), callType, callData, thisValue, args, exec->exceptionSlot());
}
} // namespace JSC
diff --git a/JavaScriptCore/runtime/CallData.h b/JavaScriptCore/runtime/CallData.h
index 24c19f9..5294e54 100644
--- a/JavaScriptCore/runtime/CallData.h
+++ b/JavaScriptCore/runtime/CallData.h
@@ -46,7 +46,7 @@ namespace JSC {
CallTypeJS
};
- typedef JSValue (JSC_HOST_CALL *NativeFunction)(ExecState*, JSObject*, JSValue thisValue, const ArgList&);
+ typedef JSValue (JSC_HOST_CALL *NativeFunction)(ExecState*);
union CallData {
struct {
diff --git a/JavaScriptCore/runtime/Collector.cpp b/JavaScriptCore/runtime/Collector.cpp
index 014685f..03389c4 100644
--- a/JavaScriptCore/runtime/Collector.cpp
+++ b/JavaScriptCore/runtime/Collector.cpp
@@ -394,7 +394,8 @@ allocate:
++m_heap.nextCell;
return cell;
}
- } while (++m_heap.nextCell != HeapConstants::cellsPerBlock);
+ block->marked.advanceToNextPossibleFreeCell(m_heap.nextCell);
+ } while (m_heap.nextCell != HeapConstants::cellsPerBlock);
m_heap.nextCell = 0;
} while (++m_heap.nextBlock != m_heap.usedBlocks);
diff --git a/JavaScriptCore/runtime/Collector.h b/JavaScriptCore/runtime/Collector.h
index 0a40758..34e238c 100644
--- a/JavaScriptCore/runtime/Collector.h
+++ b/JavaScriptCore/runtime/Collector.h
@@ -220,6 +220,13 @@ namespace JSC {
void set(size_t n) { bits[n >> 5] |= (1 << (n & 0x1F)); }
void clear(size_t n) { bits[n >> 5] &= ~(1 << (n & 0x1F)); }
void clearAll() { memset(bits, 0, sizeof(bits)); }
+ ALWAYS_INLINE void advanceToNextPossibleFreeCell(size_t& startCell)
+ {
+ if (!~bits[startCell >> 5])
+ startCell = (startCell & (~0x1F)) + 32;
+ else
+ ++startCell;
+ }
size_t count(size_t startCell = 0)
{
size_t result = 0;
diff --git a/JavaScriptCore/runtime/ConstructData.cpp b/JavaScriptCore/runtime/ConstructData.cpp
index 7ee59d7..a7b97e6 100644
--- a/JavaScriptCore/runtime/ConstructData.cpp
+++ b/JavaScriptCore/runtime/ConstructData.cpp
@@ -26,7 +26,10 @@
#include "config.h"
#include "ConstructData.h"
+#include "Executable.h"
+#include "Interpreter.h"
#include "JSFunction.h"
+#include "JSGlobalObject.h"
namespace JSC {
@@ -34,9 +37,23 @@ JSObject* construct(ExecState* exec, JSValue object, ConstructType constructType
{
if (constructType == ConstructTypeHost)
return constructData.native.function(exec, asObject(object), args);
+
ASSERT(constructType == ConstructTypeJS);
- // FIXME: Can this be done more efficiently using the constructData?
- return asFunction(object)->construct(exec, args);
+ JSFunction* jsFunction = asFunction(object);
+
+ ASSERT(!jsFunction->isHostFunction());
+ Structure* structure;
+ JSValue prototype = jsFunction->get(exec, exec->propertyNames().prototype);
+ if (prototype.isObject())
+ structure = asObject(prototype)->inheritorID();
+ else
+ structure = exec->lexicalGlobalObject()->emptyObjectStructure();
+ JSObject* thisObj = new (exec) JSObject(structure);
+
+ JSValue result = exec->interpreter()->executeConstruct(jsFunction->jsExecutable(), exec, jsFunction, thisObj, args, jsFunction->scope().node(), exec->exceptionSlot());
+ if (exec->hadException() || !result.isObject())
+ return thisObj;
+ return asObject(result);
}
} // namespace JSC
diff --git a/JavaScriptCore/runtime/DateConstructor.cpp b/JavaScriptCore/runtime/DateConstructor.cpp
index d732a4f..015a01a 100644
--- a/JavaScriptCore/runtime/DateConstructor.cpp
+++ b/JavaScriptCore/runtime/DateConstructor.cpp
@@ -54,9 +54,9 @@ namespace JSC {
ASSERT_CLASS_FITS_IN_CELL(DateConstructor);
-static JSValue JSC_HOST_CALL dateParse(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateNow(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateUTC(ExecState*, JSObject*, JSValue, const ArgList&);
+static JSValue JSC_HOST_CALL dateParse(ExecState*);
+static JSValue JSC_HOST_CALL dateNow(ExecState*);
+static JSValue JSC_HOST_CALL dateUTC(ExecState*);
DateConstructor::DateConstructor(ExecState* exec, JSGlobalObject* globalObject, NonNullPassRefPtr<Structure> structure, Structure* prototypeFunctionStructure, DatePrototype* datePrototype)
: InternalFunction(&exec->globalData(), globalObject, structure, Identifier(exec, datePrototype->classInfo()->className))
@@ -128,7 +128,7 @@ ConstructType DateConstructor::getConstructData(ConstructData& constructData)
}
// ECMA 15.9.2
-static JSValue JSC_HOST_CALL callDate(ExecState* exec, JSObject*, JSValue, const ArgList&)
+static JSValue JSC_HOST_CALL callDate(ExecState* exec)
{
time_t localTime = time(0);
tm localTM;
@@ -147,37 +147,37 @@ CallType DateConstructor::getCallData(CallData& callData)
return CallTypeHost;
}
-static JSValue JSC_HOST_CALL dateParse(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+static JSValue JSC_HOST_CALL dateParse(ExecState* exec)
{
- return jsNumber(exec, parseDate(exec, args.at(0).toString(exec)));
+ return jsNumber(exec, parseDate(exec, exec->argument(0).toString(exec)));
}
-static JSValue JSC_HOST_CALL dateNow(ExecState* exec, JSObject*, JSValue, const ArgList&)
+static JSValue JSC_HOST_CALL dateNow(ExecState* exec)
{
return jsNumber(exec, jsCurrentTime());
}
-static JSValue JSC_HOST_CALL dateUTC(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+static JSValue JSC_HOST_CALL dateUTC(ExecState* exec)
{
- int n = args.size();
- if (isnan(args.at(0).toNumber(exec))
- || isnan(args.at(1).toNumber(exec))
- || (n >= 3 && isnan(args.at(2).toNumber(exec)))
- || (n >= 4 && isnan(args.at(3).toNumber(exec)))
- || (n >= 5 && isnan(args.at(4).toNumber(exec)))
- || (n >= 6 && isnan(args.at(5).toNumber(exec)))
- || (n >= 7 && isnan(args.at(6).toNumber(exec))))
+ int n = exec->argumentCount();
+ if (isnan(exec->argument(0).toNumber(exec))
+ || isnan(exec->argument(1).toNumber(exec))
+ || (n >= 3 && isnan(exec->argument(2).toNumber(exec)))
+ || (n >= 4 && isnan(exec->argument(3).toNumber(exec)))
+ || (n >= 5 && isnan(exec->argument(4).toNumber(exec)))
+ || (n >= 6 && isnan(exec->argument(5).toNumber(exec)))
+ || (n >= 7 && isnan(exec->argument(6).toNumber(exec))))
return jsNaN(exec);
GregorianDateTime t;
- int year = args.at(0).toInt32(exec);
+ int year = exec->argument(0).toInt32(exec);
t.year = (year >= 0 && year <= 99) ? year : year - 1900;
- t.month = args.at(1).toInt32(exec);
- t.monthDay = (n >= 3) ? args.at(2).toInt32(exec) : 1;
- t.hour = args.at(3).toInt32(exec);
- t.minute = args.at(4).toInt32(exec);
- t.second = args.at(5).toInt32(exec);
- double ms = (n >= 7) ? args.at(6).toNumber(exec) : 0;
+ t.month = exec->argument(1).toInt32(exec);
+ t.monthDay = (n >= 3) ? exec->argument(2).toInt32(exec) : 1;
+ t.hour = exec->argument(3).toInt32(exec);
+ t.minute = exec->argument(4).toInt32(exec);
+ t.second = exec->argument(5).toInt32(exec);
+ double ms = (n >= 7) ? exec->argument(6).toNumber(exec) : 0;
return jsNumber(exec, timeClip(gregorianDateTimeToMS(exec, t, ms, true)));
}
diff --git a/JavaScriptCore/runtime/DatePrototype.cpp b/JavaScriptCore/runtime/DatePrototype.cpp
index a5dfabd..c31a4d0 100644
--- a/JavaScriptCore/runtime/DatePrototype.cpp
+++ b/JavaScriptCore/runtime/DatePrototype.cpp
@@ -73,52 +73,51 @@ namespace JSC {
ASSERT_CLASS_FITS_IN_CELL(DatePrototype);
-static JSValue JSC_HOST_CALL dateProtoFuncGetDate(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncGetDay(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncGetFullYear(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncGetHours(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncGetMilliSeconds(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncGetMinutes(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncGetMonth(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncGetSeconds(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncGetTime(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncGetTimezoneOffset(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncGetUTCDate(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncGetUTCDay(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncGetUTCFullYear(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncGetUTCHours(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncGetUTCMilliseconds(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncGetUTCMinutes(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncGetUTCMonth(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncGetUTCSeconds(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncGetYear(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncSetDate(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncSetFullYear(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncSetHours(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncSetMilliSeconds(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncSetMinutes(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncSetMonth(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncSetSeconds(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncSetTime(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncSetUTCDate(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncSetUTCFullYear(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncSetUTCHours(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncSetUTCMilliseconds(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncSetUTCMinutes(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncSetUTCMonth(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncSetUTCSeconds(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncSetYear(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncToDateString(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncToGMTString(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncToLocaleDateString(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncToLocaleString(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncToLocaleTimeString(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncToString(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncToTimeString(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncToUTCString(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL dateProtoFuncToISOString(ExecState*, JSObject*, JSValue, const ArgList&);
-
-static JSValue JSC_HOST_CALL dateProtoFuncToJSON(ExecState*, JSObject*, JSValue, const ArgList&);
+static JSValue JSC_HOST_CALL dateProtoFuncGetDate(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncGetDay(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncGetFullYear(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncGetHours(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncGetMilliSeconds(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncGetMinutes(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncGetMonth(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncGetSeconds(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncGetTime(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncGetTimezoneOffset(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncGetUTCDate(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncGetUTCDay(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncGetUTCFullYear(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncGetUTCHours(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncGetUTCMilliseconds(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncGetUTCMinutes(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncGetUTCMonth(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncGetUTCSeconds(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncGetYear(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncSetDate(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncSetFullYear(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncSetHours(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncSetMilliSeconds(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncSetMinutes(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncSetMonth(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncSetSeconds(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncSetTime(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncSetUTCDate(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncSetUTCFullYear(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncSetUTCHours(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncSetUTCMilliseconds(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncSetUTCMinutes(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncSetUTCMonth(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncSetUTCSeconds(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncSetYear(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncToDateString(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncToGMTString(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncToLocaleDateString(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncToLocaleString(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncToLocaleTimeString(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncToString(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncToTimeString(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncToUTCString(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncToISOString(ExecState*);
+static JSValue JSC_HOST_CALL dateProtoFuncToJSON(ExecState*);
}
@@ -146,7 +145,7 @@ static CFDateFormatterStyle styleFromArgString(const UString& string, CFDateForm
return defaultStyle;
}
-static JSCell* formatLocaleDate(ExecState* exec, DateInstance*, double timeInMilliseconds, LocaleDateTimeFormat format, const ArgList& args)
+static JSCell* formatLocaleDate(ExecState* exec, DateInstance*, double timeInMilliseconds, LocaleDateTimeFormat format)
{
CFDateFormatterStyle dateStyle = (format != LocaleTime ? kCFDateFormatterLongStyle : kCFDateFormatterNoStyle);
CFDateFormatterStyle timeStyle = (format != LocaleDate ? kCFDateFormatterLongStyle : kCFDateFormatterNoStyle);
@@ -154,16 +153,16 @@ static JSCell* formatLocaleDate(ExecState* exec, DateInstance*, double timeInMil
bool useCustomFormat = false;
UString customFormatString;
- UString arg0String = args.at(0).toString(exec);
- if (arg0String == "custom" && !args.at(1).isUndefined()) {
+ UString arg0String = exec->argument(0).toString(exec);
+ if (arg0String == "custom" && !exec->argument(1).isUndefined()) {
useCustomFormat = true;
- customFormatString = args.at(1).toString(exec);
- } else if (format == LocaleDateAndTime && !args.at(1).isUndefined()) {
+ customFormatString = exec->argument(1).toString(exec);
+ } else if (format == LocaleDateAndTime && !exec->argument(1).isUndefined()) {
dateStyle = styleFromArgString(arg0String, dateStyle);
- timeStyle = styleFromArgString(args.at(1).toString(exec), timeStyle);
- } else if (format != LocaleTime && !args.at(0).isUndefined())
+ timeStyle = styleFromArgString(exec->argument(1).toString(exec), timeStyle);
+ } else if (format != LocaleTime && !exec->argument(0).isUndefined())
dateStyle = styleFromArgString(arg0String, dateStyle);
- else if (format != LocaleDate && !args.at(0).isUndefined())
+ else if (format != LocaleDate && !exec->argument(0).isUndefined())
timeStyle = styleFromArgString(arg0String, timeStyle);
CFLocaleRef locale = CFLocaleCopyCurrent();
@@ -274,7 +273,7 @@ static JSCell* formatLocaleDate(ExecState* exec, const GregorianDateTime& gdt, L
return jsNontrivialString(exec, timebuffer);
}
-static JSCell* formatLocaleDate(ExecState* exec, DateInstance* dateObject, double, LocaleDateTimeFormat format, const ArgList&)
+static JSCell* formatLocaleDate(ExecState* exec, DateInstance* dateObject, double, LocaleDateTimeFormat format)
{
const GregorianDateTime* gregorianDateTime = dateObject->gregorianDateTime(exec);
if (!gregorianDateTime)
@@ -288,12 +287,12 @@ static JSCell* formatLocaleDate(ExecState* exec, DateInstance* dateObject, doubl
// ms (representing milliseconds) and t (representing the rest of the date structure) appropriately.
//
// Format of member function: f([hour,] [min,] [sec,] [ms])
-static bool fillStructuresUsingTimeArgs(ExecState* exec, const ArgList& args, int maxArgs, double* ms, GregorianDateTime* t)
+static bool fillStructuresUsingTimeArgs(ExecState* exec, int maxArgs, double* ms, GregorianDateTime* t)
{
double milliseconds = 0;
bool ok = true;
int idx = 0;
- int numArgs = args.size();
+ int numArgs = exec->argumentCount();
// JS allows extra trailing arguments -- ignore them
if (numArgs > maxArgs)
@@ -302,19 +301,19 @@ static bool fillStructuresUsingTimeArgs(ExecState* exec, const ArgList& args, in
// hours
if (maxArgs >= 4 && idx < numArgs) {
t->hour = 0;
- milliseconds += args.at(idx++).toInt32(exec, ok) * msPerHour;
+ milliseconds += exec->argument(idx++).toInt32(exec, ok) * msPerHour;
}
// minutes
if (maxArgs >= 3 && idx < numArgs && ok) {
t->minute = 0;
- milliseconds += args.at(idx++).toInt32(exec, ok) * msPerMinute;
+ milliseconds += exec->argument(idx++).toInt32(exec, ok) * msPerMinute;
}
// seconds
if (maxArgs >= 2 && idx < numArgs && ok) {
t->second = 0;
- milliseconds += args.at(idx++).toInt32(exec, ok) * msPerSecond;
+ milliseconds += exec->argument(idx++).toInt32(exec, ok) * msPerSecond;
}
if (!ok)
@@ -322,7 +321,7 @@ static bool fillStructuresUsingTimeArgs(ExecState* exec, const ArgList& args, in
// milliseconds
if (idx < numArgs) {
- double millis = args.at(idx).toNumber(exec);
+ double millis = exec->argument(idx).toNumber(exec);
ok = isfinite(millis);
milliseconds += millis;
} else
@@ -336,11 +335,11 @@ static bool fillStructuresUsingTimeArgs(ExecState* exec, const ArgList& args, in
// ms (representing milliseconds) and t (representing the rest of the date structure) appropriately.
//
// Format of member function: f([years,] [months,] [days])
-static bool fillStructuresUsingDateArgs(ExecState *exec, const ArgList& args, int maxArgs, double *ms, GregorianDateTime *t)
+static bool fillStructuresUsingDateArgs(ExecState *exec, int maxArgs, double *ms, GregorianDateTime *t)
{
int idx = 0;
bool ok = true;
- int numArgs = args.size();
+ int numArgs = exec->argumentCount();
// JS allows extra trailing arguments -- ignore them
if (numArgs > maxArgs)
@@ -348,16 +347,16 @@ static bool fillStructuresUsingDateArgs(ExecState *exec, const ArgList& args, in
// years
if (maxArgs >= 3 && idx < numArgs)
- t->year = args.at(idx++).toInt32(exec, ok) - 1900;
+ t->year = exec->argument(idx++).toInt32(exec, ok) - 1900;
// months
if (maxArgs >= 2 && idx < numArgs && ok)
- t->month = args.at(idx++).toInt32(exec, ok);
+ t->month = exec->argument(idx++).toInt32(exec, ok);
// days
if (idx < numArgs && ok) {
t->monthDay = 0;
- *ms += args.at(idx).toInt32(exec, ok) * msPerDay;
+ *ms += exec->argument(idx).toInt32(exec, ok) * msPerDay;
}
return ok;
@@ -438,8 +437,9 @@ bool DatePrototype::getOwnPropertyDescriptor(ExecState* exec, const Identifier&
// Functions
-JSValue JSC_HOST_CALL dateProtoFuncToString(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL dateProtoFuncToString(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
if (!thisValue.inherits(&DateInstance::info))
return throwError(exec, TypeError);
@@ -455,8 +455,9 @@ JSValue JSC_HOST_CALL dateProtoFuncToString(ExecState* exec, JSObject*, JSValue
return jsMakeNontrivialString(exec, date, " ", time);
}
-JSValue JSC_HOST_CALL dateProtoFuncToUTCString(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL dateProtoFuncToUTCString(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
if (!thisValue.inherits(&DateInstance::info))
return throwError(exec, TypeError);
@@ -472,8 +473,9 @@ JSValue JSC_HOST_CALL dateProtoFuncToUTCString(ExecState* exec, JSObject*, JSVal
return jsMakeNontrivialString(exec, date, " ", time);
}
-JSValue JSC_HOST_CALL dateProtoFuncToISOString(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL dateProtoFuncToISOString(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
if (!thisValue.inherits(&DateInstance::info))
return throwError(exec, TypeError);
@@ -490,8 +492,9 @@ JSValue JSC_HOST_CALL dateProtoFuncToISOString(ExecState* exec, JSObject*, JSVal
return jsNontrivialString(exec, buffer);
}
-JSValue JSC_HOST_CALL dateProtoFuncToDateString(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL dateProtoFuncToDateString(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
if (!thisValue.inherits(&DateInstance::info))
return throwError(exec, TypeError);
@@ -505,8 +508,9 @@ JSValue JSC_HOST_CALL dateProtoFuncToDateString(ExecState* exec, JSObject*, JSVa
return jsNontrivialString(exec, date);
}
-JSValue JSC_HOST_CALL dateProtoFuncToTimeString(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL dateProtoFuncToTimeString(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
if (!thisValue.inherits(&DateInstance::info))
return throwError(exec, TypeError);
@@ -520,43 +524,48 @@ JSValue JSC_HOST_CALL dateProtoFuncToTimeString(ExecState* exec, JSObject*, JSVa
return jsNontrivialString(exec, time);
}
-JSValue JSC_HOST_CALL dateProtoFuncToLocaleString(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL dateProtoFuncToLocaleString(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
if (!thisValue.inherits(&DateInstance::info))
return throwError(exec, TypeError);
DateInstance* thisDateObj = asDateInstance(thisValue);
- return formatLocaleDate(exec, thisDateObj, thisDateObj->internalNumber(), LocaleDateAndTime, args);
+ return formatLocaleDate(exec, thisDateObj, thisDateObj->internalNumber(), LocaleDateAndTime);
}
-JSValue JSC_HOST_CALL dateProtoFuncToLocaleDateString(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL dateProtoFuncToLocaleDateString(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
if (!thisValue.inherits(&DateInstance::info))
return throwError(exec, TypeError);
DateInstance* thisDateObj = asDateInstance(thisValue);
- return formatLocaleDate(exec, thisDateObj, thisDateObj->internalNumber(), LocaleDate, args);
+ return formatLocaleDate(exec, thisDateObj, thisDateObj->internalNumber(), LocaleDate);
}
-JSValue JSC_HOST_CALL dateProtoFuncToLocaleTimeString(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL dateProtoFuncToLocaleTimeString(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
if (!thisValue.inherits(&DateInstance::info))
return throwError(exec, TypeError);
DateInstance* thisDateObj = asDateInstance(thisValue);
- return formatLocaleDate(exec, thisDateObj, thisDateObj->internalNumber(), LocaleTime, args);
+ return formatLocaleDate(exec, thisDateObj, thisDateObj->internalNumber(), LocaleTime);
}
-JSValue JSC_HOST_CALL dateProtoFuncGetTime(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL dateProtoFuncGetTime(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
if (!thisValue.inherits(&DateInstance::info))
return throwError(exec, TypeError);
return asDateInstance(thisValue)->internalValue();
}
-JSValue JSC_HOST_CALL dateProtoFuncGetFullYear(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL dateProtoFuncGetFullYear(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
if (!thisValue.inherits(&DateInstance::info))
return throwError(exec, TypeError);
@@ -568,8 +577,9 @@ JSValue JSC_HOST_CALL dateProtoFuncGetFullYear(ExecState* exec, JSObject*, JSVal
return jsNumber(exec, 1900 + gregorianDateTime->year);
}
-JSValue JSC_HOST_CALL dateProtoFuncGetUTCFullYear(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL dateProtoFuncGetUTCFullYear(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
if (!thisValue.inherits(&DateInstance::info))
return throwError(exec, TypeError);
@@ -581,8 +591,9 @@ JSValue JSC_HOST_CALL dateProtoFuncGetUTCFullYear(ExecState* exec, JSObject*, JS
return jsNumber(exec, 1900 + gregorianDateTime->year);
}
-JSValue JSC_HOST_CALL dateProtoFuncToGMTString(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL dateProtoFuncToGMTString(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
if (!thisValue.inherits(&DateInstance::info))
return throwError(exec, TypeError);
@@ -598,8 +609,9 @@ JSValue JSC_HOST_CALL dateProtoFuncToGMTString(ExecState* exec, JSObject*, JSVal
return jsMakeNontrivialString(exec, date, " ", time);
}
-JSValue JSC_HOST_CALL dateProtoFuncGetMonth(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL dateProtoFuncGetMonth(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
if (!thisValue.inherits(&DateInstance::info))
return throwError(exec, TypeError);
@@ -611,8 +623,9 @@ JSValue JSC_HOST_CALL dateProtoFuncGetMonth(ExecState* exec, JSObject*, JSValue
return jsNumber(exec, gregorianDateTime->month);
}
-JSValue JSC_HOST_CALL dateProtoFuncGetUTCMonth(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL dateProtoFuncGetUTCMonth(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
if (!thisValue.inherits(&DateInstance::info))
return throwError(exec, TypeError);
@@ -624,8 +637,9 @@ JSValue JSC_HOST_CALL dateProtoFuncGetUTCMonth(ExecState* exec, JSObject*, JSVal
return jsNumber(exec, gregorianDateTime->month);
}
-JSValue JSC_HOST_CALL dateProtoFuncGetDate(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL dateProtoFuncGetDate(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
if (!thisValue.inherits(&DateInstance::info))
return throwError(exec, TypeError);
@@ -637,8 +651,9 @@ JSValue JSC_HOST_CALL dateProtoFuncGetDate(ExecState* exec, JSObject*, JSValue t
return jsNumber(exec, gregorianDateTime->monthDay);
}
-JSValue JSC_HOST_CALL dateProtoFuncGetUTCDate(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL dateProtoFuncGetUTCDate(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
if (!thisValue.inherits(&DateInstance::info))
return throwError(exec, TypeError);
@@ -650,8 +665,9 @@ JSValue JSC_HOST_CALL dateProtoFuncGetUTCDate(ExecState* exec, JSObject*, JSValu
return jsNumber(exec, gregorianDateTime->monthDay);
}
-JSValue JSC_HOST_CALL dateProtoFuncGetDay(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL dateProtoFuncGetDay(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
if (!thisValue.inherits(&DateInstance::info))
return throwError(exec, TypeError);
@@ -663,8 +679,9 @@ JSValue JSC_HOST_CALL dateProtoFuncGetDay(ExecState* exec, JSObject*, JSValue th
return jsNumber(exec, gregorianDateTime->weekDay);
}
-JSValue JSC_HOST_CALL dateProtoFuncGetUTCDay(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL dateProtoFuncGetUTCDay(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
if (!thisValue.inherits(&DateInstance::info))
return throwError(exec, TypeError);
@@ -676,8 +693,9 @@ JSValue JSC_HOST_CALL dateProtoFuncGetUTCDay(ExecState* exec, JSObject*, JSValue
return jsNumber(exec, gregorianDateTime->weekDay);
}
-JSValue JSC_HOST_CALL dateProtoFuncGetHours(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL dateProtoFuncGetHours(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
if (!thisValue.inherits(&DateInstance::info))
return throwError(exec, TypeError);
@@ -689,8 +707,9 @@ JSValue JSC_HOST_CALL dateProtoFuncGetHours(ExecState* exec, JSObject*, JSValue
return jsNumber(exec, gregorianDateTime->hour);
}
-JSValue JSC_HOST_CALL dateProtoFuncGetUTCHours(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL dateProtoFuncGetUTCHours(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
if (!thisValue.inherits(&DateInstance::info))
return throwError(exec, TypeError);
@@ -702,8 +721,9 @@ JSValue JSC_HOST_CALL dateProtoFuncGetUTCHours(ExecState* exec, JSObject*, JSVal
return jsNumber(exec, gregorianDateTime->hour);
}
-JSValue JSC_HOST_CALL dateProtoFuncGetMinutes(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL dateProtoFuncGetMinutes(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
if (!thisValue.inherits(&DateInstance::info))
return throwError(exec, TypeError);
@@ -715,8 +735,9 @@ JSValue JSC_HOST_CALL dateProtoFuncGetMinutes(ExecState* exec, JSObject*, JSValu
return jsNumber(exec, gregorianDateTime->minute);
}
-JSValue JSC_HOST_CALL dateProtoFuncGetUTCMinutes(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL dateProtoFuncGetUTCMinutes(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
if (!thisValue.inherits(&DateInstance::info))
return throwError(exec, TypeError);
@@ -728,8 +749,9 @@ JSValue JSC_HOST_CALL dateProtoFuncGetUTCMinutes(ExecState* exec, JSObject*, JSV
return jsNumber(exec, gregorianDateTime->minute);
}
-JSValue JSC_HOST_CALL dateProtoFuncGetSeconds(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL dateProtoFuncGetSeconds(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
if (!thisValue.inherits(&DateInstance::info))
return throwError(exec, TypeError);
@@ -741,8 +763,9 @@ JSValue JSC_HOST_CALL dateProtoFuncGetSeconds(ExecState* exec, JSObject*, JSValu
return jsNumber(exec, gregorianDateTime->second);
}
-JSValue JSC_HOST_CALL dateProtoFuncGetUTCSeconds(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL dateProtoFuncGetUTCSeconds(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
if (!thisValue.inherits(&DateInstance::info))
return throwError(exec, TypeError);
@@ -754,8 +777,9 @@ JSValue JSC_HOST_CALL dateProtoFuncGetUTCSeconds(ExecState* exec, JSObject*, JSV
return jsNumber(exec, gregorianDateTime->second);
}
-JSValue JSC_HOST_CALL dateProtoFuncGetMilliSeconds(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL dateProtoFuncGetMilliSeconds(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
if (!thisValue.inherits(&DateInstance::info))
return throwError(exec, TypeError);
@@ -769,8 +793,9 @@ JSValue JSC_HOST_CALL dateProtoFuncGetMilliSeconds(ExecState* exec, JSObject*, J
return jsNumber(exec, ms);
}
-JSValue JSC_HOST_CALL dateProtoFuncGetUTCMilliseconds(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL dateProtoFuncGetUTCMilliseconds(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
if (!thisValue.inherits(&DateInstance::info))
return throwError(exec, TypeError);
@@ -784,8 +809,9 @@ JSValue JSC_HOST_CALL dateProtoFuncGetUTCMilliseconds(ExecState* exec, JSObject*
return jsNumber(exec, ms);
}
-JSValue JSC_HOST_CALL dateProtoFuncGetTimezoneOffset(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL dateProtoFuncGetTimezoneOffset(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
if (!thisValue.inherits(&DateInstance::info))
return throwError(exec, TypeError);
@@ -797,28 +823,30 @@ JSValue JSC_HOST_CALL dateProtoFuncGetTimezoneOffset(ExecState* exec, JSObject*,
return jsNumber(exec, -gregorianDateTime->utcOffset / minutesPerHour);
}
-JSValue JSC_HOST_CALL dateProtoFuncSetTime(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL dateProtoFuncSetTime(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
if (!thisValue.inherits(&DateInstance::info))
return throwError(exec, TypeError);
DateInstance* thisDateObj = asDateInstance(thisValue);
- double milli = timeClip(args.at(0).toNumber(exec));
+ double milli = timeClip(exec->argument(0).toNumber(exec));
JSValue result = jsNumber(exec, milli);
thisDateObj->setInternalValue(result);
return result;
}
-static JSValue setNewValueFromTimeArgs(ExecState* exec, JSValue thisValue, const ArgList& args, int numArgsToUse, bool inputIsUTC)
+static JSValue setNewValueFromTimeArgs(ExecState* exec, int numArgsToUse, bool inputIsUTC)
{
+ JSValue thisValue = exec->hostThisValue();
if (!thisValue.inherits(&DateInstance::info))
return throwError(exec, TypeError);
DateInstance* thisDateObj = asDateInstance(thisValue);
double milli = thisDateObj->internalNumber();
- if (args.isEmpty() || isnan(milli)) {
+ if (!exec->argumentCount() || isnan(milli)) {
JSValue result = jsNaN(exec);
thisDateObj->setInternalValue(result);
return result;
@@ -835,7 +863,7 @@ static JSValue setNewValueFromTimeArgs(ExecState* exec, JSValue thisValue, const
GregorianDateTime gregorianDateTime;
gregorianDateTime.copyFrom(*other);
- if (!fillStructuresUsingTimeArgs(exec, args, numArgsToUse, &ms, &gregorianDateTime)) {
+ if (!fillStructuresUsingTimeArgs(exec, numArgsToUse, &ms, &gregorianDateTime)) {
JSValue result = jsNaN(exec);
thisDateObj->setInternalValue(result);
return result;
@@ -846,13 +874,14 @@ static JSValue setNewValueFromTimeArgs(ExecState* exec, JSValue thisValue, const
return result;
}
-static JSValue setNewValueFromDateArgs(ExecState* exec, JSValue thisValue, const ArgList& args, int numArgsToUse, bool inputIsUTC)
+static JSValue setNewValueFromDateArgs(ExecState* exec, int numArgsToUse, bool inputIsUTC)
{
+ JSValue thisValue = exec->hostThisValue();
if (!thisValue.inherits(&DateInstance::info))
return throwError(exec, TypeError);
DateInstance* thisDateObj = asDateInstance(thisValue);
- if (args.isEmpty()) {
+ if (!exec->argumentCount()) {
JSValue result = jsNaN(exec);
thisDateObj->setInternalValue(result);
return result;
@@ -874,7 +903,7 @@ static JSValue setNewValueFromDateArgs(ExecState* exec, JSValue thisValue, const
gregorianDateTime.copyFrom(*other);
}
- if (!fillStructuresUsingDateArgs(exec, args, numArgsToUse, &ms, &gregorianDateTime)) {
+ if (!fillStructuresUsingDateArgs(exec, numArgsToUse, &ms, &gregorianDateTime)) {
JSValue result = jsNaN(exec);
thisDateObj->setInternalValue(result);
return result;
@@ -885,97 +914,98 @@ static JSValue setNewValueFromDateArgs(ExecState* exec, JSValue thisValue, const
return result;
}
-JSValue JSC_HOST_CALL dateProtoFuncSetMilliSeconds(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL dateProtoFuncSetMilliSeconds(ExecState* exec)
{
const bool inputIsUTC = false;
- return setNewValueFromTimeArgs(exec, thisValue, args, 1, inputIsUTC);
+ return setNewValueFromTimeArgs(exec, 1, inputIsUTC);
}
-JSValue JSC_HOST_CALL dateProtoFuncSetUTCMilliseconds(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL dateProtoFuncSetUTCMilliseconds(ExecState* exec)
{
const bool inputIsUTC = true;
- return setNewValueFromTimeArgs(exec, thisValue, args, 1, inputIsUTC);
+ return setNewValueFromTimeArgs(exec, 1, inputIsUTC);
}
-JSValue JSC_HOST_CALL dateProtoFuncSetSeconds(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL dateProtoFuncSetSeconds(ExecState* exec)
{
const bool inputIsUTC = false;
- return setNewValueFromTimeArgs(exec, thisValue, args, 2, inputIsUTC);
+ return setNewValueFromTimeArgs(exec, 2, inputIsUTC);
}
-JSValue JSC_HOST_CALL dateProtoFuncSetUTCSeconds(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL dateProtoFuncSetUTCSeconds(ExecState* exec)
{
const bool inputIsUTC = true;
- return setNewValueFromTimeArgs(exec, thisValue, args, 2, inputIsUTC);
+ return setNewValueFromTimeArgs(exec, 2, inputIsUTC);
}
-JSValue JSC_HOST_CALL dateProtoFuncSetMinutes(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL dateProtoFuncSetMinutes(ExecState* exec)
{
const bool inputIsUTC = false;
- return setNewValueFromTimeArgs(exec, thisValue, args, 3, inputIsUTC);
+ return setNewValueFromTimeArgs(exec, 3, inputIsUTC);
}
-JSValue JSC_HOST_CALL dateProtoFuncSetUTCMinutes(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL dateProtoFuncSetUTCMinutes(ExecState* exec)
{
const bool inputIsUTC = true;
- return setNewValueFromTimeArgs(exec, thisValue, args, 3, inputIsUTC);
+ return setNewValueFromTimeArgs(exec, 3, inputIsUTC);
}
-JSValue JSC_HOST_CALL dateProtoFuncSetHours(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL dateProtoFuncSetHours(ExecState* exec)
{
const bool inputIsUTC = false;
- return setNewValueFromTimeArgs(exec, thisValue, args, 4, inputIsUTC);
+ return setNewValueFromTimeArgs(exec, 4, inputIsUTC);
}
-JSValue JSC_HOST_CALL dateProtoFuncSetUTCHours(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL dateProtoFuncSetUTCHours(ExecState* exec)
{
const bool inputIsUTC = true;
- return setNewValueFromTimeArgs(exec, thisValue, args, 4, inputIsUTC);
+ return setNewValueFromTimeArgs(exec, 4, inputIsUTC);
}
-JSValue JSC_HOST_CALL dateProtoFuncSetDate(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL dateProtoFuncSetDate(ExecState* exec)
{
const bool inputIsUTC = false;
- return setNewValueFromDateArgs(exec, thisValue, args, 1, inputIsUTC);
+ return setNewValueFromDateArgs(exec, 1, inputIsUTC);
}
-JSValue JSC_HOST_CALL dateProtoFuncSetUTCDate(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL dateProtoFuncSetUTCDate(ExecState* exec)
{
const bool inputIsUTC = true;
- return setNewValueFromDateArgs(exec, thisValue, args, 1, inputIsUTC);
+ return setNewValueFromDateArgs(exec, 1, inputIsUTC);
}
-JSValue JSC_HOST_CALL dateProtoFuncSetMonth(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL dateProtoFuncSetMonth(ExecState* exec)
{
const bool inputIsUTC = false;
- return setNewValueFromDateArgs(exec, thisValue, args, 2, inputIsUTC);
+ return setNewValueFromDateArgs(exec, 2, inputIsUTC);
}
-JSValue JSC_HOST_CALL dateProtoFuncSetUTCMonth(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL dateProtoFuncSetUTCMonth(ExecState* exec)
{
const bool inputIsUTC = true;
- return setNewValueFromDateArgs(exec, thisValue, args, 2, inputIsUTC);
+ return setNewValueFromDateArgs(exec, 2, inputIsUTC);
}
-JSValue JSC_HOST_CALL dateProtoFuncSetFullYear(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL dateProtoFuncSetFullYear(ExecState* exec)
{
const bool inputIsUTC = false;
- return setNewValueFromDateArgs(exec, thisValue, args, 3, inputIsUTC);
+ return setNewValueFromDateArgs(exec, 3, inputIsUTC);
}
-JSValue JSC_HOST_CALL dateProtoFuncSetUTCFullYear(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL dateProtoFuncSetUTCFullYear(ExecState* exec)
{
const bool inputIsUTC = true;
- return setNewValueFromDateArgs(exec, thisValue, args, 3, inputIsUTC);
+ return setNewValueFromDateArgs(exec, 3, inputIsUTC);
}
-JSValue JSC_HOST_CALL dateProtoFuncSetYear(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL dateProtoFuncSetYear(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
if (!thisValue.inherits(&DateInstance::info))
return throwError(exec, TypeError);
DateInstance* thisDateObj = asDateInstance(thisValue);
- if (args.isEmpty()) {
+ if (!exec->argumentCount()) {
JSValue result = jsNaN(exec);
thisDateObj->setInternalValue(result);
return result;
@@ -997,7 +1027,7 @@ JSValue JSC_HOST_CALL dateProtoFuncSetYear(ExecState* exec, JSObject*, JSValue t
}
bool ok = true;
- int32_t year = args.at(0).toInt32(exec, ok);
+ int32_t year = exec->argument(0).toInt32(exec, ok);
if (!ok) {
JSValue result = jsNaN(exec);
thisDateObj->setInternalValue(result);
@@ -1010,8 +1040,9 @@ JSValue JSC_HOST_CALL dateProtoFuncSetYear(ExecState* exec, JSObject*, JSValue t
return result;
}
-JSValue JSC_HOST_CALL dateProtoFuncGetYear(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL dateProtoFuncGetYear(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
if (!thisValue.inherits(&DateInstance::info))
return throwError(exec, TypeError);
@@ -1025,8 +1056,9 @@ JSValue JSC_HOST_CALL dateProtoFuncGetYear(ExecState* exec, JSObject*, JSValue t
return jsNumber(exec, gregorianDateTime->year);
}
-JSValue JSC_HOST_CALL dateProtoFuncToJSON(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL dateProtoFuncToJSON(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
JSObject* object = thisValue.toThisObject(exec);
if (exec->hadException())
return jsNull();
diff --git a/JavaScriptCore/runtime/ErrorConstructor.cpp b/JavaScriptCore/runtime/ErrorConstructor.cpp
index 4a4559e..b4b0ba2 100644
--- a/JavaScriptCore/runtime/ErrorConstructor.cpp
+++ b/JavaScriptCore/runtime/ErrorConstructor.cpp
@@ -57,10 +57,9 @@ ConstructType ErrorConstructor::getConstructData(ConstructData& constructData)
return ConstructTypeHost;
}
-// ECMA 15.9.2
-static JSValue JSC_HOST_CALL callErrorConstructor(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+static JSValue JSC_HOST_CALL callErrorConstructor(ExecState* exec)
{
- // "Error()" gives the sames result as "new Error()"
+ ArgList args(exec);
return constructError(exec, args);
}
diff --git a/JavaScriptCore/runtime/ErrorPrototype.cpp b/JavaScriptCore/runtime/ErrorPrototype.cpp
index 72fa4c4..4c895fa 100644
--- a/JavaScriptCore/runtime/ErrorPrototype.cpp
+++ b/JavaScriptCore/runtime/ErrorPrototype.cpp
@@ -32,7 +32,7 @@ namespace JSC {
ASSERT_CLASS_FITS_IN_CELL(ErrorPrototype);
-static JSValue JSC_HOST_CALL errorProtoFuncToString(ExecState*, JSObject*, JSValue, const ArgList&);
+static JSValue JSC_HOST_CALL errorProtoFuncToString(ExecState*);
// ECMA 15.9.4
ErrorPrototype::ErrorPrototype(ExecState* exec, JSGlobalObject* globalObject, NonNullPassRefPtr<Structure> structure, Structure* prototypeFunctionStructure)
@@ -46,9 +46,9 @@ ErrorPrototype::ErrorPrototype(ExecState* exec, JSGlobalObject* globalObject, No
putDirectFunctionWithoutTransition(exec, new (exec) NativeFunctionWrapper(exec, globalObject, prototypeFunctionStructure, 0, exec->propertyNames().toString, errorProtoFuncToString), DontEnum);
}
-JSValue JSC_HOST_CALL errorProtoFuncToString(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL errorProtoFuncToString(ExecState* exec)
{
- JSObject* thisObj = thisValue.toThisObject(exec);
+ JSObject* thisObj = exec->hostThisValue().toThisObject(exec);
JSValue name = thisObj->get(exec, exec->propertyNames().name);
JSValue message = thisObj->get(exec, exec->propertyNames().message);
diff --git a/JavaScriptCore/runtime/ExceptionHelpers.cpp b/JavaScriptCore/runtime/ExceptionHelpers.cpp
index aee6f31..b76c226 100644
--- a/JavaScriptCore/runtime/ExceptionHelpers.cpp
+++ b/JavaScriptCore/runtime/ExceptionHelpers.cpp
@@ -182,13 +182,13 @@ JSNotAnObjectErrorStub* createNotAnObjectErrorStub(ExecState* exec, bool isNull)
JSObject* createNotAnObjectError(ExecState* exec, JSNotAnObjectErrorStub* error, unsigned bytecodeOffset, CodeBlock* codeBlock)
{
- // Both op_construct and op_instanceof require a use of op_get_by_id to get
+ // Both op_create_this and op_instanceof require a use of op_get_by_id to get
// the prototype property from an object. The exception messages for exceptions
// thrown by these instances op_get_by_id need to reflect this.
OpcodeID followingOpcodeID;
if (codeBlock->getByIdExceptionInfoForBytecodeOffset(exec, bytecodeOffset, followingOpcodeID)) {
- ASSERT(followingOpcodeID == op_construct || followingOpcodeID == op_instanceof);
- if (followingOpcodeID == op_construct)
+ ASSERT(followingOpcodeID == op_create_this || followingOpcodeID == op_instanceof);
+ if (followingOpcodeID == op_create_this)
return createNotAConstructorError(exec, error->isNull() ? jsNull() : jsUndefined(), bytecodeOffset, codeBlock);
return createInvalidParamError(exec, "instanceof", error->isNull() ? jsNull() : jsUndefined(), bytecodeOffset, codeBlock);
}
diff --git a/JavaScriptCore/runtime/Executable.cpp b/JavaScriptCore/runtime/Executable.cpp
index 8cb3c56..2176e36 100644
--- a/JavaScriptCore/runtime/Executable.cpp
+++ b/JavaScriptCore/runtime/Executable.cpp
@@ -188,7 +188,7 @@ void ProgramExecutable::generateJITCode(ExecState* exec, ScopeChainNode* scopeCh
void FunctionExecutable::generateJITCodeForCall(ExecState* exec, ScopeChainNode* scopeChainNode)
{
CodeBlock* codeBlock = &bytecodeForCall(exec, scopeChainNode);
- m_jitCodeForCall = JIT::compile(scopeChainNode->globalData, codeBlock);
+ m_jitCodeForCall = JIT::compile(scopeChainNode->globalData, codeBlock, &m_jitCodeForCallWithArityCheck);
#if !ENABLE(OPCODE_SAMPLING)
if (!BytecodeGenerator::dumpsGeneratedCode())
@@ -199,7 +199,7 @@ void FunctionExecutable::generateJITCodeForCall(ExecState* exec, ScopeChainNode*
void FunctionExecutable::generateJITCodeForConstruct(ExecState* exec, ScopeChainNode* scopeChainNode)
{
CodeBlock* codeBlock = &bytecodeForConstruct(exec, scopeChainNode);
- m_jitCodeForConstruct = JIT::compile(scopeChainNode->globalData, codeBlock);
+ m_jitCodeForConstruct = JIT::compile(scopeChainNode->globalData, codeBlock, &m_jitCodeForConstructWithArityCheck);
#if !ENABLE(OPCODE_SAMPLING)
if (!BytecodeGenerator::dumpsGeneratedCode())
diff --git a/JavaScriptCore/runtime/Executable.h b/JavaScriptCore/runtime/Executable.h
index ac63c49..39ddf49 100644
--- a/JavaScriptCore/runtime/Executable.h
+++ b/JavaScriptCore/runtime/Executable.h
@@ -86,6 +86,8 @@ namespace JSC {
protected:
JITCode m_jitCodeForCall;
JITCode m_jitCodeForConstruct;
+ MacroAssemblerCodePtr m_jitCodeForCallWithArityCheck;
+ MacroAssemblerCodePtr m_jitCodeForConstructWithArityCheck;
#endif
};
@@ -93,9 +95,9 @@ namespace JSC {
class NativeExecutable : public ExecutableBase {
friend class JIT;
public:
- static PassRefPtr<NativeExecutable> create(MacroAssemblerCodePtr thunk, NativeFunction function)
+ static PassRefPtr<NativeExecutable> create(MacroAssemblerCodePtr callThunk, NativeFunction function, MacroAssemblerCodePtr constructThunk, NativeFunction constructor)
{
- return adoptRef(new NativeExecutable(JITCode::HostFunction(thunk), function));
+ return adoptRef(new NativeExecutable(JITCode::HostFunction(callThunk), function, JITCode::HostFunction(constructThunk), constructor));
}
~NativeExecutable();
@@ -103,15 +105,21 @@ namespace JSC {
NativeFunction function() { return m_function; }
private:
- NativeExecutable(JITCode thunk, NativeFunction function)
+ NativeExecutable(JITCode callThunk, NativeFunction function, JITCode constructThunk, NativeFunction constructor)
: ExecutableBase(NUM_PARAMETERS_IS_HOST)
, m_function(function)
+ , m_constructor(constructor)
{
- m_jitCodeForCall = thunk;
- m_jitCodeForConstruct = thunk;
+ m_jitCodeForCall = callThunk;
+ m_jitCodeForConstruct = constructThunk;
+ m_jitCodeForCallWithArityCheck = callThunk.addressForCall();
+ m_jitCodeForConstructWithArityCheck = constructThunk.addressForCall();
}
NativeFunction m_function;
+ // Probably should be a NativeConstructor, but this will currently require rewriting the JIT
+ // trampoline. It may be easier to make NativeFunction be passed 'this' as a part of the ArgList.
+ NativeFunction m_constructor;
};
#endif
@@ -403,6 +411,20 @@ namespace JSC {
return m_jitCodeForConstruct;
}
+ MacroAssemblerCodePtr generatedJITCodeForCallWithArityCheck()
+ {
+ ASSERT(m_jitCodeForCall);
+ ASSERT(m_jitCodeForCallWithArityCheck);
+ return m_jitCodeForCallWithArityCheck;
+ }
+
+ MacroAssemblerCodePtr generatedJITCodeForConstructWithArityCheck()
+ {
+ ASSERT(m_jitCodeForConstruct);
+ ASSERT(m_jitCodeForConstructWithArityCheck);
+ return m_jitCodeForConstructWithArityCheck;
+ }
+
private:
void generateJITCodeForCall(ExecState*, ScopeChainNode*);
void generateJITCodeForConstruct(ExecState*, ScopeChainNode*);
diff --git a/JavaScriptCore/runtime/FunctionConstructor.cpp b/JavaScriptCore/runtime/FunctionConstructor.cpp
index c8299a9..de9fff1 100644
--- a/JavaScriptCore/runtime/FunctionConstructor.cpp
+++ b/JavaScriptCore/runtime/FunctionConstructor.cpp
@@ -55,8 +55,9 @@ ConstructType FunctionConstructor::getConstructData(ConstructData& constructData
return ConstructTypeHost;
}
-static JSValue JSC_HOST_CALL callFunctionConstructor(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+static JSValue JSC_HOST_CALL callFunctionConstructor(ExecState* exec)
{
+ ArgList args(exec);
return constructFunction(exec, args);
}
diff --git a/JavaScriptCore/runtime/FunctionPrototype.cpp b/JavaScriptCore/runtime/FunctionPrototype.cpp
index 1762816..15392cf 100644
--- a/JavaScriptCore/runtime/FunctionPrototype.cpp
+++ b/JavaScriptCore/runtime/FunctionPrototype.cpp
@@ -34,9 +34,9 @@ namespace JSC {
ASSERT_CLASS_FITS_IN_CELL(FunctionPrototype);
-static JSValue JSC_HOST_CALL functionProtoFuncToString(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL functionProtoFuncApply(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL functionProtoFuncCall(ExecState*, JSObject*, JSValue, const ArgList&);
+static JSValue JSC_HOST_CALL functionProtoFuncToString(ExecState*);
+static JSValue JSC_HOST_CALL functionProtoFuncApply(ExecState*);
+static JSValue JSC_HOST_CALL functionProtoFuncCall(ExecState*);
FunctionPrototype::FunctionPrototype(ExecState* exec, JSGlobalObject* globalObject, NonNullPassRefPtr<Structure> structure)
: InternalFunction(&exec->globalData(), globalObject, structure, exec->propertyNames().nullIdentifier)
@@ -53,7 +53,7 @@ void FunctionPrototype::addFunctionProperties(ExecState* exec, JSGlobalObject* g
putDirectFunctionWithoutTransition(exec, *callFunction, DontEnum);
}
-static JSValue JSC_HOST_CALL callFunctionPrototype(ExecState*, JSObject*, JSValue, const ArgList&)
+static JSValue JSC_HOST_CALL callFunctionPrototype(ExecState*)
{
return jsUndefined();
}
@@ -83,8 +83,9 @@ static inline void insertSemicolonIfNeeded(UString& functionBody)
}
}
-JSValue JSC_HOST_CALL functionProtoFuncToString(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL functionProtoFuncToString(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
if (thisValue.inherits(&JSFunction::info)) {
JSFunction* function = asFunction(thisValue);
if (function->isHostFunction())
@@ -103,14 +104,15 @@ JSValue JSC_HOST_CALL functionProtoFuncToString(ExecState* exec, JSObject*, JSVa
return throwError(exec, TypeError);
}
-JSValue JSC_HOST_CALL functionProtoFuncApply(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL functionProtoFuncApply(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
CallData callData;
CallType callType = thisValue.getCallData(callData);
if (callType == CallTypeNone)
return throwError(exec, TypeError);
- JSValue array = args.at(1);
+ JSValue array = exec->argument(1);
MarkedArgumentBuffer applyArgs;
if (!array.isUndefinedOrNull()) {
@@ -128,19 +130,21 @@ JSValue JSC_HOST_CALL functionProtoFuncApply(ExecState* exec, JSObject*, JSValue
return throwError(exec, TypeError);
}
- return call(exec, thisValue, callType, callData, args.at(0), applyArgs);
+ return call(exec, thisValue, callType, callData, exec->argument(0), applyArgs);
}
-JSValue JSC_HOST_CALL functionProtoFuncCall(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL functionProtoFuncCall(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
CallData callData;
CallType callType = thisValue.getCallData(callData);
if (callType == CallTypeNone)
return throwError(exec, TypeError);
+ ArgList args(exec);
ArgList callArgs;
args.getSlice(1, callArgs);
- return call(exec, thisValue, callType, callData, args.at(0), callArgs);
+ return call(exec, thisValue, callType, callData, exec->argument(0), callArgs);
}
} // namespace JSC
diff --git a/JavaScriptCore/runtime/JSArray.cpp b/JavaScriptCore/runtime/JSArray.cpp
index d3ef44c..cf32e07 100644
--- a/JavaScriptCore/runtime/JSArray.cpp
+++ b/JavaScriptCore/runtime/JSArray.cpp
@@ -649,7 +649,7 @@ static int compareByStringPairForQSort(const void* a, const void* b)
{
const ValueStringPair* va = static_cast<const ValueStringPair*>(a);
const ValueStringPair* vb = static_cast<const ValueStringPair*>(b);
- return compare(va->second, vb->second);
+ return codePointCompare(va->second, vb->second);
}
void JSArray::sortNumeric(ExecState* exec, JSValue compareFunction, CallType callType, const CallData& callData)
diff --git a/JavaScriptCore/runtime/JSFunction.cpp b/JavaScriptCore/runtime/JSFunction.cpp
index 9d36e91..f44ca2f 100644
--- a/JavaScriptCore/runtime/JSFunction.cpp
+++ b/JavaScriptCore/runtime/JSFunction.cpp
@@ -28,8 +28,10 @@
#include "CodeBlock.h"
#include "CommonIdentifiers.h"
#include "CallFrame.h"
+#include "ExceptionHelpers.h"
#include "FunctionPrototype.h"
#include "JSGlobalObject.h"
+#include "JSNotAnObject.h"
#include "Interpreter.h"
#include "ObjectPrototype.h"
#include "Parser.h"
@@ -41,6 +43,14 @@ using namespace Unicode;
namespace JSC {
+JSValue JSC_HOST_CALL callHostFunctionAsConstructor(ExecState* exec)
+{
+ CodeBlock* codeBlock = exec->callerFrame()->codeBlock();
+ unsigned vPCIndex = codeBlock->bytecodeOffset(exec, exec->returnPC());
+ exec->setException(createNotAConstructorError(exec, exec->callee(), vPCIndex, codeBlock));
+ return JSValue();
+}
+
ASSERT_CLASS_FITS_IN_CELL(JSFunction);
const ClassInfo JSFunction::info = { "Function", 0, 0, 0 };
@@ -57,22 +67,16 @@ JSFunction::JSFunction(NonNullPassRefPtr<Structure> structure)
{
}
+#if ENABLE(JIT)
JSFunction::JSFunction(ExecState* exec, JSGlobalObject* globalObject, NonNullPassRefPtr<Structure> structure, int length, const Identifier& name, PassRefPtr<NativeExecutable> thunk)
: Base(globalObject, structure)
-#if ENABLE(JIT)
, m_executable(thunk)
-#endif
, m_scopeChain(globalObject->globalScopeChain())
{
putDirect(exec->globalData().propertyNames->name, jsString(exec, name.isNull() ? "" : name.ustring()), DontDelete | ReadOnly | DontEnum);
-#if ENABLE(JIT)
putDirect(exec->propertyNames().length, jsNumber(exec, length), DontDelete | ReadOnly | DontEnum);
-#else
- UNUSED_PARAM(thunk);
- UNUSED_PARAM(length);
- ASSERT_NOT_REACHED();
-#endif
}
+#endif
JSFunction::JSFunction(ExecState* exec, JSGlobalObject* globalObject, NonNullPassRefPtr<Structure> structure, int length, const Identifier& name, NativeFunction func)
: Base(globalObject, structure)
@@ -165,12 +169,6 @@ CallType JSFunction::getCallData(CallData& callData)
return CallTypeJS;
}
-JSValue JSFunction::call(ExecState* exec, JSValue thisValue, const ArgList& args)
-{
- ASSERT(!isHostFunction());
- return exec->interpreter()->executeCall(jsExecutable(), exec, this, thisValue.toThisObject(exec), args, scope().node(), exec->exceptionSlot());
-}
-
JSValue JSFunction::argumentsGetter(ExecState* exec, JSValue slotBase, const Identifier&)
{
JSFunction* thisObj = asFunction(slotBase);
@@ -298,21 +296,4 @@ ConstructType JSFunction::getConstructData(ConstructData& constructData)
return ConstructTypeJS;
}
-JSObject* JSFunction::construct(ExecState* exec, const ArgList& args)
-{
- ASSERT(!isHostFunction());
- Structure* structure;
- JSValue prototype = get(exec, exec->propertyNames().prototype);
- if (prototype.isObject())
- structure = asObject(prototype)->inheritorID();
- else
- structure = exec->lexicalGlobalObject()->emptyObjectStructure();
- JSObject* thisObj = new (exec) JSObject(structure);
-
- JSValue result = exec->interpreter()->executeConstruct(jsExecutable(), exec, this, thisObj, args, scope().node(), exec->exceptionSlot());
- if (exec->hadException() || !result.isObject())
- return thisObj;
- return asObject(result);
-}
-
} // namespace JSC
diff --git a/JavaScriptCore/runtime/JSFunction.h b/JavaScriptCore/runtime/JSFunction.h
index acdfe0d..a906b2e 100644
--- a/JavaScriptCore/runtime/JSFunction.h
+++ b/JavaScriptCore/runtime/JSFunction.h
@@ -35,6 +35,8 @@ namespace JSC {
class JSGlobalObject;
class NativeExecutable;
+ JSValue JSC_HOST_CALL callHostFunctionAsConstructor(ExecState*);
+
class JSFunction : public JSObjectWithGlobalObject {
friend class JIT;
friend class JSGlobalData;
@@ -43,13 +45,12 @@ namespace JSC {
public:
JSFunction(ExecState*, JSGlobalObject*, NonNullPassRefPtr<Structure>, int length, const Identifier&, NativeFunction);
+#if ENABLE(JIT)
JSFunction(ExecState*, JSGlobalObject*, NonNullPassRefPtr<Structure>, int length, const Identifier&, PassRefPtr<NativeExecutable>);
+#endif
JSFunction(ExecState*, NonNullPassRefPtr<FunctionExecutable>, ScopeChainNode*);
virtual ~JSFunction();
- JSObject* construct(ExecState*, const ArgList&);
- JSValue call(ExecState*, JSValue thisValue, const ArgList&);
-
const UString& name(ExecState*);
const UString displayName(ExecState*);
const UString calculatedDisplayName(ExecState*);
diff --git a/JavaScriptCore/runtime/JSGlobalObject.cpp b/JavaScriptCore/runtime/JSGlobalObject.cpp
index fb9b3eb..69e09c1 100644
--- a/JavaScriptCore/runtime/JSGlobalObject.cpp
+++ b/JavaScriptCore/runtime/JSGlobalObject.cpp
@@ -131,7 +131,7 @@ void JSGlobalObject::init(JSObject* thisValue)
d()->globalData = Heap::heap(this)->globalData();
d()->globalScopeChain = ScopeChain(this, d()->globalData.get(), this, thisValue);
- JSGlobalObject::globalExec()->init(0, 0, d()->globalScopeChain.node(), CallFrame::noCaller(), 0, 0, 0);
+ JSGlobalObject::globalExec()->init(0, 0, d()->globalScopeChain.node(), CallFrame::noCaller(), 0, 0);
if (JSGlobalObject*& headObject = head()) {
d()->prev = headObject;
diff --git a/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp b/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp
index 5da5194..21d06b7 100644
--- a/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp
+++ b/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp
@@ -51,9 +51,9 @@ using namespace Unicode;
namespace JSC {
-static JSValue encode(ExecState* exec, const ArgList& args, const char* doNotEscape)
+static JSValue encode(ExecState* exec, const char* doNotEscape)
{
- UString str = args.at(0).toString(exec);
+ UString str = exec->argument(0).toString(exec);
CString cstr = str.UTF8String(true);
if (!cstr.data())
return throwError(exec, URIError, "String contained an illegal UTF-16 sequence.");
@@ -73,10 +73,10 @@ static JSValue encode(ExecState* exec, const ArgList& args, const char* doNotEsc
return builder.build(exec);
}
-static JSValue decode(ExecState* exec, const ArgList& args, const char* doNotUnescape, bool strict)
+static JSValue decode(ExecState* exec, const char* doNotUnescape, bool strict)
{
JSStringBuilder builder;
- UString str = args.at(0).toString(exec);
+ UString str = exec->argument(0).toString(exec);
int k = 0;
int len = str.size();
const UChar* d = str.data();
@@ -241,11 +241,10 @@ static double parseInt(const UString& s, int radix)
}
if (number >= mantissaOverflowLowerBound) {
- // FIXME: It is incorrect to use UString::ascii() here because it's not thread-safe.
if (radix == 10)
- number = WTF::strtod(s.substr(firstDigitPosition, p - firstDigitPosition).ascii(), 0);
+ number = WTF::strtod(s.substr(firstDigitPosition, p - firstDigitPosition).UTF8String().data(), 0);
else if (radix == 2 || radix == 4 || radix == 8 || radix == 16 || radix == 32)
- number = parseIntOverflow(s.substr(firstDigitPosition, p - firstDigitPosition).ascii(), p - firstDigitPosition, radix);
+ number = parseIntOverflow(s.substr(firstDigitPosition, p - firstDigitPosition).UTF8String().data(), p - firstDigitPosition, radix);
}
if (!sawDigit)
@@ -270,19 +269,17 @@ static double parseFloat(const UString& s)
if (length - p >= 2 && data[p] == '0' && (data[p + 1] == 'x' || data[p + 1] == 'X'))
return 0;
- // FIXME: UString::toDouble will ignore leading ASCII spaces, but we need to ignore
- // other StrWhiteSpaceChar values as well.
return s.toDouble(true /*tolerant*/, false /* NaN for empty string */);
}
-JSValue JSC_HOST_CALL globalFuncEval(ExecState* exec, JSObject* function, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL globalFuncEval(ExecState* exec)
{
- JSObject* thisObject = thisValue.toThisObject(exec);
+ JSObject* thisObject = exec->hostThisValue().toThisObject(exec);
JSObject* unwrappedObject = thisObject->unwrappedObject();
- if (!unwrappedObject->isGlobalObject() || static_cast<JSGlobalObject*>(unwrappedObject)->evalFunction() != function)
+ if (!unwrappedObject->isGlobalObject() || static_cast<JSGlobalObject*>(unwrappedObject)->evalFunction() != exec->callee())
return throwError(exec, EvalError, "The \"this\" value passed to eval must be the global object from which eval originated");
- JSValue x = args.at(0);
+ JSValue x = exec->argument(0);
if (!x.isString())
return x;
@@ -300,10 +297,10 @@ JSValue JSC_HOST_CALL globalFuncEval(ExecState* exec, JSObject* function, JSValu
return exec->interpreter()->execute(eval.get(), exec, thisObject, static_cast<JSGlobalObject*>(unwrappedObject)->globalScopeChain().node(), exec->exceptionSlot());
}
-JSValue JSC_HOST_CALL globalFuncParseInt(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL globalFuncParseInt(ExecState* exec)
{
- JSValue value = args.at(0);
- int32_t radix = args.at(1).toInt32(exec);
+ JSValue value = exec->argument(0);
+ int32_t radix = exec->argument(1).toInt32(exec);
if (radix != 0 && radix != 10)
return jsNumber(exec, parseInt(value.toString(exec), radix));
@@ -323,36 +320,36 @@ JSValue JSC_HOST_CALL globalFuncParseInt(ExecState* exec, JSObject*, JSValue, co
return jsNumber(exec, parseInt(value.toString(exec), radix));
}
-JSValue JSC_HOST_CALL globalFuncParseFloat(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL globalFuncParseFloat(ExecState* exec)
{
- return jsNumber(exec, parseFloat(args.at(0).toString(exec)));
+ return jsNumber(exec, parseFloat(exec->argument(0).toString(exec)));
}
-JSValue JSC_HOST_CALL globalFuncIsNaN(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL globalFuncIsNaN(ExecState* exec)
{
- return jsBoolean(isnan(args.at(0).toNumber(exec)));
+ return jsBoolean(isnan(exec->argument(0).toNumber(exec)));
}
-JSValue JSC_HOST_CALL globalFuncIsFinite(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL globalFuncIsFinite(ExecState* exec)
{
- double n = args.at(0).toNumber(exec);
+ double n = exec->argument(0).toNumber(exec);
return jsBoolean(!isnan(n) && !isinf(n));
}
-JSValue JSC_HOST_CALL globalFuncDecodeURI(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL globalFuncDecodeURI(ExecState* exec)
{
static const char do_not_unescape_when_decoding_URI[] =
"#$&+,/:;=?@";
- return decode(exec, args, do_not_unescape_when_decoding_URI, true);
+ return decode(exec, do_not_unescape_when_decoding_URI, true);
}
-JSValue JSC_HOST_CALL globalFuncDecodeURIComponent(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL globalFuncDecodeURIComponent(ExecState* exec)
{
- return decode(exec, args, "", true);
+ return decode(exec, "", true);
}
-JSValue JSC_HOST_CALL globalFuncEncodeURI(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL globalFuncEncodeURI(ExecState* exec)
{
static const char do_not_escape_when_encoding_URI[] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
@@ -360,10 +357,10 @@ JSValue JSC_HOST_CALL globalFuncEncodeURI(ExecState* exec, JSObject*, JSValue, c
"0123456789"
"!#$&'()*+,-./:;=?@_~";
- return encode(exec, args, do_not_escape_when_encoding_URI);
+ return encode(exec, do_not_escape_when_encoding_URI);
}
-JSValue JSC_HOST_CALL globalFuncEncodeURIComponent(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL globalFuncEncodeURIComponent(ExecState* exec)
{
static const char do_not_escape_when_encoding_URI_component[] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
@@ -371,10 +368,10 @@ JSValue JSC_HOST_CALL globalFuncEncodeURIComponent(ExecState* exec, JSObject*, J
"0123456789"
"!'()*-._~";
- return encode(exec, args, do_not_escape_when_encoding_URI_component);
+ return encode(exec, do_not_escape_when_encoding_URI_component);
}
-JSValue JSC_HOST_CALL globalFuncEscape(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL globalFuncEscape(ExecState* exec)
{
static const char do_not_escape[] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
@@ -383,7 +380,7 @@ JSValue JSC_HOST_CALL globalFuncEscape(ExecState* exec, JSObject*, JSValue, cons
"*+-./@_";
JSStringBuilder builder;
- UString str = args.at(0).toString(exec);
+ UString str = exec->argument(0).toString(exec);
const UChar* c = str.data();
for (unsigned k = 0; k < str.size(); k++, c++) {
int u = c[0];
@@ -403,10 +400,10 @@ JSValue JSC_HOST_CALL globalFuncEscape(ExecState* exec, JSObject*, JSValue, cons
return builder.build(exec);
}
-JSValue JSC_HOST_CALL globalFuncUnescape(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL globalFuncUnescape(ExecState* exec)
{
StringBuilder builder;
- UString str = args.at(0).toString(exec);
+ UString str = exec->argument(0).toString(exec);
int k = 0;
int len = str.size();
while (k < len) {
@@ -431,9 +428,9 @@ JSValue JSC_HOST_CALL globalFuncUnescape(ExecState* exec, JSObject*, JSValue, co
}
#ifndef NDEBUG
-JSValue JSC_HOST_CALL globalFuncJSCPrint(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL globalFuncJSCPrint(ExecState* exec)
{
- CString string = args.at(0).toString(exec).UTF8String();
+ CString string = exec->argument(0).toString(exec).UTF8String();
puts(string.data());
return jsUndefined();
}
diff --git a/JavaScriptCore/runtime/JSGlobalObjectFunctions.h b/JavaScriptCore/runtime/JSGlobalObjectFunctions.h
index b1046f2..b1dada4 100644
--- a/JavaScriptCore/runtime/JSGlobalObjectFunctions.h
+++ b/JavaScriptCore/runtime/JSGlobalObjectFunctions.h
@@ -36,19 +36,19 @@ namespace JSC {
// FIXME: These functions should really be in JSGlobalObject.cpp, but putting them there
// is a 0.5% reduction.
- JSValue JSC_HOST_CALL globalFuncEval(ExecState*, JSObject*, JSValue, const ArgList&);
- JSValue JSC_HOST_CALL globalFuncParseInt(ExecState*, JSObject*, JSValue, const ArgList&);
- JSValue JSC_HOST_CALL globalFuncParseFloat(ExecState*, JSObject*, JSValue, const ArgList&);
- JSValue JSC_HOST_CALL globalFuncIsNaN(ExecState*, JSObject*, JSValue, const ArgList&);
- JSValue JSC_HOST_CALL globalFuncIsFinite(ExecState*, JSObject*, JSValue, const ArgList&);
- JSValue JSC_HOST_CALL globalFuncDecodeURI(ExecState*, JSObject*, JSValue, const ArgList&);
- JSValue JSC_HOST_CALL globalFuncDecodeURIComponent(ExecState*, JSObject*, JSValue, const ArgList&);
- JSValue JSC_HOST_CALL globalFuncEncodeURI(ExecState*, JSObject*, JSValue, const ArgList&);
- JSValue JSC_HOST_CALL globalFuncEncodeURIComponent(ExecState*, JSObject*, JSValue, const ArgList&);
- JSValue JSC_HOST_CALL globalFuncEscape(ExecState*, JSObject*, JSValue, const ArgList&);
- JSValue JSC_HOST_CALL globalFuncUnescape(ExecState*, JSObject*, JSValue, const ArgList&);
+ JSValue JSC_HOST_CALL globalFuncEval(ExecState*);
+ JSValue JSC_HOST_CALL globalFuncParseInt(ExecState*);
+ JSValue JSC_HOST_CALL globalFuncParseFloat(ExecState*);
+ JSValue JSC_HOST_CALL globalFuncIsNaN(ExecState*);
+ JSValue JSC_HOST_CALL globalFuncIsFinite(ExecState*);
+ JSValue JSC_HOST_CALL globalFuncDecodeURI(ExecState*);
+ JSValue JSC_HOST_CALL globalFuncDecodeURIComponent(ExecState*);
+ JSValue JSC_HOST_CALL globalFuncEncodeURI(ExecState*);
+ JSValue JSC_HOST_CALL globalFuncEncodeURIComponent(ExecState*);
+ JSValue JSC_HOST_CALL globalFuncEscape(ExecState*);
+ JSValue JSC_HOST_CALL globalFuncUnescape(ExecState*);
#ifndef NDEBUG
- JSValue JSC_HOST_CALL globalFuncJSCPrint(ExecState*, JSObject*, JSValue, const ArgList&);
+ JSValue JSC_HOST_CALL globalFuncJSCPrint(ExecState*);
#endif
static const double mantissaOverflowLowerBound = 9007199254740992.0;
diff --git a/JavaScriptCore/runtime/JSONObject.cpp b/JavaScriptCore/runtime/JSONObject.cpp
index bd0e25f..86604d8 100644
--- a/JavaScriptCore/runtime/JSONObject.cpp
+++ b/JavaScriptCore/runtime/JSONObject.cpp
@@ -41,8 +41,8 @@ namespace JSC {
ASSERT_CLASS_FITS_IN_CELL(JSONObject);
-static JSValue JSC_HOST_CALL JSONProtoFuncParse(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL JSONProtoFuncStringify(ExecState*, JSObject*, JSValue, const ArgList&);
+static JSValue JSC_HOST_CALL JSONProtoFuncParse(ExecState*);
+static JSValue JSC_HOST_CALL JSONProtoFuncStringify(ExecState*);
}
@@ -839,11 +839,11 @@ NEVER_INLINE JSValue Walker::walk(JSValue unfiltered)
}
// ECMA-262 v5 15.12.2
-JSValue JSC_HOST_CALL JSONProtoFuncParse(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL JSONProtoFuncParse(ExecState* exec)
{
- if (args.isEmpty())
+ if (!exec->argumentCount())
return throwError(exec, GeneralError, "JSON.parse requires at least one parameter");
- JSValue value = args.at(0);
+ JSValue value = exec->argument(0);
UString source = value.toString(exec);
if (exec->hadException())
return jsNull();
@@ -853,10 +853,10 @@ JSValue JSC_HOST_CALL JSONProtoFuncParse(ExecState* exec, JSObject*, JSValue, co
if (!unfiltered)
return throwError(exec, SyntaxError, "Unable to parse JSON string");
- if (args.size() < 2)
+ if (exec->argumentCount() < 2)
return unfiltered;
- JSValue function = args.at(1);
+ JSValue function = exec->argument(1);
CallData callData;
CallType callType = function.getCallData(callData);
if (callType == CallTypeNone)
@@ -865,13 +865,13 @@ JSValue JSC_HOST_CALL JSONProtoFuncParse(ExecState* exec, JSObject*, JSValue, co
}
// ECMA-262 v5 15.12.3
-JSValue JSC_HOST_CALL JSONProtoFuncStringify(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL JSONProtoFuncStringify(ExecState* exec)
{
- if (args.isEmpty())
+ if (!exec->argumentCount())
return throwError(exec, GeneralError, "No input to stringify");
- JSValue value = args.at(0);
- JSValue replacer = args.at(1);
- JSValue space = args.at(2);
+ JSValue value = exec->argument(0);
+ JSValue replacer = exec->argument(1);
+ JSValue space = exec->argument(2);
return Stringifier(exec, replacer, space).stringify(value);
}
diff --git a/JavaScriptCore/runtime/JSObject.cpp b/JavaScriptCore/runtime/JSObject.cpp
index 3ac8a34..5cff4fa 100644
--- a/JavaScriptCore/runtime/JSObject.cpp
+++ b/JavaScriptCore/runtime/JSObject.cpp
@@ -104,18 +104,8 @@ void JSObject::put(ExecState* exec, const Identifier& propertyName, JSValue valu
// Setting __proto__ to a non-object, non-null value is silently ignored to match Mozilla.
if (!value.isObject() && !value.isNull())
return;
-
- JSValue nextPrototypeValue = value;
- while (nextPrototypeValue && nextPrototypeValue.isObject()) {
- JSObject* nextPrototype = asObject(nextPrototypeValue)->unwrappedObject();
- if (nextPrototype == this) {
- throwError(exec, GeneralError, "cyclic __proto__ value");
- return;
- }
- nextPrototypeValue = nextPrototype->prototype();
- }
-
- setPrototype(value);
+ if (!setPrototypeWithCycleCheck(value))
+ throwError(exec, GeneralError, "cyclic __proto__ value");
return;
}
diff --git a/JavaScriptCore/runtime/JSObject.h b/JavaScriptCore/runtime/JSObject.h
index e942ad0..0738d60 100644
--- a/JavaScriptCore/runtime/JSObject.h
+++ b/JavaScriptCore/runtime/JSObject.h
@@ -88,6 +88,7 @@ namespace JSC {
JSValue prototype() const;
void setPrototype(JSValue prototype);
+ bool setPrototypeWithCycleCheck(JSValue prototype);
void setStructure(NonNullPassRefPtr<Structure>);
Structure* inheritorID();
@@ -312,6 +313,19 @@ inline JSValue JSObject::prototype() const
return m_structure->storedPrototype();
}
+inline bool JSObject::setPrototypeWithCycleCheck(JSValue prototype)
+{
+ JSValue nextPrototypeValue = prototype;
+ while (nextPrototypeValue && nextPrototypeValue.isObject()) {
+ JSObject* nextPrototype = asObject(nextPrototypeValue)->unwrappedObject();
+ if (nextPrototype == this)
+ return false;
+ nextPrototypeValue = nextPrototype->prototype();
+ }
+ setPrototype(prototype);
+ return true;
+}
+
inline void JSObject::setPrototype(JSValue prototype)
{
ASSERT(prototype);
diff --git a/JavaScriptCore/runtime/JSString.h b/JavaScriptCore/runtime/JSString.h
index dec925d..975ef45 100644
--- a/JavaScriptCore/runtime/JSString.h
+++ b/JavaScriptCore/runtime/JSString.h
@@ -433,7 +433,7 @@ namespace JSC {
friend JSValue jsString(ExecState* exec, const UString& u1, JSString* s2);
friend JSValue jsString(ExecState* exec, JSString* s1, const UString& u2);
friend JSValue jsString(ExecState* exec, Register* strings, unsigned count);
- friend JSValue jsString(ExecState* exec, JSValue thisValue, const ArgList& args);
+ friend JSValue jsString(ExecState* exec, JSValue thisValue);
friend JSString* jsStringWithFinalizer(ExecState*, const UString&, JSStringFinalizerCallback callback, void* context);
};
diff --git a/JavaScriptCore/runtime/Lookup.cpp b/JavaScriptCore/runtime/Lookup.cpp
index 57d4f0c..50d096c 100644
--- a/JavaScriptCore/runtime/Lookup.cpp
+++ b/JavaScriptCore/runtime/Lookup.cpp
@@ -79,7 +79,7 @@ void setUpStaticFunctionSlot(ExecState* exec, const HashEntry* entry, JSObject*
if (!location) {
NativeFunctionWrapper* function;
JSGlobalObject* globalObject = asGlobalObject(thisObj->getAnonymousValue(0).asCell());
-#if ENABLE(JIT)
+#if ENABLE(JIT) && ENABLE(JIT_OPTIMIZE_NATIVE_CALL)
if (entry->generator())
function = new (exec) NativeFunctionWrapper(exec, globalObject, globalObject->prototypeFunctionStructure(), entry->functionLength(), propertyName, exec->globalData().getHostFunction(entry->function(), entry->generator()));
else
diff --git a/JavaScriptCore/runtime/Lookup.h b/JavaScriptCore/runtime/Lookup.h
index dd36400..5a96fd3 100644
--- a/JavaScriptCore/runtime/Lookup.h
+++ b/JavaScriptCore/runtime/Lookup.h
@@ -76,7 +76,7 @@ namespace JSC {
unsigned char attributes() const { return m_attributes; }
-#if ENABLE(JIT)
+#if ENABLE(JIT) && ENABLE(JIT_OPTIMIZE_NATIVE_CALL)
ThunkGenerator generator() const { ASSERT(m_attributes & Function); return m_u.function.generator; }
#endif
NativeFunction function() const { ASSERT(m_attributes & Function); return m_u.function.functionValue; }
diff --git a/JavaScriptCore/runtime/MathObject.cpp b/JavaScriptCore/runtime/MathObject.cpp
index be249e5..28997db 100644
--- a/JavaScriptCore/runtime/MathObject.cpp
+++ b/JavaScriptCore/runtime/MathObject.cpp
@@ -34,24 +34,24 @@ namespace JSC {
ASSERT_CLASS_FITS_IN_CELL(MathObject);
-static JSValue JSC_HOST_CALL mathProtoFuncAbs(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL mathProtoFuncACos(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL mathProtoFuncASin(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL mathProtoFuncATan(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL mathProtoFuncATan2(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL mathProtoFuncCeil(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL mathProtoFuncCos(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL mathProtoFuncExp(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL mathProtoFuncFloor(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL mathProtoFuncLog(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL mathProtoFuncMax(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL mathProtoFuncMin(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL mathProtoFuncPow(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL mathProtoFuncRandom(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL mathProtoFuncRound(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL mathProtoFuncSin(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL mathProtoFuncSqrt(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL mathProtoFuncTan(ExecState*, JSObject*, JSValue, const ArgList&);
+static JSValue JSC_HOST_CALL mathProtoFuncAbs(ExecState*);
+static JSValue JSC_HOST_CALL mathProtoFuncACos(ExecState*);
+static JSValue JSC_HOST_CALL mathProtoFuncASin(ExecState*);
+static JSValue JSC_HOST_CALL mathProtoFuncATan(ExecState*);
+static JSValue JSC_HOST_CALL mathProtoFuncATan2(ExecState*);
+static JSValue JSC_HOST_CALL mathProtoFuncCeil(ExecState*);
+static JSValue JSC_HOST_CALL mathProtoFuncCos(ExecState*);
+static JSValue JSC_HOST_CALL mathProtoFuncExp(ExecState*);
+static JSValue JSC_HOST_CALL mathProtoFuncFloor(ExecState*);
+static JSValue JSC_HOST_CALL mathProtoFuncLog(ExecState*);
+static JSValue JSC_HOST_CALL mathProtoFuncMax(ExecState*);
+static JSValue JSC_HOST_CALL mathProtoFuncMin(ExecState*);
+static JSValue JSC_HOST_CALL mathProtoFuncPow(ExecState*);
+static JSValue JSC_HOST_CALL mathProtoFuncRandom(ExecState*);
+static JSValue JSC_HOST_CALL mathProtoFuncRound(ExecState*);
+static JSValue JSC_HOST_CALL mathProtoFuncSin(ExecState*);
+static JSValue JSC_HOST_CALL mathProtoFuncSqrt(ExecState*);
+static JSValue JSC_HOST_CALL mathProtoFuncTan(ExecState*);
}
@@ -113,62 +113,62 @@ bool MathObject::getOwnPropertyDescriptor(ExecState* exec, const Identifier& pro
// ------------------------------ Functions --------------------------------
-JSValue JSC_HOST_CALL mathProtoFuncAbs(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL mathProtoFuncAbs(ExecState* exec)
{
- return jsNumber(exec, fabs(args.at(0).toNumber(exec)));
+ return jsNumber(exec, fabs(exec->argument(0).toNumber(exec)));
}
-JSValue JSC_HOST_CALL mathProtoFuncACos(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL mathProtoFuncACos(ExecState* exec)
{
- return jsDoubleNumber(exec, acos(args.at(0).toNumber(exec)));
+ return jsDoubleNumber(exec, acos(exec->argument(0).toNumber(exec)));
}
-JSValue JSC_HOST_CALL mathProtoFuncASin(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL mathProtoFuncASin(ExecState* exec)
{
- return jsDoubleNumber(exec, asin(args.at(0).toNumber(exec)));
+ return jsDoubleNumber(exec, asin(exec->argument(0).toNumber(exec)));
}
-JSValue JSC_HOST_CALL mathProtoFuncATan(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL mathProtoFuncATan(ExecState* exec)
{
- return jsDoubleNumber(exec, atan(args.at(0).toNumber(exec)));
+ return jsDoubleNumber(exec, atan(exec->argument(0).toNumber(exec)));
}
-JSValue JSC_HOST_CALL mathProtoFuncATan2(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL mathProtoFuncATan2(ExecState* exec)
{
- return jsDoubleNumber(exec, atan2(args.at(0).toNumber(exec), args.at(1).toNumber(exec)));
+ return jsDoubleNumber(exec, atan2(exec->argument(0).toNumber(exec), exec->argument(1).toNumber(exec)));
}
-JSValue JSC_HOST_CALL mathProtoFuncCeil(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL mathProtoFuncCeil(ExecState* exec)
{
- return jsNumber(exec, ceil(args.at(0).toNumber(exec)));
+ return jsNumber(exec, ceil(exec->argument(0).toNumber(exec)));
}
-JSValue JSC_HOST_CALL mathProtoFuncCos(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL mathProtoFuncCos(ExecState* exec)
{
- return jsDoubleNumber(exec, cos(args.at(0).toNumber(exec)));
+ return jsDoubleNumber(exec, cos(exec->argument(0).toNumber(exec)));
}
-JSValue JSC_HOST_CALL mathProtoFuncExp(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL mathProtoFuncExp(ExecState* exec)
{
- return jsDoubleNumber(exec, exp(args.at(0).toNumber(exec)));
+ return jsDoubleNumber(exec, exp(exec->argument(0).toNumber(exec)));
}
-JSValue JSC_HOST_CALL mathProtoFuncFloor(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL mathProtoFuncFloor(ExecState* exec)
{
- return jsNumber(exec, floor(args.at(0).toNumber(exec)));
+ return jsNumber(exec, floor(exec->argument(0).toNumber(exec)));
}
-JSValue JSC_HOST_CALL mathProtoFuncLog(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL mathProtoFuncLog(ExecState* exec)
{
- return jsDoubleNumber(exec, log(args.at(0).toNumber(exec)));
+ return jsDoubleNumber(exec, log(exec->argument(0).toNumber(exec)));
}
-JSValue JSC_HOST_CALL mathProtoFuncMax(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL mathProtoFuncMax(ExecState* exec)
{
- unsigned argsCount = args.size();
+ unsigned argsCount = exec->argumentCount();
double result = -Inf;
for (unsigned k = 0; k < argsCount; ++k) {
- double val = args.at(k).toNumber(exec);
+ double val = exec->argument(k).toNumber(exec);
if (isnan(val)) {
result = NaN;
break;
@@ -179,12 +179,12 @@ JSValue JSC_HOST_CALL mathProtoFuncMax(ExecState* exec, JSObject*, JSValue, cons
return jsNumber(exec, result);
}
-JSValue JSC_HOST_CALL mathProtoFuncMin(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL mathProtoFuncMin(ExecState* exec)
{
- unsigned argsCount = args.size();
+ unsigned argsCount = exec->argumentCount();
double result = +Inf;
for (unsigned k = 0; k < argsCount; ++k) {
- double val = args.at(k).toNumber(exec);
+ double val = exec->argument(k).toNumber(exec);
if (isnan(val)) {
result = NaN;
break;
@@ -195,12 +195,12 @@ JSValue JSC_HOST_CALL mathProtoFuncMin(ExecState* exec, JSObject*, JSValue, cons
return jsNumber(exec, result);
}
-JSValue JSC_HOST_CALL mathProtoFuncPow(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL mathProtoFuncPow(ExecState* exec)
{
// ECMA 15.8.2.1.13
- double arg = args.at(0).toNumber(exec);
- double arg2 = args.at(1).toNumber(exec);
+ double arg = exec->argument(0).toNumber(exec);
+ double arg2 = exec->argument(1).toNumber(exec);
if (isnan(arg2))
return jsNaN(exec);
@@ -209,31 +209,31 @@ JSValue JSC_HOST_CALL mathProtoFuncPow(ExecState* exec, JSObject*, JSValue, cons
return jsNumber(exec, pow(arg, arg2));
}
-JSValue JSC_HOST_CALL mathProtoFuncRandom(ExecState* exec, JSObject*, JSValue, const ArgList&)
+JSValue JSC_HOST_CALL mathProtoFuncRandom(ExecState* exec)
{
return jsDoubleNumber(exec, exec->globalData().weakRandom.get());
}
-JSValue JSC_HOST_CALL mathProtoFuncRound(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL mathProtoFuncRound(ExecState* exec)
{
- double arg = args.at(0).toNumber(exec);
+ double arg = exec->argument(0).toNumber(exec);
double integer = ceil(arg);
return jsNumber(exec, integer - (integer - arg > 0.5));
}
-JSValue JSC_HOST_CALL mathProtoFuncSin(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL mathProtoFuncSin(ExecState* exec)
{
- return exec->globalData().cachedSin(exec, args.at(0).toNumber(exec));
+ return exec->globalData().cachedSin(exec, exec->argument(0).toNumber(exec));
}
-JSValue JSC_HOST_CALL mathProtoFuncSqrt(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL mathProtoFuncSqrt(ExecState* exec)
{
- return jsDoubleNumber(exec, sqrt(args.at(0).toNumber(exec)));
+ return jsDoubleNumber(exec, sqrt(exec->argument(0).toNumber(exec)));
}
-JSValue JSC_HOST_CALL mathProtoFuncTan(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL mathProtoFuncTan(ExecState* exec)
{
- return jsDoubleNumber(exec, tan(args.at(0).toNumber(exec)));
+ return jsDoubleNumber(exec, tan(exec->argument(0).toNumber(exec)));
}
} // namespace JSC
diff --git a/JavaScriptCore/runtime/NativeErrorConstructor.cpp b/JavaScriptCore/runtime/NativeErrorConstructor.cpp
index 0fa2218..32ae6b8 100644
--- a/JavaScriptCore/runtime/NativeErrorConstructor.cpp
+++ b/JavaScriptCore/runtime/NativeErrorConstructor.cpp
@@ -62,9 +62,10 @@ ConstructType NativeErrorConstructor::getConstructData(ConstructData& constructD
return ConstructTypeHost;
}
-static JSValue JSC_HOST_CALL callNativeErrorConstructor(ExecState* exec, JSObject* constructor, JSValue, const ArgList& args)
+static JSValue JSC_HOST_CALL callNativeErrorConstructor(ExecState* exec)
{
- return static_cast<NativeErrorConstructor*>(constructor)->construct(exec, args);
+ ArgList args(exec);
+ return static_cast<NativeErrorConstructor*>(exec->callee())->construct(exec, args);
}
CallType NativeErrorConstructor::getCallData(CallData& callData)
diff --git a/JavaScriptCore/runtime/NumberConstructor.cpp b/JavaScriptCore/runtime/NumberConstructor.cpp
index 482e87b..fe91f2e 100644
--- a/JavaScriptCore/runtime/NumberConstructor.cpp
+++ b/JavaScriptCore/runtime/NumberConstructor.cpp
@@ -115,9 +115,9 @@ ConstructType NumberConstructor::getConstructData(ConstructData& constructData)
}
// ECMA 15.7.2
-static JSValue JSC_HOST_CALL callNumberConstructor(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+static JSValue JSC_HOST_CALL callNumberConstructor(ExecState* exec)
{
- return jsNumber(exec, args.isEmpty() ? 0 : args.at(0).toNumber(exec));
+ return jsNumber(exec, !exec->argumentCount() ? 0 : exec->argument(0).toNumber(exec));
}
CallType NumberConstructor::getCallData(CallData& callData)
diff --git a/JavaScriptCore/runtime/NumberPrototype.cpp b/JavaScriptCore/runtime/NumberPrototype.cpp
index efed90b..0f1590c 100644
--- a/JavaScriptCore/runtime/NumberPrototype.cpp
+++ b/JavaScriptCore/runtime/NumberPrototype.cpp
@@ -38,12 +38,12 @@ namespace JSC {
ASSERT_CLASS_FITS_IN_CELL(NumberPrototype);
-static JSValue JSC_HOST_CALL numberProtoFuncToString(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL numberProtoFuncToLocaleString(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL numberProtoFuncValueOf(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL numberProtoFuncToFixed(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL numberProtoFuncToExponential(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL numberProtoFuncToPrecision(ExecState*, JSObject*, JSValue, const ArgList&);
+static JSValue JSC_HOST_CALL numberProtoFuncToString(ExecState*);
+static JSValue JSC_HOST_CALL numberProtoFuncToLocaleString(ExecState*);
+static JSValue JSC_HOST_CALL numberProtoFuncValueOf(ExecState*);
+static JSValue JSC_HOST_CALL numberProtoFuncToFixed(ExecState*);
+static JSValue JSC_HOST_CALL numberProtoFuncToExponential(ExecState*);
+static JSValue JSC_HOST_CALL numberProtoFuncToPrecision(ExecState*);
// ECMA 15.7.4
@@ -137,13 +137,14 @@ static double intPow10(int e)
return static_cast<double>(result);
}
-JSValue JSC_HOST_CALL numberProtoFuncToString(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL numberProtoFuncToString(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
JSValue v = thisValue.getJSNumber();
if (!v)
return throwError(exec, TypeError);
- JSValue radixValue = args.at(0);
+ JSValue radixValue = exec->argument(0);
int radix;
if (radixValue.isInt32())
radix = radixValue.asInt32();
@@ -220,8 +221,9 @@ JSValue JSC_HOST_CALL numberProtoFuncToString(ExecState* exec, JSObject*, JSValu
return jsString(exec, startOfResultString);
}
-JSValue JSC_HOST_CALL numberProtoFuncToLocaleString(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL numberProtoFuncToLocaleString(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
// FIXME: Not implemented yet.
JSValue v = thisValue.getJSNumber();
@@ -231,8 +233,9 @@ JSValue JSC_HOST_CALL numberProtoFuncToLocaleString(ExecState* exec, JSObject*,
return jsString(exec, v.toString(exec));
}
-JSValue JSC_HOST_CALL numberProtoFuncValueOf(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL numberProtoFuncValueOf(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
JSValue v = thisValue.getJSNumber();
if (!v)
return throwError(exec, TypeError);
@@ -240,13 +243,14 @@ JSValue JSC_HOST_CALL numberProtoFuncValueOf(ExecState* exec, JSObject*, JSValue
return v;
}
-JSValue JSC_HOST_CALL numberProtoFuncToFixed(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL numberProtoFuncToFixed(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
JSValue v = thisValue.getJSNumber();
if (!v)
return throwError(exec, TypeError);
- JSValue fractionDigits = args.at(0);
+ JSValue fractionDigits = exec->argument(0);
double df = fractionDigits.toInteger(exec);
if (!(df >= 0 && df <= 20))
return throwError(exec, RangeError, "toFixed() digits argument must be between 0 and 20");
@@ -331,8 +335,9 @@ static void exponentialPartToString(char* buf, int& i, int decimalPoint)
buf[i++] = static_cast<char>('0' + exponential % 10);
}
-JSValue JSC_HOST_CALL numberProtoFuncToExponential(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL numberProtoFuncToExponential(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
JSValue v = thisValue.getJSNumber();
if (!v)
return throwError(exec, TypeError);
@@ -342,7 +347,7 @@ JSValue JSC_HOST_CALL numberProtoFuncToExponential(ExecState* exec, JSObject*, J
if (isnan(x) || isinf(x))
return jsString(exec, UString::from(x));
- JSValue fractionalDigitsValue = args.at(0);
+ JSValue fractionalDigitsValue = exec->argument(0);
double df = fractionalDigitsValue.toInteger(exec);
if (!(df >= 0 && df <= 20))
return throwError(exec, RangeError, "toExponential() argument must between 0 and 20");
@@ -403,15 +408,16 @@ JSValue JSC_HOST_CALL numberProtoFuncToExponential(ExecState* exec, JSObject*, J
return jsString(exec, buf);
}
-JSValue JSC_HOST_CALL numberProtoFuncToPrecision(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL numberProtoFuncToPrecision(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
JSValue v = thisValue.getJSNumber();
if (!v)
return throwError(exec, TypeError);
- double doublePrecision = args.at(0).toIntegerPreserveNaN(exec);
+ double doublePrecision = exec->argument(0).toIntegerPreserveNaN(exec);
double x = v.uncheckedGetNumber();
- if (args.at(0).isUndefined() || isnan(x) || isinf(x))
+ if (exec->argument(0).isUndefined() || isnan(x) || isinf(x))
return jsString(exec, v.toString(exec));
UString s;
diff --git a/JavaScriptCore/runtime/ObjectConstructor.cpp b/JavaScriptCore/runtime/ObjectConstructor.cpp
index fe98df3..c373f87 100644
--- a/JavaScriptCore/runtime/ObjectConstructor.cpp
+++ b/JavaScriptCore/runtime/ObjectConstructor.cpp
@@ -34,13 +34,13 @@ namespace JSC {
ASSERT_CLASS_FITS_IN_CELL(ObjectConstructor);
-static JSValue JSC_HOST_CALL objectConstructorGetPrototypeOf(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL objectConstructorGetOwnPropertyDescriptor(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL objectConstructorGetOwnPropertyNames(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL objectConstructorKeys(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL objectConstructorDefineProperty(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL objectConstructorDefineProperties(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL objectConstructorCreate(ExecState*, JSObject*, JSValue, const ArgList&);
+static JSValue JSC_HOST_CALL objectConstructorGetPrototypeOf(ExecState*);
+static JSValue JSC_HOST_CALL objectConstructorGetOwnPropertyDescriptor(ExecState*);
+static JSValue JSC_HOST_CALL objectConstructorGetOwnPropertyNames(ExecState*);
+static JSValue JSC_HOST_CALL objectConstructorKeys(ExecState*);
+static JSValue JSC_HOST_CALL objectConstructorDefineProperty(ExecState*);
+static JSValue JSC_HOST_CALL objectConstructorDefineProperties(ExecState*);
+static JSValue JSC_HOST_CALL objectConstructorCreate(ExecState*);
ObjectConstructor::ObjectConstructor(ExecState* exec, JSGlobalObject* globalObject, NonNullPassRefPtr<Structure> structure, ObjectPrototype* objectPrototype, Structure* prototypeFunctionStructure)
: InternalFunction(&exec->globalData(), globalObject, structure, Identifier(exec, "Object"))
@@ -80,8 +80,9 @@ ConstructType ObjectConstructor::getConstructData(ConstructData& constructData)
return ConstructTypeHost;
}
-static JSValue JSC_HOST_CALL callObjectConstructor(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+static JSValue JSC_HOST_CALL callObjectConstructor(ExecState* exec)
{
+ ArgList args(exec);
return constructObject(exec, args);
}
@@ -91,21 +92,21 @@ CallType ObjectConstructor::getCallData(CallData& callData)
return CallTypeHost;
}
-JSValue JSC_HOST_CALL objectConstructorGetPrototypeOf(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL objectConstructorGetPrototypeOf(ExecState* exec)
{
- if (!args.at(0).isObject())
+ if (!exec->argument(0).isObject())
return throwError(exec, TypeError, "Requested prototype of a value that is not an object.");
- return asObject(args.at(0))->prototype();
+ return asObject(exec->argument(0))->prototype();
}
-JSValue JSC_HOST_CALL objectConstructorGetOwnPropertyDescriptor(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL objectConstructorGetOwnPropertyDescriptor(ExecState* exec)
{
- if (!args.at(0).isObject())
+ if (!exec->argument(0).isObject())
return throwError(exec, TypeError, "Requested property descriptor of a value that is not an object.");
- UString propertyName = args.at(1).toString(exec);
+ UString propertyName = exec->argument(1).toString(exec);
if (exec->hadException())
return jsNull();
- JSObject* object = asObject(args.at(0));
+ JSObject* object = asObject(exec->argument(0));
PropertyDescriptor descriptor;
if (!object->getOwnPropertyDescriptor(exec, Identifier(exec, propertyName), descriptor))
return jsUndefined();
@@ -128,12 +129,12 @@ JSValue JSC_HOST_CALL objectConstructorGetOwnPropertyDescriptor(ExecState* exec,
}
// FIXME: Use the enumeration cache.
-JSValue JSC_HOST_CALL objectConstructorGetOwnPropertyNames(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL objectConstructorGetOwnPropertyNames(ExecState* exec)
{
- if (!args.at(0).isObject())
+ if (!exec->argument(0).isObject())
return throwError(exec, TypeError, "Requested property names of a value that is not an object.");
PropertyNameArray properties(exec);
- asObject(args.at(0))->getOwnPropertyNames(exec, properties, IncludeDontEnumProperties);
+ asObject(exec->argument(0))->getOwnPropertyNames(exec, properties, IncludeDontEnumProperties);
JSArray* names = constructEmptyArray(exec);
size_t numProperties = properties.size();
for (size_t i = 0; i < numProperties; i++)
@@ -142,12 +143,12 @@ JSValue JSC_HOST_CALL objectConstructorGetOwnPropertyNames(ExecState* exec, JSOb
}
// FIXME: Use the enumeration cache.
-JSValue JSC_HOST_CALL objectConstructorKeys(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL objectConstructorKeys(ExecState* exec)
{
- if (!args.at(0).isObject())
+ if (!exec->argument(0).isObject())
return throwError(exec, TypeError, "Requested keys of a value that is not an object.");
PropertyNameArray properties(exec);
- asObject(args.at(0))->getOwnPropertyNames(exec, properties);
+ asObject(exec->argument(0))->getOwnPropertyNames(exec, properties);
JSArray* keys = constructEmptyArray(exec);
size_t numProperties = properties.size();
for (size_t i = 0; i < numProperties; i++)
@@ -241,16 +242,16 @@ static bool toPropertyDescriptor(ExecState* exec, JSValue in, PropertyDescriptor
return true;
}
-JSValue JSC_HOST_CALL objectConstructorDefineProperty(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL objectConstructorDefineProperty(ExecState* exec)
{
- if (!args.at(0).isObject())
+ if (!exec->argument(0).isObject())
return throwError(exec, TypeError, "Properties can only be defined on Objects.");
- JSObject* O = asObject(args.at(0));
- UString propertyName = args.at(1).toString(exec);
+ JSObject* O = asObject(exec->argument(0));
+ UString propertyName = exec->argument(1).toString(exec);
if (exec->hadException())
return jsNull();
PropertyDescriptor descriptor;
- if (!toPropertyDescriptor(exec, args.at(2), descriptor))
+ if (!toPropertyDescriptor(exec, exec->argument(2), descriptor))
return jsNull();
ASSERT((descriptor.attributes() & (Getter | Setter)) || (!descriptor.isAccessorDescriptor()));
ASSERT(!exec->hadException());
@@ -292,26 +293,26 @@ static JSValue defineProperties(ExecState* exec, JSObject* object, JSObject* pro
return object;
}
-JSValue JSC_HOST_CALL objectConstructorDefineProperties(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL objectConstructorDefineProperties(ExecState* exec)
{
- if (!args.at(0).isObject())
+ if (!exec->argument(0).isObject())
return throwError(exec, TypeError, "Properties can only be defined on Objects.");
- if (!args.at(1).isObject())
+ if (!exec->argument(1).isObject())
return throwError(exec, TypeError, "Property descriptor list must be an Object.");
- return defineProperties(exec, asObject(args.at(0)), asObject(args.at(1)));
+ return defineProperties(exec, asObject(exec->argument(0)), asObject(exec->argument(1)));
}
-JSValue JSC_HOST_CALL objectConstructorCreate(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+JSValue JSC_HOST_CALL objectConstructorCreate(ExecState* exec)
{
- if (!args.at(0).isObject() && !args.at(0).isNull())
+ if (!exec->argument(0).isObject() && !exec->argument(0).isNull())
return throwError(exec, TypeError, "Object prototype may only be an Object or null.");
JSObject* newObject = constructEmptyObject(exec);
- newObject->setPrototype(args.at(0));
- if (args.at(1).isUndefined())
+ newObject->setPrototype(exec->argument(0));
+ if (exec->argument(1).isUndefined())
return newObject;
- if (!args.at(1).isObject())
+ if (!exec->argument(1).isObject())
return throwError(exec, TypeError, "Property descriptor list must be an Object.");
- return defineProperties(exec, newObject, asObject(args.at(1)));
+ return defineProperties(exec, newObject, asObject(exec->argument(1)));
}
} // namespace JSC
diff --git a/JavaScriptCore/runtime/ObjectPrototype.cpp b/JavaScriptCore/runtime/ObjectPrototype.cpp
index 97601f3..87212da 100644
--- a/JavaScriptCore/runtime/ObjectPrototype.cpp
+++ b/JavaScriptCore/runtime/ObjectPrototype.cpp
@@ -31,15 +31,15 @@ namespace JSC {
ASSERT_CLASS_FITS_IN_CELL(ObjectPrototype);
-static JSValue JSC_HOST_CALL objectProtoFuncValueOf(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL objectProtoFuncHasOwnProperty(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL objectProtoFuncIsPrototypeOf(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL objectProtoFuncDefineGetter(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL objectProtoFuncDefineSetter(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL objectProtoFuncLookupGetter(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL objectProtoFuncLookupSetter(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL objectProtoFuncPropertyIsEnumerable(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL objectProtoFuncToLocaleString(ExecState*, JSObject*, JSValue, const ArgList&);
+static JSValue JSC_HOST_CALL objectProtoFuncValueOf(ExecState*);
+static JSValue JSC_HOST_CALL objectProtoFuncHasOwnProperty(ExecState*);
+static JSValue JSC_HOST_CALL objectProtoFuncIsPrototypeOf(ExecState*);
+static JSValue JSC_HOST_CALL objectProtoFuncDefineGetter(ExecState*);
+static JSValue JSC_HOST_CALL objectProtoFuncDefineSetter(ExecState*);
+static JSValue JSC_HOST_CALL objectProtoFuncLookupGetter(ExecState*);
+static JSValue JSC_HOST_CALL objectProtoFuncLookupSetter(ExecState*);
+static JSValue JSC_HOST_CALL objectProtoFuncPropertyIsEnumerable(ExecState*);
+static JSValue JSC_HOST_CALL objectProtoFuncToLocaleString(ExecState*);
ObjectPrototype::ObjectPrototype(ExecState* exec, JSGlobalObject* globalObject, NonNullPassRefPtr<Structure> stucture, Structure* prototypeFunctionStructure)
: JSObject(stucture)
@@ -81,74 +81,84 @@ bool ObjectPrototype::getOwnPropertySlot(ExecState* exec, unsigned propertyName,
// ECMA 15.2.4.2, 15.2.4.4, 15.2.4.5, 15.2.4.7
-JSValue JSC_HOST_CALL objectProtoFuncValueOf(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL objectProtoFuncValueOf(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
return thisValue.toThisObject(exec);
}
-JSValue JSC_HOST_CALL objectProtoFuncHasOwnProperty(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL objectProtoFuncHasOwnProperty(ExecState* exec)
{
- return jsBoolean(thisValue.toThisObject(exec)->hasOwnProperty(exec, Identifier(exec, args.at(0).toString(exec))));
+ JSValue thisValue = exec->hostThisValue();
+ return jsBoolean(thisValue.toThisObject(exec)->hasOwnProperty(exec, Identifier(exec, exec->argument(0).toString(exec))));
}
-JSValue JSC_HOST_CALL objectProtoFuncIsPrototypeOf(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL objectProtoFuncIsPrototypeOf(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
JSObject* thisObj = thisValue.toThisObject(exec);
- if (!args.at(0).isObject())
+ if (!exec->argument(0).isObject())
return jsBoolean(false);
- JSValue v = asObject(args.at(0))->prototype();
+ JSValue v = asObject(exec->argument(0))->prototype();
while (true) {
if (!v.isObject())
return jsBoolean(false);
- if (v == thisObj)
+ if (v == thisObj)
return jsBoolean(true);
v = asObject(v)->prototype();
}
}
-JSValue JSC_HOST_CALL objectProtoFuncDefineGetter(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL objectProtoFuncDefineGetter(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
CallData callData;
- if (args.at(1).getCallData(callData) == CallTypeNone)
+ if (exec->argument(1).getCallData(callData) == CallTypeNone)
return throwError(exec, SyntaxError, "invalid getter usage");
- thisValue.toThisObject(exec)->defineGetter(exec, Identifier(exec, args.at(0).toString(exec)), asObject(args.at(1)));
+ thisValue.toThisObject(exec)->defineGetter(exec, Identifier(exec, exec->argument(0).toString(exec)), asObject(exec->argument(1)));
return jsUndefined();
}
-JSValue JSC_HOST_CALL objectProtoFuncDefineSetter(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL objectProtoFuncDefineSetter(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
CallData callData;
- if (args.at(1).getCallData(callData) == CallTypeNone)
+ if (exec->argument(1).getCallData(callData) == CallTypeNone)
return throwError(exec, SyntaxError, "invalid setter usage");
- thisValue.toThisObject(exec)->defineSetter(exec, Identifier(exec, args.at(0).toString(exec)), asObject(args.at(1)));
+ thisValue.toThisObject(exec)->defineSetter(exec, Identifier(exec, exec->argument(0).toString(exec)), asObject(exec->argument(1)));
return jsUndefined();
}
-JSValue JSC_HOST_CALL objectProtoFuncLookupGetter(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL objectProtoFuncLookupGetter(ExecState* exec)
{
- return thisValue.toThisObject(exec)->lookupGetter(exec, Identifier(exec, args.at(0).toString(exec)));
+ JSValue thisValue = exec->hostThisValue();
+ return thisValue.toThisObject(exec)->lookupGetter(exec, Identifier(exec, exec->argument(0).toString(exec)));
}
-JSValue JSC_HOST_CALL objectProtoFuncLookupSetter(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL objectProtoFuncLookupSetter(ExecState* exec)
{
- return thisValue.toThisObject(exec)->lookupSetter(exec, Identifier(exec, args.at(0).toString(exec)));
+ JSValue thisValue = exec->hostThisValue();
+ return thisValue.toThisObject(exec)->lookupSetter(exec, Identifier(exec, exec->argument(0).toString(exec)));
}
-JSValue JSC_HOST_CALL objectProtoFuncPropertyIsEnumerable(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL objectProtoFuncPropertyIsEnumerable(ExecState* exec)
{
- return jsBoolean(thisValue.toThisObject(exec)->propertyIsEnumerable(exec, Identifier(exec, args.at(0).toString(exec))));
+ JSValue thisValue = exec->hostThisValue();
+ return jsBoolean(thisValue.toThisObject(exec)->propertyIsEnumerable(exec, Identifier(exec, exec->argument(0).toString(exec))));
}
-JSValue JSC_HOST_CALL objectProtoFuncToLocaleString(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL objectProtoFuncToLocaleString(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
return thisValue.toThisJSString(exec);
}
-JSValue JSC_HOST_CALL objectProtoFuncToString(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL objectProtoFuncToString(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
return jsMakeNontrivialString(exec, "[object ", thisValue.toThisObject(exec)->className(), "]");
}
diff --git a/JavaScriptCore/runtime/ObjectPrototype.h b/JavaScriptCore/runtime/ObjectPrototype.h
index 47065d7..8865d6b 100644
--- a/JavaScriptCore/runtime/ObjectPrototype.h
+++ b/JavaScriptCore/runtime/ObjectPrototype.h
@@ -36,7 +36,7 @@ namespace JSC {
bool m_hasNoPropertiesWithUInt32Names;
};
- JSValue JSC_HOST_CALL objectProtoFuncToString(ExecState*, JSObject*, JSValue, const ArgList&);
+ JSValue JSC_HOST_CALL objectProtoFuncToString(ExecState*);
} // namespace JSC
diff --git a/JavaScriptCore/runtime/Operations.h b/JavaScriptCore/runtime/Operations.h
index 1228902..bd6c205 100644
--- a/JavaScriptCore/runtime/Operations.h
+++ b/JavaScriptCore/runtime/Operations.h
@@ -189,15 +189,15 @@ namespace JSC {
return new (globalData) JSString(globalData, ropeBuilder.release());
}
- ALWAYS_INLINE JSValue jsString(ExecState* exec, JSValue thisValue, const ArgList& args)
+ ALWAYS_INLINE JSValue jsString(ExecState* exec, JSValue thisValue)
{
unsigned fiberCount = 0;
if (LIKELY(thisValue.isString()))
fiberCount += asString(thisValue)->size();
else
++fiberCount;
- for (unsigned i = 0; i < args.size(); ++i) {
- JSValue v = args.at(i);
+ for (unsigned i = 0; i < exec->argumentCount(); ++i) {
+ JSValue v = exec->argument(i);
if (LIKELY(v.isString()))
fiberCount += asString(v)->size();
else
@@ -216,8 +216,8 @@ namespace JSC {
unsigned length = 0;
bool overflow = false;
- for (unsigned i = 0; i < args.size(); ++i) {
- JSValue v = args.at(i);
+ for (unsigned i = 0; i < exec->argumentCount(); ++i) {
+ JSValue v = exec->argument(i);
if (LIKELY(v.isString()))
ropeBuilder.append(asString(v));
else
diff --git a/JavaScriptCore/runtime/PropertySlot.cpp b/JavaScriptCore/runtime/PropertySlot.cpp
index 2306a11..fd16c0c 100644
--- a/JavaScriptCore/runtime/PropertySlot.cpp
+++ b/JavaScriptCore/runtime/PropertySlot.cpp
@@ -34,11 +34,7 @@ JSValue PropertySlot::functionGetter(ExecState* exec) const
CallData callData;
CallType callType = m_data.getterFunc->getCallData(callData);
- if (callType == CallTypeHost)
- return callData.native.function(exec, m_data.getterFunc, thisValue(), exec->emptyList());
- ASSERT(callType == CallTypeJS);
- // FIXME: Can this be done more efficiently using the callData?
- return asFunction(m_data.getterFunc)->call(exec, thisValue(), exec->emptyList());
+ return call(exec, m_data.getterFunc, callType, callData, thisValue(), exec->emptyList());
}
} // namespace JSC
diff --git a/JavaScriptCore/runtime/RegExpConstructor.cpp b/JavaScriptCore/runtime/RegExpConstructor.cpp
index e7e6109..c79d5f8 100644
--- a/JavaScriptCore/runtime/RegExpConstructor.cpp
+++ b/JavaScriptCore/runtime/RegExpConstructor.cpp
@@ -319,8 +319,9 @@ ConstructType RegExpConstructor::getConstructData(ConstructData& constructData)
}
// ECMA 15.10.3
-static JSValue JSC_HOST_CALL callRegExpConstructor(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+static JSValue JSC_HOST_CALL callRegExpConstructor(ExecState* exec)
{
+ ArgList args(exec);
return constructRegExp(exec, args);
}
diff --git a/JavaScriptCore/runtime/RegExpObject.cpp b/JavaScriptCore/runtime/RegExpObject.cpp
index b04b55e..acec966 100644
--- a/JavaScriptCore/runtime/RegExpObject.cpp
+++ b/JavaScriptCore/runtime/RegExpObject.cpp
@@ -113,21 +113,21 @@ void setRegExpObjectLastIndex(ExecState* exec, JSObject* baseObject, JSValue val
asRegExpObject(baseObject)->setLastIndex(value.toInteger(exec));
}
-JSValue RegExpObject::test(ExecState* exec, const ArgList& args)
+JSValue RegExpObject::test(ExecState* exec)
{
- return jsBoolean(match(exec, args));
+ return jsBoolean(match(exec));
}
-JSValue RegExpObject::exec(ExecState* exec, const ArgList& args)
+JSValue RegExpObject::exec(ExecState* exec)
{
- if (match(exec, args))
+ if (match(exec))
return exec->lexicalGlobalObject()->regExpConstructor()->arrayOfMatches(exec);
return jsNull();
}
-static JSValue JSC_HOST_CALL callRegExpObject(ExecState* exec, JSObject* function, JSValue, const ArgList& args)
+static JSValue JSC_HOST_CALL callRegExpObject(ExecState* exec)
{
- return asRegExpObject(function)->exec(exec, args);
+ return asRegExpObject(exec->callee())->exec(exec);
}
CallType RegExpObject::getCallData(CallData& callData)
@@ -137,11 +137,11 @@ CallType RegExpObject::getCallData(CallData& callData)
}
// Shared implementation used by test and exec.
-bool RegExpObject::match(ExecState* exec, const ArgList& args)
+bool RegExpObject::match(ExecState* exec)
{
RegExpConstructor* regExpConstructor = exec->lexicalGlobalObject()->regExpConstructor();
- UString input = args.isEmpty() ? regExpConstructor->input() : args.at(0).toString(exec);
+ UString input = !exec->argumentCount() ? regExpConstructor->input() : exec->argument(0).toString(exec);
if (input.isNull()) {
throwError(exec, GeneralError, makeString("No input to ", toString(exec), "."));
return false;
diff --git a/JavaScriptCore/runtime/RegExpObject.h b/JavaScriptCore/runtime/RegExpObject.h
index 3324e53..f997374 100644
--- a/JavaScriptCore/runtime/RegExpObject.h
+++ b/JavaScriptCore/runtime/RegExpObject.h
@@ -37,8 +37,8 @@ namespace JSC {
void setLastIndex(double lastIndex) { d->lastIndex = lastIndex; }
double lastIndex() const { return d->lastIndex; }
- JSValue test(ExecState*, const ArgList&);
- JSValue exec(ExecState*, const ArgList&);
+ JSValue test(ExecState*);
+ JSValue exec(ExecState*);
virtual bool getOwnPropertySlot(ExecState*, const Identifier& propertyName, PropertySlot&);
virtual bool getOwnPropertyDescriptor(ExecState*, const Identifier&, PropertyDescriptor&);
@@ -56,7 +56,7 @@ namespace JSC {
static const unsigned StructureFlags = OverridesGetOwnPropertySlot | JSObjectWithGlobalObject::StructureFlags;
private:
- bool match(ExecState*, const ArgList&);
+ bool match(ExecState*);
virtual CallType getCallData(CallData&);
diff --git a/JavaScriptCore/runtime/RegExpPrototype.cpp b/JavaScriptCore/runtime/RegExpPrototype.cpp
index 9ebf105..0a531ac 100644
--- a/JavaScriptCore/runtime/RegExpPrototype.cpp
+++ b/JavaScriptCore/runtime/RegExpPrototype.cpp
@@ -38,10 +38,10 @@ namespace JSC {
ASSERT_CLASS_FITS_IN_CELL(RegExpPrototype);
-static JSValue JSC_HOST_CALL regExpProtoFuncTest(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL regExpProtoFuncExec(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL regExpProtoFuncCompile(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL regExpProtoFuncToString(ExecState*, JSObject*, JSValue, const ArgList&);
+static JSValue JSC_HOST_CALL regExpProtoFuncTest(ExecState*);
+static JSValue JSC_HOST_CALL regExpProtoFuncExec(ExecState*);
+static JSValue JSC_HOST_CALL regExpProtoFuncCompile(ExecState*);
+static JSValue JSC_HOST_CALL regExpProtoFuncToString(ExecState*);
// ECMA 15.10.5
@@ -58,35 +58,38 @@ RegExpPrototype::RegExpPrototype(ExecState* exec, JSGlobalObject* globalObject,
// ------------------------------ Functions ---------------------------
-JSValue JSC_HOST_CALL regExpProtoFuncTest(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL regExpProtoFuncTest(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
if (!thisValue.inherits(&RegExpObject::info))
return throwError(exec, TypeError);
- return asRegExpObject(thisValue)->test(exec, args);
+ return asRegExpObject(thisValue)->test(exec);
}
-JSValue JSC_HOST_CALL regExpProtoFuncExec(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL regExpProtoFuncExec(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
if (!thisValue.inherits(&RegExpObject::info))
return throwError(exec, TypeError);
- return asRegExpObject(thisValue)->exec(exec, args);
+ return asRegExpObject(thisValue)->exec(exec);
}
-JSValue JSC_HOST_CALL regExpProtoFuncCompile(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL regExpProtoFuncCompile(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
if (!thisValue.inherits(&RegExpObject::info))
return throwError(exec, TypeError);
RefPtr<RegExp> regExp;
- JSValue arg0 = args.at(0);
- JSValue arg1 = args.at(1);
+ JSValue arg0 = exec->argument(0);
+ JSValue arg1 = exec->argument(1);
if (arg0.inherits(&RegExpObject::info)) {
if (!arg1.isUndefined())
return throwError(exec, TypeError, "Cannot supply flags when constructing one RegExp from another.");
regExp = asRegExpObject(arg0)->regExp();
} else {
- UString pattern = args.isEmpty() ? UString("") : arg0.toString(exec);
+ UString pattern = !exec->argumentCount() ? UString("") : arg0.toString(exec);
UString flags = arg1.isUndefined() ? UString("") : arg1.toString(exec);
regExp = RegExp::create(&exec->globalData(), pattern, flags);
}
@@ -99,8 +102,9 @@ JSValue JSC_HOST_CALL regExpProtoFuncCompile(ExecState* exec, JSObject*, JSValue
return jsUndefined();
}
-JSValue JSC_HOST_CALL regExpProtoFuncToString(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL regExpProtoFuncToString(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
if (!thisValue.inherits(&RegExpObject::info)) {
if (thisValue.inherits(&RegExpPrototype::info))
return jsNontrivialString(exec, "//");
diff --git a/JavaScriptCore/runtime/StringConstructor.cpp b/JavaScriptCore/runtime/StringConstructor.cpp
index b5c46b6..c1484c5 100644
--- a/JavaScriptCore/runtime/StringConstructor.cpp
+++ b/JavaScriptCore/runtime/StringConstructor.cpp
@@ -30,21 +30,21 @@
namespace JSC {
-static NEVER_INLINE JSValue stringFromCharCodeSlowCase(ExecState* exec, const ArgList& args)
+static NEVER_INLINE JSValue stringFromCharCodeSlowCase(ExecState* exec)
{
- unsigned length = args.size();
+ unsigned length = exec->argumentCount();
UChar* buf;
PassRefPtr<UStringImpl> impl = UStringImpl::createUninitialized(length, buf);
for (unsigned i = 0; i < length; ++i)
- buf[i] = static_cast<UChar>(args.at(i).toUInt32(exec));
+ buf[i] = static_cast<UChar>(exec->argument(i).toUInt32(exec));
return jsString(exec, impl);
}
-static JSValue JSC_HOST_CALL stringFromCharCode(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+static JSValue JSC_HOST_CALL stringFromCharCode(ExecState* exec)
{
- if (LIKELY(args.size() == 1))
- return jsSingleCharacterString(exec, args.at(0).toUInt32(exec));
- return stringFromCharCodeSlowCase(exec, args);
+ if (LIKELY(exec->argumentCount() == 1))
+ return jsSingleCharacterString(exec, exec->argument(0).toUInt32(exec));
+ return stringFromCharCodeSlowCase(exec);
}
ASSERT_CLASS_FITS_IN_CELL(StringConstructor);
@@ -56,7 +56,7 @@ StringConstructor::StringConstructor(ExecState* exec, JSGlobalObject* globalObje
putDirectWithoutTransition(exec->propertyNames().prototype, stringPrototype, ReadOnly | DontEnum | DontDelete);
// ECMA 15.5.3.2 fromCharCode()
-#if ENABLE(JIT)
+#if ENABLE(JIT) && ENABLE(JIT_OPTIMIZE_NATIVE_CALL)
putDirectFunctionWithoutTransition(exec, new (exec) NativeFunctionWrapper(exec, globalObject, prototypeFunctionStructure, 1, exec->propertyNames().fromCharCode, exec->globalData().getHostFunction(stringFromCharCode, fromCharCodeThunkGenerator)), DontEnum);
#else
putDirectFunctionWithoutTransition(exec, new (exec) NativeFunctionWrapper(exec, globalObject, prototypeFunctionStructure, 1, exec->propertyNames().fromCharCode, stringFromCharCode), DontEnum);
@@ -80,11 +80,11 @@ ConstructType StringConstructor::getConstructData(ConstructData& constructData)
}
// ECMA 15.5.1
-static JSValue JSC_HOST_CALL callStringConstructor(ExecState* exec, JSObject*, JSValue, const ArgList& args)
+static JSValue JSC_HOST_CALL callStringConstructor(ExecState* exec)
{
- if (args.isEmpty())
+ if (!exec->argumentCount())
return jsEmptyString(exec);
- return jsString(exec, args.at(0).toString(exec));
+ return jsString(exec, exec->argument(0).toString(exec));
}
CallType StringConstructor::getCallData(CallData& callData)
diff --git a/JavaScriptCore/runtime/StringPrototype.cpp b/JavaScriptCore/runtime/StringPrototype.cpp
index 9df3dbb..f90d908 100644
--- a/JavaScriptCore/runtime/StringPrototype.cpp
+++ b/JavaScriptCore/runtime/StringPrototype.cpp
@@ -45,40 +45,38 @@ namespace JSC {
ASSERT_CLASS_FITS_IN_CELL(StringPrototype);
-static JSValue JSC_HOST_CALL stringProtoFuncToString(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL stringProtoFuncCharAt(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL stringProtoFuncCharCodeAt(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL stringProtoFuncConcat(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL stringProtoFuncIndexOf(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL stringProtoFuncLastIndexOf(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL stringProtoFuncMatch(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL stringProtoFuncReplace(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL stringProtoFuncSearch(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL stringProtoFuncSlice(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL stringProtoFuncSplit(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL stringProtoFuncSubstr(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL stringProtoFuncSubstring(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL stringProtoFuncToLowerCase(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL stringProtoFuncToUpperCase(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL stringProtoFuncLocaleCompare(ExecState*, JSObject*, JSValue, const ArgList&);
-
-static JSValue JSC_HOST_CALL stringProtoFuncBig(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL stringProtoFuncSmall(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL stringProtoFuncBlink(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL stringProtoFuncBold(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL stringProtoFuncFixed(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL stringProtoFuncItalics(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL stringProtoFuncStrike(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL stringProtoFuncSub(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL stringProtoFuncSup(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL stringProtoFuncFontcolor(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL stringProtoFuncFontsize(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL stringProtoFuncAnchor(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL stringProtoFuncLink(ExecState*, JSObject*, JSValue, const ArgList&);
-
-static JSValue JSC_HOST_CALL stringProtoFuncTrim(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL stringProtoFuncTrimLeft(ExecState*, JSObject*, JSValue, const ArgList&);
-static JSValue JSC_HOST_CALL stringProtoFuncTrimRight(ExecState*, JSObject*, JSValue, const ArgList&);
+static JSValue JSC_HOST_CALL stringProtoFuncToString(ExecState*);
+static JSValue JSC_HOST_CALL stringProtoFuncCharAt(ExecState*);
+static JSValue JSC_HOST_CALL stringProtoFuncCharCodeAt(ExecState*);
+static JSValue JSC_HOST_CALL stringProtoFuncConcat(ExecState*);
+static JSValue JSC_HOST_CALL stringProtoFuncIndexOf(ExecState*);
+static JSValue JSC_HOST_CALL stringProtoFuncLastIndexOf(ExecState*);
+static JSValue JSC_HOST_CALL stringProtoFuncMatch(ExecState*);
+static JSValue JSC_HOST_CALL stringProtoFuncReplace(ExecState*);
+static JSValue JSC_HOST_CALL stringProtoFuncSearch(ExecState*);
+static JSValue JSC_HOST_CALL stringProtoFuncSlice(ExecState*);
+static JSValue JSC_HOST_CALL stringProtoFuncSplit(ExecState*);
+static JSValue JSC_HOST_CALL stringProtoFuncSubstr(ExecState*);
+static JSValue JSC_HOST_CALL stringProtoFuncSubstring(ExecState*);
+static JSValue JSC_HOST_CALL stringProtoFuncToLowerCase(ExecState*);
+static JSValue JSC_HOST_CALL stringProtoFuncToUpperCase(ExecState*);
+static JSValue JSC_HOST_CALL stringProtoFuncLocaleCompare(ExecState*);
+static JSValue JSC_HOST_CALL stringProtoFuncBig(ExecState*);
+static JSValue JSC_HOST_CALL stringProtoFuncSmall(ExecState*);
+static JSValue JSC_HOST_CALL stringProtoFuncBlink(ExecState*);
+static JSValue JSC_HOST_CALL stringProtoFuncBold(ExecState*);
+static JSValue JSC_HOST_CALL stringProtoFuncFixed(ExecState*);
+static JSValue JSC_HOST_CALL stringProtoFuncItalics(ExecState*);
+static JSValue JSC_HOST_CALL stringProtoFuncStrike(ExecState*);
+static JSValue JSC_HOST_CALL stringProtoFuncSub(ExecState*);
+static JSValue JSC_HOST_CALL stringProtoFuncSup(ExecState*);
+static JSValue JSC_HOST_CALL stringProtoFuncFontcolor(ExecState*);
+static JSValue JSC_HOST_CALL stringProtoFuncFontsize(ExecState*);
+static JSValue JSC_HOST_CALL stringProtoFuncAnchor(ExecState*);
+static JSValue JSC_HOST_CALL stringProtoFuncLink(ExecState*);
+static JSValue JSC_HOST_CALL stringProtoFuncTrim(ExecState*);
+static JSValue JSC_HOST_CALL stringProtoFuncTrimLeft(ExecState*);
+static JSValue JSC_HOST_CALL stringProtoFuncTrimRight(ExecState*);
}
@@ -288,11 +286,12 @@ static ALWAYS_INLINE JSValue jsSpliceSubstringsWithSeparators(ExecState* exec, J
return jsString(exec, impl);
}
-JSValue JSC_HOST_CALL stringProtoFuncReplace(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL stringProtoFuncReplace(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
JSString* sourceVal = thisValue.toThisJSString(exec);
- JSValue pattern = args.at(0);
- JSValue replacement = args.at(1);
+ JSValue pattern = exec->argument(0);
+ JSValue replacement = exec->argument(1);
UString replacementString;
CallData callData;
@@ -449,8 +448,9 @@ JSValue JSC_HOST_CALL stringProtoFuncReplace(ExecState* exec, JSObject*, JSValue
return jsString(exec, source.substr(0, matchPos), substituteBackreferences(replacementString, source, ovector, 0), source.substr(matchEnd));
}
-JSValue JSC_HOST_CALL stringProtoFuncToString(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL stringProtoFuncToString(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
// Also used for valueOf.
if (thisValue.isString())
@@ -462,11 +462,12 @@ JSValue JSC_HOST_CALL stringProtoFuncToString(ExecState* exec, JSObject*, JSValu
return throwError(exec, TypeError);
}
-JSValue JSC_HOST_CALL stringProtoFuncCharAt(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL stringProtoFuncCharAt(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
UString s = thisValue.toThisString(exec);
unsigned len = s.size();
- JSValue a0 = args.at(0);
+ JSValue a0 = exec->argument(0);
if (a0.isUInt32()) {
uint32_t i = a0.asUInt32();
if (i < len)
@@ -479,11 +480,12 @@ JSValue JSC_HOST_CALL stringProtoFuncCharAt(ExecState* exec, JSObject*, JSValue
return jsEmptyString(exec);
}
-JSValue JSC_HOST_CALL stringProtoFuncCharCodeAt(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL stringProtoFuncCharCodeAt(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
UString s = thisValue.toThisString(exec);
unsigned len = s.size();
- JSValue a0 = args.at(0);
+ JSValue a0 = exec->argument(0);
if (a0.isUInt32()) {
uint32_t i = a0.asUInt32();
if (i < len)
@@ -496,25 +498,27 @@ JSValue JSC_HOST_CALL stringProtoFuncCharCodeAt(ExecState* exec, JSObject*, JSVa
return jsNaN(exec);
}
-JSValue JSC_HOST_CALL stringProtoFuncConcat(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL stringProtoFuncConcat(ExecState* exec)
{
- if (thisValue.isString() && (args.size() == 1)) {
- JSValue v = args.at(0);
+ JSValue thisValue = exec->hostThisValue();
+ if (thisValue.isString() && (exec->argumentCount() == 1)) {
+ JSValue v = exec->argument(0);
return v.isString()
? jsString(exec, asString(thisValue), asString(v))
: jsString(exec, asString(thisValue), v.toString(exec));
}
- return jsString(exec, thisValue, args);
+ return jsString(exec, thisValue);
}
-JSValue JSC_HOST_CALL stringProtoFuncIndexOf(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL stringProtoFuncIndexOf(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
UString s = thisValue.toThisString(exec);
int len = s.size();
- JSValue a0 = args.at(0);
- JSValue a1 = args.at(1);
+ JSValue a0 = exec->argument(0);
+ JSValue a1 = exec->argument(1);
UString u2 = a0.toString(exec);
int pos;
if (a1.isUndefined())
@@ -536,13 +540,14 @@ JSValue JSC_HOST_CALL stringProtoFuncIndexOf(ExecState* exec, JSObject*, JSValue
return jsNumber(exec, result);
}
-JSValue JSC_HOST_CALL stringProtoFuncLastIndexOf(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL stringProtoFuncLastIndexOf(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
UString s = thisValue.toThisString(exec);
int len = s.size();
- JSValue a0 = args.at(0);
- JSValue a1 = args.at(1);
+ JSValue a0 = exec->argument(0);
+ JSValue a1 = exec->argument(1);
UString u2 = a0.toString(exec);
double dpos = a1.toIntegerPreserveNaN(exec);
@@ -562,11 +567,12 @@ JSValue JSC_HOST_CALL stringProtoFuncLastIndexOf(ExecState* exec, JSObject*, JSV
return jsNumber(exec, result);
}
-JSValue JSC_HOST_CALL stringProtoFuncMatch(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL stringProtoFuncMatch(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
UString s = thisValue.toThisString(exec);
- JSValue a0 = args.at(0);
+ JSValue a0 = exec->argument(0);
UString u = s;
RefPtr<RegExp> reg;
@@ -613,11 +619,12 @@ JSValue JSC_HOST_CALL stringProtoFuncMatch(ExecState* exec, JSObject*, JSValue t
return constructArray(exec, list);
}
-JSValue JSC_HOST_CALL stringProtoFuncSearch(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL stringProtoFuncSearch(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
UString s = thisValue.toThisString(exec);
- JSValue a0 = args.at(0);
+ JSValue a0 = exec->argument(0);
UString u = s;
RefPtr<RegExp> reg;
@@ -638,13 +645,14 @@ JSValue JSC_HOST_CALL stringProtoFuncSearch(ExecState* exec, JSObject*, JSValue
return jsNumber(exec, pos);
}
-JSValue JSC_HOST_CALL stringProtoFuncSlice(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL stringProtoFuncSlice(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
UString s = thisValue.toThisString(exec);
int len = s.size();
- JSValue a0 = args.at(0);
- JSValue a1 = args.at(1);
+ JSValue a0 = exec->argument(0);
+ JSValue a1 = exec->argument(1);
// The arg processing is very much like ArrayProtoFunc::Slice
double start = a0.toInteger(exec);
@@ -662,12 +670,13 @@ JSValue JSC_HOST_CALL stringProtoFuncSlice(ExecState* exec, JSObject*, JSValue t
return jsEmptyString(exec);
}
-JSValue JSC_HOST_CALL stringProtoFuncSplit(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL stringProtoFuncSplit(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
UString s = thisValue.toThisString(exec);
- JSValue a0 = args.at(0);
- JSValue a1 = args.at(1);
+ JSValue a0 = exec->argument(0);
+ JSValue a1 = exec->argument(1);
JSArray* result = constructEmptyArray(exec);
unsigned i = 0;
@@ -725,13 +734,14 @@ JSValue JSC_HOST_CALL stringProtoFuncSplit(ExecState* exec, JSObject*, JSValue t
return result;
}
-JSValue JSC_HOST_CALL stringProtoFuncSubstr(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL stringProtoFuncSubstr(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
UString s = thisValue.toThisString(exec);
int len = s.size();
- JSValue a0 = args.at(0);
- JSValue a1 = args.at(1);
+ JSValue a0 = exec->argument(0);
+ JSValue a1 = exec->argument(1);
double start = a0.toInteger(exec);
double length = a1.isUndefined() ? len : a1.toInteger(exec);
@@ -747,13 +757,14 @@ JSValue JSC_HOST_CALL stringProtoFuncSubstr(ExecState* exec, JSObject*, JSValue
return jsSubstring(exec, s, static_cast<unsigned>(start), static_cast<unsigned>(length));
}
-JSValue JSC_HOST_CALL stringProtoFuncSubstring(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL stringProtoFuncSubstring(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
UString s = thisValue.toThisString(exec);
int len = s.size();
- JSValue a0 = args.at(0);
- JSValue a1 = args.at(1);
+ JSValue a0 = exec->argument(0);
+ JSValue a1 = exec->argument(1);
double start = a0.toNumber(exec);
double end;
@@ -778,8 +789,9 @@ JSValue JSC_HOST_CALL stringProtoFuncSubstring(ExecState* exec, JSObject*, JSVal
return jsSubstring(exec, s, static_cast<unsigned>(start), static_cast<unsigned>(end) - static_cast<unsigned>(start));
}
-JSValue JSC_HOST_CALL stringProtoFuncToLowerCase(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL stringProtoFuncToLowerCase(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
JSString* sVal = thisValue.toThisJSString(exec);
const UString& s = sVal->value(exec);
@@ -815,8 +827,9 @@ JSValue JSC_HOST_CALL stringProtoFuncToLowerCase(ExecState* exec, JSObject*, JSV
return jsString(exec, UString::adopt(buffer));
}
-JSValue JSC_HOST_CALL stringProtoFuncToUpperCase(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL stringProtoFuncToUpperCase(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
JSString* sVal = thisValue.toThisJSString(exec);
const UString& s = sVal->value(exec);
@@ -852,81 +865,93 @@ JSValue JSC_HOST_CALL stringProtoFuncToUpperCase(ExecState* exec, JSObject*, JSV
return jsString(exec, UString::adopt(buffer));
}
-JSValue JSC_HOST_CALL stringProtoFuncLocaleCompare(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL stringProtoFuncLocaleCompare(ExecState* exec)
{
- if (args.size() < 1)
+ JSValue thisValue = exec->hostThisValue();
+ if (exec->argumentCount() < 1)
return jsNumber(exec, 0);
UString s = thisValue.toThisString(exec);
- JSValue a0 = args.at(0);
+ JSValue a0 = exec->argument(0);
return jsNumber(exec, localeCompare(s, a0.toString(exec)));
}
-JSValue JSC_HOST_CALL stringProtoFuncBig(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL stringProtoFuncBig(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
UString s = thisValue.toThisString(exec);
return jsMakeNontrivialString(exec, "<big>", s, "</big>");
}
-JSValue JSC_HOST_CALL stringProtoFuncSmall(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL stringProtoFuncSmall(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
UString s = thisValue.toThisString(exec);
return jsMakeNontrivialString(exec, "<small>", s, "</small>");
}
-JSValue JSC_HOST_CALL stringProtoFuncBlink(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL stringProtoFuncBlink(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
UString s = thisValue.toThisString(exec);
return jsMakeNontrivialString(exec, "<blink>", s, "</blink>");
}
-JSValue JSC_HOST_CALL stringProtoFuncBold(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL stringProtoFuncBold(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
UString s = thisValue.toThisString(exec);
return jsMakeNontrivialString(exec, "<b>", s, "</b>");
}
-JSValue JSC_HOST_CALL stringProtoFuncFixed(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL stringProtoFuncFixed(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
UString s = thisValue.toThisString(exec);
return jsMakeNontrivialString(exec, "<tt>", s, "</tt>");
}
-JSValue JSC_HOST_CALL stringProtoFuncItalics(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL stringProtoFuncItalics(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
UString s = thisValue.toThisString(exec);
return jsMakeNontrivialString(exec, "<i>", s, "</i>");
}
-JSValue JSC_HOST_CALL stringProtoFuncStrike(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL stringProtoFuncStrike(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
UString s = thisValue.toThisString(exec);
return jsMakeNontrivialString(exec, "<strike>", s, "</strike>");
}
-JSValue JSC_HOST_CALL stringProtoFuncSub(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL stringProtoFuncSub(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
UString s = thisValue.toThisString(exec);
return jsMakeNontrivialString(exec, "<sub>", s, "</sub>");
}
-JSValue JSC_HOST_CALL stringProtoFuncSup(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL stringProtoFuncSup(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
UString s = thisValue.toThisString(exec);
return jsMakeNontrivialString(exec, "<sup>", s, "</sup>");
}
-JSValue JSC_HOST_CALL stringProtoFuncFontcolor(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL stringProtoFuncFontcolor(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
UString s = thisValue.toThisString(exec);
- JSValue a0 = args.at(0);
+ JSValue a0 = exec->argument(0);
return jsMakeNontrivialString(exec, "<font color=\"", a0.toString(exec), "\">", s, "</font>");
}
-JSValue JSC_HOST_CALL stringProtoFuncFontsize(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL stringProtoFuncFontsize(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
UString s = thisValue.toThisString(exec);
- JSValue a0 = args.at(0);
+ JSValue a0 = exec->argument(0);
uint32_t smallInteger;
if (a0.getUInt32(smallInteger) && smallInteger <= 9) {
@@ -965,17 +990,19 @@ JSValue JSC_HOST_CALL stringProtoFuncFontsize(ExecState* exec, JSObject*, JSValu
return jsMakeNontrivialString(exec, "<font size=\"", a0.toString(exec), "\">", s, "</font>");
}
-JSValue JSC_HOST_CALL stringProtoFuncAnchor(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL stringProtoFuncAnchor(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
UString s = thisValue.toThisString(exec);
- JSValue a0 = args.at(0);
+ JSValue a0 = exec->argument(0);
return jsMakeNontrivialString(exec, "<a name=\"", a0.toString(exec), "\">", s, "</a>");
}
-JSValue JSC_HOST_CALL stringProtoFuncLink(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args)
+JSValue JSC_HOST_CALL stringProtoFuncLink(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
UString s = thisValue.toThisString(exec);
- JSValue a0 = args.at(0);
+ JSValue a0 = exec->argument(0);
UString linkText = a0.toString(exec);
unsigned linkTextSize = linkText.size();
@@ -1036,18 +1063,21 @@ static inline JSValue trimString(ExecState* exec, JSValue thisValue, int trimKin
return jsString(exec, str.substr(left, right - left));
}
-JSValue JSC_HOST_CALL stringProtoFuncTrim(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL stringProtoFuncTrim(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
return trimString(exec, thisValue, TrimLeft | TrimRight);
}
-JSValue JSC_HOST_CALL stringProtoFuncTrimLeft(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL stringProtoFuncTrimLeft(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
return trimString(exec, thisValue, TrimLeft);
}
-JSValue JSC_HOST_CALL stringProtoFuncTrimRight(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&)
+JSValue JSC_HOST_CALL stringProtoFuncTrimRight(ExecState* exec)
{
+ JSValue thisValue = exec->hostThisValue();
return trimString(exec, thisValue, TrimRight);
}
diff --git a/JavaScriptCore/runtime/UString.cpp b/JavaScriptCore/runtime/UString.cpp
index bdc896d..1c11936 100644
--- a/JavaScriptCore/runtime/UString.cpp
+++ b/JavaScriptCore/runtime/UString.cpp
@@ -262,6 +262,11 @@ double UString::toDouble(bool tolerateTrailingJunk, bool tolerateEmptyString) co
// encounters invalid UTF-16. Further, we have no need to convert the
// non-ASCII characters to UTF-8, so the UTF8String does quite a bit of
// unnecessary work.
+
+ // FIXME: The space skipping code below skips only ASCII spaces, but callers
+ // need to skip all StrWhiteSpace. The isStrWhiteSpace function does the
+ // right thing but requires UChar, not char, for its argument.
+
CString s = UTF8String();
if (s.isNull())
return NaN;
@@ -324,13 +329,13 @@ double UString::toDouble(bool tolerateTrailingJunk, bool tolerateEmptyString) co
}
}
- // allow trailing white space
- while (isASCIISpace(*c))
- c++;
- // don't allow anything after - unless tolerant=true
- // FIXME: If string contains a U+0000 character, then this check is incorrect.
- if (!tolerateTrailingJunk && *c != '\0')
- d = NaN;
+ if (!tolerateTrailingJunk) {
+ // allow trailing white space
+ while (isASCIISpace(*c))
+ c++;
+ if (c != s.data() + s.length())
+ d = NaN;
+ }
return d;
}
@@ -575,29 +580,6 @@ bool operator>(const UString& s1, const UString& s2)
return (l1 > l2);
}
-int compare(const UString& s1, const UString& s2)
-{
- const unsigned l1 = s1.size();
- const unsigned l2 = s2.size();
- const unsigned lmin = l1 < l2 ? l1 : l2;
- const UChar* c1 = s1.data();
- const UChar* c2 = s2.data();
- unsigned l = 0;
- while (l < lmin && *c1 == *c2) {
- c1++;
- c2++;
- l++;
- }
-
- if (l < lmin)
- return (c1[0] > c2[0]) ? 1 : -1;
-
- if (l1 == l2)
- return 0;
-
- return (l1 > l2) ? 1 : -1;
-}
-
CString UString::UTF8String(bool strict) const
{
// Allocate a buffer big enough to hold all the characters.
diff --git a/JavaScriptCore/runtime/UString.h b/JavaScriptCore/runtime/UString.h
index a97e0d7..4364021 100644
--- a/JavaScriptCore/runtime/UString.h
+++ b/JavaScriptCore/runtime/UString.h
@@ -202,7 +202,10 @@ namespace JSC {
return !JSC::operator==(s1, s2);
}
- int compare(const UString&, const UString&);
+ inline int codePointCompare(const UString& s1, const UString& s2)
+ {
+ return codePointCompare(s1.rep(), s2.rep());
+ }
// Rule from ECMA 15.2 about what an array index is.
// Must exactly match string form of an unsigned integer, and be less than 2^32 - 1.
diff --git a/JavaScriptCore/wscript b/JavaScriptCore/wscript
index 61ad1fb..99859f0 100644
--- a/JavaScriptCore/wscript
+++ b/JavaScriptCore/wscript
@@ -29,7 +29,7 @@ import commands
from settings import *
-jscore_excludes = ['jsc.cpp', 'ucptable.cpp']
+jscore_excludes = ['jsc.cpp', 'ucptable.cpp','ProfilerServer.mm']
jscore_excludes.extend(get_excludes(jscore_dir, ['*Brew.cpp', '*CF.cpp', '*Symbian.cpp']))
sources = []
@@ -55,8 +55,14 @@ def generate_jscore_derived_sources():
olddir = os.getcwd()
os.chdir(derived_sources_dir)
+ # DerivedSources.make expects Cygwin (i.e. Unix-style) python, so use that instead.
+ if building_on_win32:
+ oldpath = os.environ["PATH"]
+ os.environ["PATH"] = "/usr/bin" + os.pathsep + os.environ["PATH"]
command = 'make -f %s/DerivedSources.make JavaScriptCore=%s BUILT_PRODUCTS_DIR=%s all FEATURE_DEFINES="%s"' % (js_dir, js_dir, js_dir, ' '.join(feature_defines))
os.system(command)
+ if building_on_win32:
+ os.environ["PATH"] = oldpath
os.chdir(olddir)
def set_options(opt):
@@ -86,6 +92,7 @@ def build(bld):
install_path = output_dir)
jscore.find_sources_in_dirs(full_dirs, excludes = jscore_excludes)
+
obj = bld.new_task_gen(
features = 'cxx cprogram',
diff --git a/JavaScriptCore/wtf/OwnArrayPtr.h b/JavaScriptCore/wtf/OwnArrayPtr.h
index 61375c7..b06e640 100644
--- a/JavaScriptCore/wtf/OwnArrayPtr.h
+++ b/JavaScriptCore/wtf/OwnArrayPtr.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006 Apple Computer, Inc.
+ * Copyright (C) 2006, 2010 Apple Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -35,7 +35,14 @@ namespace WTF {
T* get() const { return m_ptr; }
T* release() { T* ptr = m_ptr; m_ptr = 0; return ptr; }
- void set(T* ptr) { ASSERT(m_ptr != ptr); safeDelete(); m_ptr = ptr; }
+ // FIXME: This should be renamed to adopt.
+ void set(T* ptr)
+ {
+ ASSERT(!ptr || m_ptr != ptr);
+ safeDelete();
+ m_ptr = ptr;
+ }
+
void clear() { safeDelete(); m_ptr = 0; }
T& operator*() const { ASSERT(m_ptr); return *m_ptr; }
diff --git a/JavaScriptCore/wtf/Platform.h b/JavaScriptCore/wtf/Platform.h
index bcf3bbe..4321943 100644
--- a/JavaScriptCore/wtf/Platform.h
+++ b/JavaScriptCore/wtf/Platform.h
@@ -988,8 +988,10 @@ on MinGW. See https://bugs.webkit.org/show_bug.cgi?id=29268 */
#define ENABLE_JIT_OPTIMIZE_CALL 1
#endif
#ifndef ENABLE_JIT_OPTIMIZE_NATIVE_CALL
+#if PLATFORM(MAC)
#define ENABLE_JIT_OPTIMIZE_NATIVE_CALL 1
#endif
+#endif
#ifndef ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS
#define ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS 1
#endif
diff --git a/JavaScriptCore/wtf/StringExtras.h b/JavaScriptCore/wtf/StringExtras.h
index 323de6a..e8f2878 100644
--- a/JavaScriptCore/wtf/StringExtras.h
+++ b/JavaScriptCore/wtf/StringExtras.h
@@ -86,7 +86,7 @@ inline int strcasecmp(const char* s1, const char* s2)
#endif
-#if COMPILER(MSVC) || OS(WINDOWS) || OS(LINUX) || OS(SOLARIS)
+#if COMPILER(MSVC) || COMPILER(RVCT) || OS(WINDOWS) || OS(LINUX) || OS(SOLARIS)
// FIXME: should check HAVE_STRNSTR
inline char* strnstr(const char* buffer, const char* target, size_t bufferLength)
diff --git a/JavaScriptCore/wtf/dtoa.cpp b/JavaScriptCore/wtf/dtoa.cpp
index 6289d04..9edc2a0 100644
--- a/JavaScriptCore/wtf/dtoa.cpp
+++ b/JavaScriptCore/wtf/dtoa.cpp
@@ -142,16 +142,15 @@
#endif
#include <math.h>
#include <stdint.h>
+#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <wtf/AlwaysInline.h>
#include <wtf/Assertions.h>
#include <wtf/FastMalloc.h>
#include <wtf/MathExtras.h>
-#include <wtf/Vector.h>
#include <wtf/Threading.h>
-
-#include <stdio.h>
+#include <wtf/Vector.h>
#if COMPILER(MSVC)
#pragma warning(disable: 4244)
@@ -179,7 +178,10 @@ namespace WTF {
Mutex* s_dtoaP5Mutex;
#endif
-typedef union { double d; uint32_t L[2]; } U;
+typedef union {
+ double d;
+ uint32_t L[2];
+} U;
#ifdef YES_ALIAS
#define dval(x) x
@@ -203,13 +205,20 @@ typedef union { double d; uint32_t L[2]; } U;
/* The following definition of Storeinc is appropriate for MIPS processors.
* An alternative that might be better on some machines is
- * #define Storeinc(a,b,c) (*a++ = b << 16 | c & 0xffff)
+ * *p++ = high << 16 | low & 0xffff;
*/
+static ALWAYS_INLINE uint32_t* storeInc(uint32_t* p, uint16_t high, uint16_t low)
+{
+ uint16_t* p16 = reinterpret_cast<uint16_t*>(p);
#if defined(IEEE_8087) || defined(IEEE_ARM)
-#define Storeinc(a,b,c) (((unsigned short*)a)[1] = (unsigned short)b, ((unsigned short*)a)[0] = (unsigned short)c, a++)
+ p16[1] = high;
+ p16[0] = low;
#else
-#define Storeinc(a,b,c) (((unsigned short*)a)[0] = (unsigned short)b, ((unsigned short*)a)[1] = (unsigned short)c, a++)
+ p16[0] = high;
+ p16[1] = low;
#endif
+ return p + 1;
+}
#define Exp_shift 20
#define Exp_shift1 20
@@ -247,11 +256,11 @@ typedef union { double d; uint32_t L[2]; } U;
#else
#define Flt_Rounds 1
#endif
-#endif /*Flt_Rounds*/
+#endif /* Flt_Rounds */
-#define rounded_product(a,b) a *= b
-#define rounded_quotient(a,b) a /= b
+#define rounded_product(a, b) a *= b
+#define rounded_quotient(a, b) a /= b
#define Big0 (Frac_mask1 | Exp_msk1 * (DBL_MAX_EXP + Bias - 1))
#define Big1 0xffffffff
@@ -413,7 +422,7 @@ static int hi0bits(uint32_t x)
return k;
}
-static int lo0bits (uint32_t* y)
+static int lo0bits(uint32_t* y)
{
int k;
uint32_t x = *y;
@@ -468,8 +477,13 @@ static void mult(BigInt& aRef, const BigInt& bRef)
const BigInt* b = &bRef;
BigInt c;
int wa, wb, wc;
- const uint32_t *x = 0, *xa, *xb, *xae, *xbe;
- uint32_t *xc, *xc0;
+ const uint32_t* x = 0;
+ const uint32_t* xa;
+ const uint32_t* xb;
+ const uint32_t* xae;
+ const uint32_t* xbe;
+ uint32_t* xc;
+ uint32_t* xc0;
uint32_t y;
#ifdef USE_LONG_LONG
unsigned long long carry, z;
@@ -521,7 +535,7 @@ static void mult(BigInt& aRef, const BigInt& bRef)
carry = z >> 16;
uint32_t z2 = (*x++ >> 16) * y + (*xc >> 16) + carry;
carry = z2 >> 16;
- Storeinc(xc, z2, z);
+ xc = storeInc(xc, z2, z);
} while (x < xae);
*xc = carry;
}
@@ -533,7 +547,7 @@ static void mult(BigInt& aRef, const BigInt& bRef)
do {
z = (*x & 0xffff) * y + (*xc >> 16) + carry;
carry = z >> 16;
- Storeinc(xc, z, z2);
+ xc = storeInc(xc, z, z2);
z2 = (*x++ >> 16) * y + (*xc & 0xffff) + carry;
carry = z2 >> 16;
} while (x < xae);
@@ -541,7 +555,7 @@ static void mult(BigInt& aRef, const BigInt& bRef)
}
}
#else
- for(; xb < xbe; xc0++) {
+ for (; xb < xbe; xc0++) {
if ((y = *xb++)) {
x = xa;
xc = xc0;
@@ -567,7 +581,7 @@ struct P5Node : Noncopyable {
};
static P5Node* p5s;
-static int p5s_count;
+static int p5sCount;
static ALWAYS_INLINE void pow5mult(BigInt& b, int k)
{
@@ -590,14 +604,14 @@ static ALWAYS_INLINE void pow5mult(BigInt& b, int k)
i2b(p5->val, 625);
p5->next = 0;
p5s = p5;
- p5s_count = 1;
+ p5sCount = 1;
}
- int p5s_count_local = p5s_count;
+ int p5sCountLocal = p5sCount;
#if ENABLE(JSC_MULTIPLE_THREADS)
s_dtoaP5Mutex->unlock();
#endif
- int p5s_used = 0;
+ int p5sUsed = 0;
for (;;) {
if (k & 1)
@@ -606,20 +620,20 @@ static ALWAYS_INLINE void pow5mult(BigInt& b, int k)
if (!(k >>= 1))
break;
- if (++p5s_used == p5s_count_local) {
+ if (++p5sUsed == p5sCountLocal) {
#if ENABLE(JSC_MULTIPLE_THREADS)
s_dtoaP5Mutex->lock();
#endif
- if (p5s_used == p5s_count) {
+ if (p5sUsed == p5sCount) {
ASSERT(!p5->next);
p5->next = new P5Node;
p5->next->next = 0;
p5->next->val = p5->val;
mult(p5->next->val, p5->next->val);
- ++p5s_count;
+ ++p5sCount;
}
- p5s_count_local = p5s_count;
+ p5sCountLocal = p5sCount;
#if ENABLE(JSC_MULTIPLE_THREADS)
s_dtoaP5Mutex->unlock();
#endif
@@ -659,7 +673,7 @@ static ALWAYS_INLINE void lshift(BigInt& b, int k)
*dst = hiSubword;
ASSERT(dst == dstStart + n);
- b.resize(origSize + n + (b.words()[n1 - 1] != 0));
+ b.resize(origSize + n + !!b.words()[n1 - 1]);
}
#else
if (k &= 0xf) {
@@ -671,9 +685,9 @@ static ALWAYS_INLINE void lshift(BigInt& b, int k)
}
*dst = hiSubword;
ASSERT(dst == dstStart + n);
- result->wds = b->wds + n + (result->x[n1 - 1] != 0);
+ result->wds = b->wds + n + !!result->x[n1 - 1];
}
- #endif
+#endif
else {
do {
*--dst = *src--;
@@ -714,7 +728,7 @@ static ALWAYS_INLINE void diff(BigInt& c, const BigInt& aRef, const BigInt& bRef
const BigInt* a = &aRef;
const BigInt* b = &bRef;
int i, wa, wb;
- uint32_t *xc;
+ uint32_t* xc;
i = cmp(*a, *b);
if (!i) {
@@ -761,14 +775,14 @@ static ALWAYS_INLINE void diff(BigInt& c, const BigInt& aRef, const BigInt& bRef
borrow = (y & 0x10000) >> 16;
uint32_t z = (*xa++ >> 16) - (*xb++ >> 16) - borrow;
borrow = (z & 0x10000) >> 16;
- Storeinc(xc, z, y);
+ xc = storeInc(xc, z, y);
} while (xb < xbe);
while (xa < xae) {
uint32_t y = (*xa & 0xffff) - borrow;
borrow = (y & 0x10000) >> 16;
uint32_t z = (*xa++ >> 16) - borrow;
borrow = (z & 0x10000) >> 16;
- Storeinc(xc, z, y);
+ xc = storeInc(xc, z, y);
}
#else
do {
@@ -843,7 +857,7 @@ static double b2d(const BigInt& a, int* e)
d0 = Exp_1 | (y >> (Ebits - k));
w = xa > xa0 ? *--xa : 0;
d1 = (y << (32 - Ebits + k)) | (w >> (Ebits - k));
- goto ret_d;
+ goto returnD;
}
z = xa > xa0 ? *--xa : 0;
if (k -= Ebits) {
@@ -861,7 +875,7 @@ static double b2d(const BigInt& a, int* e)
w = xa > xa0 ? *--xa : 0;
y = xa > xa0 ? *--xa : 0;
d1 = z << k + 16 - Ebits | w << k - Ebits | y >> 16 + Ebits - k;
- goto ret_d;
+ goto returnD;
}
z = xa > xa0 ? *--xa : 0;
w = xa > xa0 ? *--xa : 0;
@@ -870,7 +884,7 @@ static double b2d(const BigInt& a, int* e)
y = xa > xa0 ? *--xa : 0;
d1 = w << k + 16 | y << k;
#endif
-ret_d:
+returnD:
#undef d0
#undef d1
return dval(&d);
@@ -879,7 +893,8 @@ ret_d:
static ALWAYS_INLINE void d2b(BigInt& b, U* d, int* e, int* bits)
{
int de, k;
- uint32_t *x, y, z;
+ uint32_t* x;
+ uint32_t y, z;
#ifndef Sudden_Underflow
int i;
#endif
@@ -1115,27 +1130,28 @@ double strtod(const char* s00, char** se)
sign = nz0 = nz = 0;
dval(&rv) = 0;
- for (s = s00; ; s++)
+ for (s = s00; ; s++) {
switch (*s) {
- case '-':
- sign = 1;
- /* no break */
- case '+':
- if (*++s)
- goto break2;
- /* no break */
- case 0:
- goto ret0;
- case '\t':
- case '\n':
- case '\v':
- case '\f':
- case '\r':
- case ' ':
- continue;
- default:
+ case '-':
+ sign = 1;
+ /* no break */
+ case '+':
+ if (*++s)
goto break2;
+ /* no break */
+ case 0:
+ goto ret0;
+ case '\t':
+ case '\n':
+ case '\v':
+ case '\f':
+ case '\r':
+ case ' ':
+ continue;
+ default:
+ goto break2;
}
+ }
break2:
if (*s == '0') {
nz0 = 1;
@@ -1160,12 +1176,12 @@ break2:
s0 = s;
nf += nz;
nz = 0;
- goto have_dig;
+ goto haveDig;
}
- goto dig_done;
+ goto digDone;
}
for (; c >= '0' && c <= '9'; c = *++s) {
-have_dig:
+haveDig:
nz++;
if (c -= '0') {
nf += nz;
@@ -1182,19 +1198,18 @@ have_dig:
}
}
}
-dig_done:
+digDone:
e = 0;
if (c == 'e' || c == 'E') {
- if (!nd && !nz && !nz0) {
+ if (!nd && !nz && !nz0)
goto ret0;
- }
s00 = s;
esign = 0;
switch (c = *++s) {
- case '-':
- esign = 1;
- case '+':
- c = *++s;
+ case '-':
+ esign = 1;
+ case '+':
+ c = *++s;
}
if (c >= '0' && c <= '9') {
while (c == '0')
@@ -1222,29 +1237,29 @@ dig_done:
if (!nz && !nz0) {
#ifdef INFNAN_CHECK
/* Check for Nan and Infinity */
- switch(c) {
- case 'i':
- case 'I':
- if (match(&s,"nf")) {
- --s;
- if (!match(&s,"inity"))
- ++s;
- word0(&rv) = 0x7ff00000;
- word1(&rv) = 0;
- goto ret;
- }
- break;
- case 'n':
- case 'N':
- if (match(&s, "an")) {
- word0(&rv) = NAN_WORD0;
- word1(&rv) = NAN_WORD1;
+ switch (c) {
+ case 'i':
+ case 'I':
+ if (match(&s, "nf")) {
+ --s;
+ if (!match(&s, "inity"))
+ ++s;
+ word0(&rv) = 0x7ff00000;
+ word1(&rv) = 0;
+ goto ret;
+ }
+ break;
+ case 'n':
+ case 'N':
+ if (match(&s, "an")) {
+ word0(&rv) = NAN_WORD0;
+ word1(&rv) = NAN_WORD1;
#ifndef No_Hex_NaN
- if (*s == '(') /*)*/
- hexnan(&rv, &s);
+ if (*s == '(') /*)*/
+ hexnan(&rv, &s);
#endif
- goto ret;
- }
+ goto ret;
+ }
}
#endif /* INFNAN_CHECK */
ret0:
@@ -1498,10 +1513,10 @@ undfl:
}
lshift(delta, Log2P);
if (cmp(delta, bs) > 0)
- goto drop_down;
+ goto dropDown;
break;
}
- if (i == 0) {
+ if (!i) {
/* exactly half-way between */
if (dsign) {
if ((word0(&rv) & Bndry_mask1) == Bndry_mask1
@@ -1520,7 +1535,7 @@ undfl:
break;
}
} else if (!(word0(&rv) & Bndry_mask) && !word1(&rv)) {
-drop_down:
+dropDown:
/* boundary case -- decrement exponent */
#ifdef Sudden_Underflow /*{{*/
L = word0(&rv) & Exp_mask;
@@ -1592,15 +1607,15 @@ drop_down:
aadj1 = dsign ? aadj : -aadj;
#ifdef Check_FLT_ROUNDS
switch (Rounding) {
- case 2: /* towards +infinity */
- aadj1 -= 0.5;
- break;
- case 0: /* towards 0 */
- case 3: /* towards -infinity */
- aadj1 += 0.5;
+ case 2: /* towards +infinity */
+ aadj1 -= 0.5;
+ break;
+ case 0: /* towards 0 */
+ case 3: /* towards -infinity */
+ aadj1 += 0.5;
}
#else
- if (Flt_Rounds == 0)
+ if (!Flt_Rounds)
aadj1 += 0.5;
#endif /*Check_FLT_ROUNDS*/
}
@@ -1619,8 +1634,8 @@ drop_down:
word0(&rv) = Big0;
word1(&rv) = Big1;
goto cont;
- } else
- word0(&rv) += P * Exp_msk1;
+ }
+ word0(&rv) += P * Exp_msk1;
} else {
#ifdef Avoid_Underflow
if (scale && y <= 2 * P * Exp_msk1) {
@@ -1643,16 +1658,14 @@ drop_down:
word0(&rv) += P * Exp_msk1;
adj.d = aadj1 * ulp(&rv);
dval(&rv) += adj.d;
- if ((word0(&rv) & Exp_mask) <= P * Exp_msk1)
- {
+ if ((word0(&rv) & Exp_mask) <= P * Exp_msk1) {
if (word0(&rv0) == Tiny0 && word1(&rv0) == Tiny1)
goto undfl;
word0(&rv) = Tiny0;
word1(&rv) = Tiny1;
goto cont;
}
- else
- word0(&rv) -= P * Exp_msk1;
+ word0(&rv) -= P * Exp_msk1;
} else {
adj.d = aadj1 * ulp(&rv);
dval(&rv) += adj.d;
@@ -1693,7 +1706,7 @@ drop_down:
}
#endif
cont:
- ;
+ {}
}
#ifdef SET_INEXACT
if (inexact) {
@@ -1712,7 +1725,7 @@ cont:
dval(&rv) *= dval(&rv0);
#ifndef NO_ERRNO
/* try to avoid the bug of testing an 8087 register value */
- if (word0(&rv) == 0 && word1(&rv) == 0)
+ if (!word0(&rv) && !word1(&rv))
errno = ERANGE;
#endif
}
@@ -1733,7 +1746,11 @@ ret:
static ALWAYS_INLINE int quorem(BigInt& b, BigInt& S)
{
size_t n;
- uint32_t *bx, *bxe, q, *sx, *sxe;
+ uint32_t* bx;
+ uint32_t* bxe;
+ uint32_t q;
+ uint32_t* sx;
+ uint32_t* sxe;
#ifdef USE_LONG_LONG
unsigned long long borrow, carry, y, ys;
#else
@@ -1775,7 +1792,7 @@ static ALWAYS_INLINE int quorem(BigInt& b, BigInt& S)
borrow = (y & 0x10000) >> 16;
z = (*bx >> 16) - (zs & 0xffff) - borrow;
borrow = (z & 0x10000) >> 16;
- Storeinc(bx, z, y);
+ bx = storeInc(bx, z, y);
#else
ys = *sx++ * q + carry;
carry = ys >> 16;
@@ -1815,7 +1832,7 @@ static ALWAYS_INLINE int quorem(BigInt& b, BigInt& S)
borrow = (y & 0x10000) >> 16;
z = (*bx >> 16) - (zs & 0xffff) - borrow;
borrow = (z & 0x10000) >> 16;
- Storeinc(bx, z, y);
+ bx = storeInc(bx, z, y);
#else
ys = *sx++ + carry;
carry = ys >> 16;
@@ -1892,7 +1909,8 @@ void dtoa(DtoaBuffer result, double dd, int ndigits, int* decpt, int* sign, char
BigInt b, b1, delta, mlo, mhi, S;
U d2, eps, u;
double ds;
- char *s, *s0;
+ char* s;
+ char* s0;
#ifdef SET_INEXACT
int inexact, oldinexact;
#endif
@@ -1905,8 +1923,7 @@ void dtoa(DtoaBuffer result, double dd, int ndigits, int* decpt, int* sign, char
} else
*sign = 0;
- if ((word0(&u) & Exp_mask) == Exp_mask)
- {
+ if ((word0(&u) & Exp_mask) == Exp_mask) {
/* Infinity or NaN */
*decpt = 9999;
if (!word1(&u) && !(word0(&u) & 0xfffff)) {
@@ -2059,7 +2076,7 @@ void dtoa(DtoaBuffer result, double dd, int ndigits, int* decpt, int* sign, char
}
if (k_check && dval(&u) < 1. && ilim > 0) {
if (ilim1 <= 0)
- goto fast_failed;
+ goto fastFailed;
ilim = ilim1;
k--;
dval(&u) *= 10.;
@@ -2067,15 +2084,15 @@ void dtoa(DtoaBuffer result, double dd, int ndigits, int* decpt, int* sign, char
}
dval(&eps) = (ieps * dval(&u)) + 7.;
word0(&eps) -= (P - 1) * Exp_msk1;
- if (ilim == 0) {
+ if (!ilim) {
S.clear();
mhi.clear();
dval(&u) -= 5.;
if (dval(&u) > dval(&eps))
- goto one_digit;
+ goto oneDigit;
if (dval(&u) < -dval(&eps))
- goto no_digits;
- goto fast_failed;
+ goto noDigits;
+ goto fastFailed;
}
#ifndef No_leftright
if (leftright) {
@@ -2090,7 +2107,7 @@ void dtoa(DtoaBuffer result, double dd, int ndigits, int* decpt, int* sign, char
if (dval(&u) < dval(&eps))
goto ret;
if (1. - dval(&u) < dval(&eps))
- goto bump_up;
+ goto bumpUp;
if (++i >= ilim)
break;
dval(&eps) *= 10.;
@@ -2107,8 +2124,8 @@ void dtoa(DtoaBuffer result, double dd, int ndigits, int* decpt, int* sign, char
*s++ = '0' + (int)L;
if (i == ilim) {
if (dval(&u) > 0.5 + dval(&eps))
- goto bump_up;
- else if (dval(&u) < 0.5 - dval(&eps)) {
+ goto bumpUp;
+ if (dval(&u) < 0.5 - dval(&eps)) {
while (*--s == '0') { }
s++;
goto ret;
@@ -2119,7 +2136,7 @@ void dtoa(DtoaBuffer result, double dd, int ndigits, int* decpt, int* sign, char
#ifndef No_leftright
}
#endif
-fast_failed:
+fastFailed:
s = s0;
dval(&u) = dval(&d2);
k = k0;
@@ -2135,8 +2152,8 @@ fast_failed:
S.clear();
mhi.clear();
if (ilim < 0 || dval(&u) <= 5 * ds)
- goto no_digits;
- goto one_digit;
+ goto noDigits;
+ goto oneDigit;
}
for (i = 1;; i++, dval(&u) *= 10.) {
L = (int32_t)(dval(&u) / ds);
@@ -2158,7 +2175,7 @@ fast_failed:
if (i == ilim) {
dval(&u) += dval(&u);
if (dval(&u) > ds || (dval(&u) == ds && (L & 1))) {
-bump_up:
+bumpUp:
while (*--s == '9')
if (s == s0) {
k++;
@@ -2252,7 +2269,7 @@ bump_up:
if (s2 > 0)
lshift(S, s2);
if (k_check) {
- if (cmp(b,S) < 0) {
+ if (cmp(b, S) < 0) {
k--;
multadd(b, 10, 0); /* we botched the k estimate */
if (leftright)
@@ -2276,16 +2293,16 @@ bump_up:
}
for (i = 1;;i++) {
- dig = quorem(b,S) + '0';
+ dig = quorem(b, S) + '0';
/* Do we yet have the shortest decimal string
* that will round to d?
*/
j = cmp(b, mlo);
diff(delta, S, mhi);
j1 = delta.sign ? 1 : cmp(b, delta);
- if (j1 == 0 && !(word1(&u) & 1)) {
+ if (!j1 && !(word1(&u) & 1)) {
if (dig == '9')
- goto round_9_up;
+ goto round9up;
if (j > 0)
dig++;
#ifdef SET_INEXACT
@@ -2295,26 +2312,26 @@ bump_up:
*s++ = dig;
goto ret;
}
- if (j < 0 || (j == 0 && !(word1(&u) & 1))) {
+ if (j < 0 || (!j && !(word1(&u) & 1))) {
if (!b.words()[0] && b.size() <= 1) {
#ifdef SET_INEXACT
inexact = 0;
#endif
- goto accept_dig;
+ goto acceptDig;
}
if (j1 > 0) {
lshift(b, 1);
j1 = cmp(b, S);
- if ((j1 > 0 || (j1 == 0 && (dig & 1))) && dig++ == '9')
- goto round_9_up;
+ if ((j1 > 0 || (!j1 && (dig & 1))) && dig++ == '9')
+ goto round9up;
}
-accept_dig:
+acceptDig:
*s++ = dig;
goto ret;
}
if (j1 > 0) {
if (dig == '9') { /* possible if i == 1 */
-round_9_up:
+round9up:
*s++ = '9';
goto roundoff;
}
@@ -2330,7 +2347,7 @@ round_9_up:
}
} else
for (i = 1;; i++) {
- *s++ = dig = quorem(b,S) + '0';
+ *s++ = dig = quorem(b, S) + '0';
if (!b.words()[0] && b.size() <= 1) {
#ifdef SET_INEXACT
inexact = 0;
@@ -2346,7 +2363,7 @@ round_9_up:
lshift(b, 1);
j = cmp(b, S);
- if (j > 0 || (j == 0 && (dig & 1))) {
+ if (j > 0 || (!j && (dig & 1))) {
roundoff:
while (*--s == '9')
if (s == s0) {
@@ -2360,10 +2377,10 @@ roundoff:
s++;
}
goto ret;
-no_digits:
+noDigits:
k = -1 - ndigits;
goto ret;
-one_digit:
+oneDigit:
*s++ = '1';
k++;
goto ret;
diff --git a/JavaScriptCore/wtf/dtoa.h b/JavaScriptCore/wtf/dtoa.h
index 6127f53..e0938ff 100644
--- a/JavaScriptCore/wtf/dtoa.h
+++ b/JavaScriptCore/wtf/dtoa.h
@@ -22,22 +22,24 @@
#define WTF_dtoa_h
namespace WTF {
- class Mutex;
+class Mutex;
}
namespace WTF {
- extern WTF::Mutex* s_dtoaP5Mutex;
+extern WTF::Mutex* s_dtoaP5Mutex;
- double strtod(const char* s00, char** se);
+// s00: input string. Must not be 0 and must be terminated by 0.
+// se: *se will have the last consumed character position + 1.
+double strtod(const char* s00, char** se);
- typedef char DtoaBuffer[80];
- void dtoa(DtoaBuffer result, double d, int ndigits, int* decpt, int* sign, char** rve);
+typedef char DtoaBuffer[80];
+void dtoa(DtoaBuffer result, double d, int ndigits, int* decpt, int* sign, char** rve);
- // dtoa() for ECMA-262 'ToString Applied to the Number Type.'
- // The *resultLength will have the length of the resultant string in bufer.
- // The resultant string isn't terminated by 0.
- void doubleToStringInJavaScriptFormat(double, DtoaBuffer, unsigned* resultLength);
+// dtoa() for ECMA-262 'ToString Applied to the Number Type.'
+// The *resultLength will have the length of the resultant string in bufer.
+// The resultant string isn't terminated by 0.
+void doubleToStringInJavaScriptFormat(double, DtoaBuffer, unsigned* resultLength);
} // namespace WTF
diff --git a/JavaScriptCore/wtf/text/StringImpl.cpp b/JavaScriptCore/wtf/text/StringImpl.cpp
index 3606597..698cab9 100644
--- a/JavaScriptCore/wtf/text/StringImpl.cpp
+++ b/JavaScriptCore/wtf/text/StringImpl.cpp
@@ -476,6 +476,29 @@ static inline bool equalIgnoringCase(const UChar* a, const UChar* b, int length)
return umemcasecmp(a, b, length) == 0;
}
+int codePointCompare(const StringImpl* s1, const StringImpl* s2)
+{
+ const unsigned l1 = s1 ? s1->length() : 0;
+ const unsigned l2 = s2 ? s2->length() : 0;
+ const unsigned lmin = l1 < l2 ? l1 : l2;
+ const UChar* c1 = s1 ? s1->characters() : 0;
+ const UChar* c2 = s2 ? s2->characters() : 0;
+ unsigned pos = 0;
+ while (pos < lmin && *c1 == *c2) {
+ c1++;
+ c2++;
+ pos++;
+ }
+
+ if (pos < lmin)
+ return (c1[0] > c2[0]) ? 1 : -1;
+
+ if (l1 == l2)
+ return 0;
+
+ return (l1 > l2) ? 1 : -1;
+}
+
int StringImpl::find(const char* chs, int index, bool caseSensitive)
{
if (!chs || index < 0)
diff --git a/JavaScriptCore/wtf/text/StringImpl.h b/JavaScriptCore/wtf/text/StringImpl.h
index f4b2970..244009f 100644
--- a/JavaScriptCore/wtf/text/StringImpl.h
+++ b/JavaScriptCore/wtf/text/StringImpl.h
@@ -352,6 +352,8 @@ inline bool equalIgnoringCase(const char* a, const UChar* b, unsigned length) {
bool equalIgnoringNullity(StringImpl*, StringImpl*);
+int codePointCompare(const StringImpl*, const StringImpl*);
+
static inline bool isSpaceOrNewline(UChar c)
{
// Use isASCIISpace() for basic Latin-1.
diff --git a/JavaScriptCore/wtf/text/WTFString.cpp b/JavaScriptCore/wtf/text/WTFString.cpp
index 842d755..d744b15 100644
--- a/JavaScriptCore/wtf/text/WTFString.cpp
+++ b/JavaScriptCore/wtf/text/WTFString.cpp
@@ -126,6 +126,11 @@ String operator+(const char* cs, const String& s)
return String(cs) + s;
}
+int codePointCompare(const String& a, const String& b)
+{
+ return codePointCompare(a.impl(), b.impl());
+}
+
void String::insert(const String& str, unsigned pos)
{
if (str.isEmpty()) {
diff --git a/JavaScriptCore/wtf/text/WTFString.h b/JavaScriptCore/wtf/text/WTFString.h
index d98621c..90d9a71 100644
--- a/JavaScriptCore/wtf/text/WTFString.h
+++ b/JavaScriptCore/wtf/text/WTFString.h
@@ -351,6 +351,8 @@ inline bool charactersAreAllASCII(const UChar* characters, size_t length)
return !(ored & 0xFF80);
}
+int codePointCompare(const String&, const String&);
+
inline int find(const UChar* characters, size_t length, UChar character, int startPosition)
{
if (startPosition >= static_cast<int>(length))
diff --git a/JavaScriptCore/yarr/RegexCompiler.cpp b/JavaScriptCore/yarr/RegexCompiler.cpp
index 9fbe213..bcfc188 100644
--- a/JavaScriptCore/yarr/RegexCompiler.cpp
+++ b/JavaScriptCore/yarr/RegexCompiler.cpp
@@ -372,7 +372,7 @@ public:
void atomBackReference(unsigned subpatternId)
{
ASSERT(subpatternId);
- m_pattern.m_shouldFallBack = true;
+ m_pattern.m_containsBackreferences = true;
m_pattern.m_maxBackReference = std::max(m_pattern.m_maxBackReference, subpatternId);
if (subpatternId > m_pattern.m_numSubpatterns) {
@@ -448,9 +448,6 @@ public:
return;
}
- if (max > 1 && term.type == PatternTerm::TypeParenthesesSubpattern)
- m_pattern.m_shouldFallBack = true;
-
if (min == 0)
term.quantify(max, greedy ? QuantifierGreedy : QuantifierNonGreedy);
else if (min == max)
diff --git a/JavaScriptCore/yarr/RegexJIT.cpp b/JavaScriptCore/yarr/RegexJIT.cpp
index e33dba0..768a53d 100644
--- a/JavaScriptCore/yarr/RegexJIT.cpp
+++ b/JavaScriptCore/yarr/RegexJIT.cpp
@@ -345,6 +345,15 @@ class RegexGenerator : private MacroAssembler {
ASSERT(alternativeValid());
return alternative()->m_terms[t];
}
+ bool isLastTerm()
+ {
+ ASSERT(alternativeValid());
+ return (t + 1) == alternative()->m_terms.size();
+ }
+ bool isMainDisjunction()
+ {
+ return !disjunction->m_parent;
+ }
PatternTerm& lookaheadTerm()
{
@@ -902,6 +911,11 @@ class RegexGenerator : private MacroAssembler {
PatternDisjunction* disjunction = term.parentheses.disjunction;
ASSERT(term.quantityCount == 1);
+ if (term.parentheses.isCopy) {
+ m_shouldFallBack = true;
+ return;
+ }
+
unsigned preCheckedCount = ((term.quantityCount == 1) && (term.quantityType == QuantifierFixedCount)) ? disjunction->m_minimumSize : 0;
unsigned parenthesesFrameLocation = term.frameLocation;
@@ -989,6 +1003,65 @@ class RegexGenerator : private MacroAssembler {
}
}
+ void generateParenthesesGreedyNoBacktrack(TermGenerationState& state)
+ {
+ PatternTerm& parenthesesTerm = state.term();
+ PatternDisjunction* disjunction = parenthesesTerm.parentheses.disjunction;
+ ASSERT(parenthesesTerm.type == PatternTerm::TypeParenthesesSubpattern);
+ ASSERT(parenthesesTerm.quantityCount != 1); // Handled by generateParenthesesSingle.
+
+ // Capturing not yet implemented!
+ if (parenthesesTerm.invertOrCapture) {
+ m_shouldFallBack = true;
+ return;
+ }
+
+ // Quantification limit not yet implemented!
+ if (parenthesesTerm.quantityCount != 0xffffffff) {
+ m_shouldFallBack = true;
+ return;
+ }
+
+ // Need to reset nested subpatterns between iterations...
+ // for the minute this crude check rejects all patterns with any subpatterns!
+ if (m_pattern.m_numSubpatterns) {
+ m_shouldFallBack = true;
+ return;
+ }
+
+ TermGenerationState parenthesesState(disjunction, state.checkedTotal);
+
+ Label matchAgain(this);
+ for (parenthesesState.resetAlternative(); parenthesesState.alternativeValid(); parenthesesState.nextAlternative()) {
+
+ PatternAlternative* alternative = parenthesesState.alternative();
+ optimizeAlternative(alternative);
+
+ int countToCheck = alternative->m_minimumSize;
+ if (countToCheck) {
+ parenthesesState.addBacktrackJump(jumpIfNoAvailableInput(countToCheck));
+ parenthesesState.checkedTotal += countToCheck;
+ }
+
+ for (parenthesesState.resetTerm(); parenthesesState.termValid(); parenthesesState.nextTerm())
+ generateTerm(parenthesesState);
+
+ // If we get here, we matched! Limit not yet supported, so just try to match more!
+ jump(matchAgain);
+
+ parenthesesState.linkAlternativeBacktracks(this);
+ // We get here if the alternative fails to match - fall through to the next iteration, or out of the loop.
+
+ if (countToCheck) {
+ sub32(Imm32(countToCheck), index);
+ parenthesesState.checkedTotal -= countToCheck;
+ }
+ }
+
+ // If the last alternative falls through to here, we have a failed match...
+ // Which means that we match whatever we have matched up to this point (even if nothing).
+ }
+
void generateParentheticalAssertion(TermGenerationState& state)
{
PatternTerm& term = state.term();
@@ -1100,15 +1173,24 @@ class RegexGenerator : private MacroAssembler {
break;
case PatternTerm::TypeBackReference:
- ASSERT_NOT_REACHED();
+ m_shouldFallBack = true;
break;
case PatternTerm::TypeForwardReference:
break;
case PatternTerm::TypeParenthesesSubpattern:
- ASSERT((term.quantityCount == 1) && !term.parentheses.isCopy); // must fallback to pcre before this point
- generateParenthesesSingle(state);
+ if (term.quantityCount == 1) {
+ generateParenthesesSingle(state);
+ break;
+ } else if (state.isLastTerm() && state.isMainDisjunction()) { // Is this is the last term of the main disjunction?
+ // If this has a greedy quantifier, then it will never need to backtrack!
+ if (term.quantityType == QuantifierGreedy) {
+ generateParenthesesGreedyNoBacktrack(state);
+ break;
+ }
+ }
+ m_shouldFallBack = true;
break;
case PatternTerm::TypeParentheticalAssertion:
@@ -1361,6 +1443,7 @@ class RegexGenerator : private MacroAssembler {
public:
RegexGenerator(RegexPattern& pattern)
: m_pattern(pattern)
+ , m_shouldFallBack(false)
{
}
@@ -1390,28 +1473,34 @@ public:
jitObject.set(patchBuffer.finalizeCode());
}
+ bool shouldFallBack()
+ {
+ return m_shouldFallBack;
+ }
+
private:
RegexPattern& m_pattern;
+ bool m_shouldFallBack;
Vector<AlternativeBacktrackRecord> m_backtrackRecords;
};
void jitCompileRegex(JSGlobalData* globalData, RegexCodeBlock& jitObject, const UString& patternString, unsigned& numSubpatterns, const char*& error, bool ignoreCase, bool multiline)
{
RegexPattern pattern(ignoreCase, multiline);
-
if ((error = compileRegex(patternString, pattern)))
return;
-
numSubpatterns = pattern.m_numSubpatterns;
- if (pattern.m_shouldFallBack) {
- JSRegExpIgnoreCaseOption ignoreCaseOption = ignoreCase ? JSRegExpIgnoreCase : JSRegExpDoNotIgnoreCase;
- JSRegExpMultilineOption multilineOption = multiline ? JSRegExpMultiline : JSRegExpSingleLine;
- jitObject.setFallback(jsRegExpCompile(reinterpret_cast<const UChar*>(patternString.data()), patternString.size(), ignoreCaseOption, multilineOption, &numSubpatterns, &error));
- } else {
+ if (!pattern.m_containsBackreferences) {
RegexGenerator generator(pattern);
generator.compile(globalData, jitObject);
+ if (!generator.shouldFallBack())
+ return;
}
+
+ JSRegExpIgnoreCaseOption ignoreCaseOption = ignoreCase ? JSRegExpIgnoreCase : JSRegExpDoNotIgnoreCase;
+ JSRegExpMultilineOption multilineOption = multiline ? JSRegExpMultiline : JSRegExpSingleLine;
+ jitObject.setFallback(jsRegExpCompile(reinterpret_cast<const UChar*>(patternString.data()), patternString.size(), ignoreCaseOption, multilineOption, &numSubpatterns, &error));
}
}}
diff --git a/JavaScriptCore/yarr/RegexPattern.h b/JavaScriptCore/yarr/RegexPattern.h
index 3271cc1..61d6ad6 100644
--- a/JavaScriptCore/yarr/RegexPattern.h
+++ b/JavaScriptCore/yarr/RegexPattern.h
@@ -271,7 +271,7 @@ struct RegexPattern {
, m_multiline(multiline)
, m_numSubpatterns(0)
, m_maxBackReference(0)
- , m_shouldFallBack(false)
+ , m_containsBackreferences(false)
, newlineCached(0)
, digitsCached(0)
, spacesCached(0)
@@ -293,7 +293,7 @@ struct RegexPattern {
m_numSubpatterns = 0;
m_maxBackReference = 0;
- m_shouldFallBack = false;
+ m_containsBackreferences = false;
newlineCached = 0;
digitsCached = 0;
@@ -361,7 +361,7 @@ struct RegexPattern {
bool m_multiline;
unsigned m_numSubpatterns;
unsigned m_maxBackReference;
- bool m_shouldFallBack;
+ bool m_containsBackreferences;
PatternDisjunction* m_body;
Vector<PatternDisjunction*, 4> m_disjunctions;
Vector<CharacterClass*> m_userCharacterClasses;