2011-03-01 Andras Becsi <abecsi@webkit.org> Reviewed by Csaba Osztrogonác. [Qt] Clean up the project files and move common options to WebKit.pri. * api/QtScript.pro: Deduplicate options. 2011-02-24 Andras Becsi <abecsi@webkit.org> Reviewed by Laszlo Gombos. [Qt] MinGW build fails to link https://bugs.webkit.org/show_bug.cgi?id=55050 Prepend the libraries of subcomponents instead of appending them to fix the library order according to the dependency of the libraries * api/QtScript.pro: 2010-09-29 Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org> Reviewed by Andreas Kling. [Qt] QScriptEngine should have an API for creating Date objects https://bugs.webkit.org/show_bug.cgi?id=41667 Implement newDate(), isDate() and toDateTime() functions. Use the QDateTime::{to,set}MSecsSinceEpoch() functions to do the calculations. * api/qscriptengine.cpp: (QScriptEngine::newDate): * api/qscriptengine.h: * api/qscriptengine_p.cpp: (QScriptEnginePrivate::newDate): * api/qscriptengine_p.h: (QScriptEnginePrivate::isDate): * api/qscriptoriginalglobalobject_p.h: (QScriptOriginalGlobalObject::QScriptOriginalGlobalObject): need to keep track of Date Constructor and Prototype. (QScriptOriginalGlobalObject::~QScriptOriginalGlobalObject): ditto. (QScriptOriginalGlobalObject::isDate): use the Date Constructor and Prototype to identify Date values. * api/qscriptvalue.cpp: (QScriptValue::isDate): (QScriptValue::toDateTime): * api/qscriptvalue.h: * api/qscriptvalue_p.h: (QScriptValuePrivate::isDate): (QScriptValuePrivate::toDateTime): * tests/qscriptengine/tst_qscriptengine.cpp: (tst_QScriptEngine::newDate): 2010-07-27 Jedrzej Nowacki <jedrzej.nowacki@nokia.com> Reviewed by Kenneth Rohde Christiansen. Update the QScriptValue autotests suite. QScriptValue generated files were updated, changes are: - More tested values (for example QSE::newObject() and QSE::newArray()) - Tested values are recreated before each test and are not reused. The change implies better code coverage and some expected result changes. - A new test to check copy and assign functions. - Tests are using standard QTestLib interface, without any custom macros. [Qt] Improve test coverage for the QScriptValue https://bugs.webkit.org/show_bug.cgi?id=42366 * tests/qscriptvalue/tst_qscriptvalue.cpp: (tst_QScriptValue::tst_QScriptValue): (tst_QScriptValue::~tst_QScriptValue): (tst_QScriptValue::assignAndCopyConstruct_data): (tst_QScriptValue::assignAndCopyConstruct): * tests/qscriptvalue/tst_qscriptvalue.h: * tests/qscriptvalue/tst_qscriptvalue_generated_comparison.cpp: (tst_QScriptValue::equals_data): (tst_QScriptValue::equals): (tst_QScriptValue::strictlyEquals_data): (tst_QScriptValue::strictlyEquals): (tst_QScriptValue::instanceOf_data): (tst_QScriptValue::instanceOf): * tests/qscriptvalue/tst_qscriptvalue_generated_init.cpp: (tst_QScriptValue::initScriptValues): * tests/qscriptvalue/tst_qscriptvalue_generated_istype.cpp: (tst_QScriptValue::isValid_data): (tst_QScriptValue::isValid): (tst_QScriptValue::isBool_data): (tst_QScriptValue::isBool): (tst_QScriptValue::isBoolean_data): (tst_QScriptValue::isBoolean): (tst_QScriptValue::isNumber_data): (tst_QScriptValue::isNumber): (tst_QScriptValue::isFunction_data): (tst_QScriptValue::isFunction): (tst_QScriptValue::isNull_data): (tst_QScriptValue::isNull): (tst_QScriptValue::isString_data): (tst_QScriptValue::isString): (tst_QScriptValue::isUndefined_data): (tst_QScriptValue::isUndefined): (tst_QScriptValue::isObject_data): (tst_QScriptValue::isObject): (tst_QScriptValue::isArray_data): (tst_QScriptValue::isArray): (tst_QScriptValue::isError_data): (tst_QScriptValue::isError): * tests/qscriptvalue/tst_qscriptvalue_generated_totype.cpp: (tst_QScriptValue::toString_data): (tst_QScriptValue::toString): (tst_QScriptValue::toNumber_data): (tst_QScriptValue::toNumber): (tst_QScriptValue::toBool_data): (tst_QScriptValue::toBool): (tst_QScriptValue::toBoolean_data): (tst_QScriptValue::toBoolean): (tst_QScriptValue::toInteger_data): (tst_QScriptValue::toInteger): (tst_QScriptValue::toInt32_data): (tst_QScriptValue::toInt32): (tst_QScriptValue::toUInt32_data): (tst_QScriptValue::toUInt32): (tst_QScriptValue::toUInt16_data): (tst_QScriptValue::toUInt16): 2010-07-27 Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org> Reviewed by Kenneth Rohde Christiansen. [Qt] Implement QScriptEngine::newFunction() parts that doesn't depend on QScriptContext https://bugs.webkit.org/show_bug.cgi?id=42174 Since our function can be called in Javascript both as a function and as a constructor, we couldn't use the existing JSObjectMakeFunctionWithCallback() and JSObjectMakeConstructor(). Instead, a JSClassRef was created, implementing the needed callbacks (the callAsConstructor is not there yet because its behaviour depends on QScriptContext). For the moment, QScriptContext is defined as a void type, since we still don't use it. The variant of newFunction() that also takes an external argument was also implemented. The details of implementation were added to the qscriptfunction{.c,_p.h} files. This commit also adds tests, some of them from Qt's upstream. * api/QtScript.pro: * api/qscriptengine.cpp: (QScriptEngine::newFunction): * api/qscriptengine.h: * api/qscriptengine_p.cpp: (QScriptEnginePrivate::QScriptEnginePrivate): (QScriptEnginePrivate::~QScriptEnginePrivate): (QScriptEnginePrivate::newFunction): * api/qscriptengine_p.h: * api/qscriptfunction.cpp: Added. (qt_NativeFunction_finalize): (qt_NativeFunction_callAsFunction): (qt_NativeFunctionWithArg_finalize): (qt_NativeFunctionWithArg_callAsFunction): * api/qscriptfunction_p.h: Added. (QNativeFunctionData::QNativeFunctionData): (QNativeFunctionWithArgData::QNativeFunctionWithArgData): * api/qscriptoriginalglobalobject_p.h: (QScriptOriginalGlobalObject::QScriptOriginalGlobalObject): (QScriptOriginalGlobalObject::~QScriptOriginalGlobalObject): (QScriptOriginalGlobalObject::functionPrototype): * tests/qscriptengine/tst_qscriptengine.cpp: (myFunction): (myFunctionWithArg): (myFunctionThatReturns): (myFunctionThatReturnsWithoutEngine): (myFunctionThatReturnsWrongEngine): (tst_QScriptEngine::newFunction): 2010-07-23 Jedrzej Nowacki <jedrzej.nowacki@nokia.com> Reviewed by Kenneth Rohde Christiansen. QScriptValue::equals benchmark crash fix. Patch changes QScriptValue::equals implementation to cover more edge cases. Problem exposes an issue in our autotests (all values got bound to an engine too fast - bug 42366). [Qt] QScriptValue::equals asserts https://bugs.webkit.org/show_bug.cgi?id=42363 * api/qscriptvalue_p.h: (QScriptValuePrivate::equals): 2010-07-14 Jedrzej Nowacki <jedrzej.nowacki@nokia.com> Reviewed by Kenneth Rohde Christiansen. Introduce QScriptOriginalGlobalObject. QtScript exposes more functionality than JSC C API. Sometimes it is necessary to take a shortcut in implementation. Really often we have to use a standard JS function. These function could be changed or even deleted by a script, so a backup of a reference to an object is needed. In them same time this is rather a workaround then real fix, so the code should be separated and changed easily in future. It is why we need the new internal class. The patch fixes a few crashes. [Qt] QScriptEngine should work correctly even after global object changes https://bugs.webkit.org/show_bug.cgi?id=41839 * api/QtScript.pro: * api/qscriptengine_p.cpp: (QScriptEnginePrivate::QScriptEnginePrivate): (QScriptEnginePrivate::~QScriptEnginePrivate): * api/qscriptengine_p.h: (QScriptEnginePrivate::isArray): (QScriptEnginePrivate::isError): (QScriptEnginePrivate::objectHasOwnProperty): (QScriptEnginePrivate::objectGetOwnPropertyNames): * api/qscriptoriginalglobalobject_p.h: Added. (QScriptOriginalGlobalObject::QScriptOriginalGlobalObject): (QScriptOriginalGlobalObject::initializeMember): (QScriptOriginalGlobalObject::~QScriptOriginalGlobalObject): (QScriptOriginalGlobalObject::objectHasOwnProperty): (QScriptOriginalGlobalObject::objectGetOwnPropertyNames): (QScriptOriginalGlobalObject::isArray): (QScriptOriginalGlobalObject::isError): (QScriptOriginalGlobalObject::isType): * api/qscriptvalue_p.h: (QScriptValuePrivate::isError): (QScriptValuePrivate::hasOwnProperty): * api/qscriptvalueiterator_p.h: (QScriptValueIteratorPrivate::QScriptValueIteratorPrivate): * tests/qscriptvalue/tst_qscriptvalue.cpp: (tst_QScriptValue::globalObjectChanges): * tests/qscriptvalue/tst_qscriptvalue.h: 2010-07-13 Jedrzej Nowacki <jedrzej.nowacki@nokia.com> Reviewed by Simon Hausmann. Introduce QScriptValueIterator. The QScriptValueIterator class permits to iterate over a QScriptValue's properties. [Qt] QtScript should provide an API for enumerating a JS object's properties https://bugs.webkit.org/show_bug.cgi?id=41680 * api/QtScript.pro: * api/qscriptvalueiterator.cpp: Added. (QScriptValueIterator::QScriptValueIterator): (QScriptValueIterator::~QScriptValueIterator): (QScriptValueIterator::hasNext): (QScriptValueIterator::next): (QScriptValueIterator::hasPrevious): (QScriptValueIterator::previous): (QScriptValueIterator::toFront): (QScriptValueIterator::toBack): (QScriptValueIterator::name): (QScriptValueIterator::scriptName): (QScriptValueIterator::value): (QScriptValueIterator::setValue): (QScriptValueIterator::remove): (QScriptValueIterator::flags): (QScriptValueIterator::operator=): * api/qscriptvalueiterator.h: Added. * api/qscriptvalueiterator_p.h: Added. (QScriptValueIteratorPrivate::QScriptValueIteratorPrivate): (QScriptValueIteratorPrivate::~QScriptValueIteratorPrivate): (QScriptValueIteratorPrivate::hasNext): (QScriptValueIteratorPrivate::next): (QScriptValueIteratorPrivate::hasPrevious): (QScriptValueIteratorPrivate::previous): (QScriptValueIteratorPrivate::name): (QScriptValueIteratorPrivate::scriptName): (QScriptValueIteratorPrivate::value): (QScriptValueIteratorPrivate::setValue): (QScriptValueIteratorPrivate::remove): (QScriptValueIteratorPrivate::toFront): (QScriptValueIteratorPrivate::toBack): (QScriptValueIteratorPrivate::flags): (QScriptValueIteratorPrivate::isValid): (QScriptValueIteratorPrivate::engine): * tests/qscriptvalueiterator/qscriptvalueiterator.pro: Added. * tests/qscriptvalueiterator/tst_qscriptvalueiterator.cpp: Added. (tst_QScriptValueIterator::tst_QScriptValueIterator): (tst_QScriptValueIterator::~tst_QScriptValueIterator): (tst_QScriptValueIterator::iterateForward_data): (tst_QScriptValueIterator::iterateForward): (tst_QScriptValueIterator::iterateBackward_data): (tst_QScriptValueIterator::iterateBackward): (tst_QScriptValueIterator::iterateArray_data): (tst_QScriptValueIterator::iterateArray): (tst_QScriptValueIterator::iterateBackAndForth): (tst_QScriptValueIterator::setValue): (tst_QScriptValueIterator::remove): (tst_QScriptValueIterator::removeMixed): (tst_QScriptValueIterator::removeUndeletable): (tst_QScriptValueIterator::iterateString): (tst_QScriptValueIterator::assignObjectToIterator): * tests/tests.pro: 2010-07-09 Jedrzej Nowacki <jedrzej.nowacki@nokia.com> Reviewed by Simon Hausmann. Implementation of the QScriptValue::propertyFlags function. The function returns the flags of a property with the given name, using a given mode to resolve the property. This is a simple implementation that is sufficient to test the QScriptValueIterator. [Qt] QScriptValue API should have a property flag accessor. https://bugs.webkit.org/show_bug.cgi?id=41769 * api/qscriptvalue.cpp: (QScriptValue::propertyFlags): * api/qscriptvalue.h: * api/qscriptvalue_p.h: (QScriptValuePrivate::propertyFlags): * tests/qscriptvalue/tst_qscriptvalue.cpp: (tst_QScriptValue::propertyFlag_data): (tst_QScriptValue::propertyFlag): * tests/qscriptvalue/tst_qscriptvalue.h: 2010-07-07 Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org> Reviewed by Kenneth Rohde Christiansen. Implementation of QScriptValue::isArray() https://bugs.webkit.org/show_bug.cgi?id=41713 Since we don't have access to the [[Class]] internal property of builtins (including Array), the solution was to keep the original 'Array' (constructor) and 'Array.prototype' objects and use them to identify if a given object is an Array. Also uncomment some tests and add some tests of newArray() that depended on isArray(). * api/qscriptengine_p.cpp: (QScriptEnginePrivate::QScriptEnginePrivate): (QScriptEnginePrivate::~QScriptEnginePrivate): * api/qscriptengine_p.h: (QScriptEnginePrivate::isArray): * api/qscriptvalue.cpp: (QScriptValue::isArray): * api/qscriptvalue.h: * api/qscriptvalue_p.h: (QScriptValuePrivate::isArray): * tests/qscriptengine/tst_qscriptengine.cpp: (tst_QScriptEngine::newArray): 2010-07-06 Jedrzej Nowacki <jedrzej.nowacki@nokia.com> Reviewed by Kenneth Rohde Christiansen. Implementation of QScriptValue properties accessors. The patch contains implementation of the QScriptValue::property() and the QScriptValue::setProperty(). It is not full functionality, as these method are too complex for one patch, but it is enough to cover about 95% of use cases. Missing functionality: - Few of the PropertyFlags are ignored. - Only a public part of the ResolveFlags can be used (ResolveLocal, ResolvePrototype). A lot of new test cases were added. [Qt] QScriptValue should have API for accessing object properties https://bugs.webkit.org/show_bug.cgi?id=40903 * api/qscriptconverter_p.h: (QScriptConverter::toPropertyFlags): * api/qscriptstring_p.h: (QScriptStringPrivate::operator JSStringRef): * api/qscriptvalue.cpp: (QScriptValue::property): (QScriptValue::setProperty): * api/qscriptvalue.h: (QScriptValue::): * api/qscriptvalue_p.h: (QScriptValuePrivate::assignEngine): (QScriptValuePrivate::property): (QScriptValuePrivate::hasOwnProperty): (QScriptValuePrivate::setProperty): (QScriptValuePrivate::deleteProperty): * tests/qscriptvalue/tst_qscriptvalue.cpp: (tst_QScriptValue::getPropertySimple_data): (tst_QScriptValue::getPropertySimple): (tst_QScriptValue::setPropertySimple): (tst_QScriptValue::getPropertyResolveFlag): (tst_QScriptValue::getSetProperty): (tst_QScriptValue::setProperty_data): (tst_QScriptValue::setProperty): * tests/qscriptvalue/tst_qscriptvalue.h: 2010-07-02 Jedrzej Nowacki <jedrzej.nowacki@nokia.com> Reviewed by Simon Hausmann. Compilation fix. QScriptEnginePrivate::newArray can't be const because it can throw an exception. [Qt] QScriptEnginePrivate compilation fix https://bugs.webkit.org/show_bug.cgi?id=41520 * api/qscriptengine_p.cpp: (QScriptEnginePrivate::newArray): * api/qscriptengine_p.h: 2010-06-28 Jedrzej Nowacki <jedrzej.nowacki@nokia.com> Reviewed by Simon Hausmann. Implement exception reporting in the QtScript API. The exception should be accessible through the API by the uncaughtException function. Functions; hasUncaughtException, clearExceptions, uncaughtExceptionLineNumber, uncaughtExceptionBacktrace were added to facilitate error checking and debugging. [Qt] QtScript API should be exceptions aware. https://bugs.webkit.org/show_bug.cgi?id=41199 * api/qscriptengine.cpp: (QScriptEngine::hasUncaughtException): (QScriptEngine::uncaughtException): (QScriptEngine::clearExceptions): (QScriptEngine::uncaughtExceptionLineNumber): (QScriptEngine::uncaughtExceptionBacktrace): * api/qscriptengine.h: * api/qscriptengine_p.cpp: (QScriptEnginePrivate::QScriptEnginePrivate): (QScriptEnginePrivate::~QScriptEnginePrivate): (QScriptEnginePrivate::uncaughtException): * api/qscriptengine_p.h: (QScriptEnginePrivate::): (QScriptEnginePrivate::evaluate): (QScriptEnginePrivate::hasUncaughtException): (QScriptEnginePrivate::clearExceptions): (QScriptEnginePrivate::setException): (QScriptEnginePrivate::uncaughtExceptionLineNumber): (QScriptEnginePrivate::uncaughtExceptionBacktrace): * api/qscriptvalue_p.h: (QScriptValuePrivate::toString): (QScriptValuePrivate::toNumber): (QScriptValuePrivate::toObject): (QScriptValuePrivate::equals): (QScriptValuePrivate::instanceOf): (QScriptValuePrivate::call): (QScriptValuePrivate::inherits): * tests/qscriptengine/tst_qscriptengine.cpp: (tst_QScriptEngine::uncaughtException):