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 ==