summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* implement ability to dynamically change class of script objectsKent Hansen2009-07-1015-382/+889
| | | | | | | | | | | | | | | | | | | | | | | | | | With an object created by QScriptEngine::newObject(), it should be possible to call QScriptValue::setClass() to dynamically change the behavior of that object. Similarly, it should be possible to promote plain script objects to QObject (QVariant) wrappers by calling the overload of QScriptEngine::newQObject() (newVariant()) that takes a script object as the first argument. This commit implements this capability. The premise is the (internal) QScriptObject class, which inherits JSC::JSObject. It reimplements all the methods for getting/setting properties etc. Then there's a level of indirection to facilitate dynamic change of the class: Each QScriptObject can have a delegate associated with it that will handle operations on the object. By default there is no delegate, so the object behaves as a normal JS object, as you expect. However, once a delegate is set (e.g., when QScriptValue::setScriptClass() is called), QScriptObject will give the delegate the chance to handle the object operation. In addition to a delegate implementation for QScriptClass-based objects, there are also delegates for QObject and QVariant wrappers. These replace the QObjectWrapperObject and QVariantWrapperObject classes.
* some small fixes/experimentsKent Hansen2009-07-102-5/+22
|
* give reason for test failureKent Hansen2009-07-091-0/+1
|
* QObject.prototype.toString: return undefined if this-object is not a QObjectKent Hansen2009-07-091-1/+1
| | | | Follow behavior of old back-end. Makes qscriptable test pass.
* register QScriptValue as meta-typeKent Hansen2009-07-091-0/+2
| | | | The old engine did it as well. Makes more tests pass.
* invoke signal handler using JSC::call()Kent Hansen2009-07-091-8/+6
| | | | | Makes sure that new stack frame is set up if the function is native, and all that.
* make QObject property setter functions workKent Hansen2009-07-091-12/+31
|
* use JSC::call() and JSC::construct()Kent Hansen2009-07-091-54/+2
|
* create a new frame when calling native constructorsKent Hansen2009-07-092-5/+33
| | | | See commit 103439f4c8a70740d6475af1b1b58deede12d2c3
* make QObject property access use getter+setter functionsKent Hansen2009-07-092-8/+12
| | | | | Setters don't work yet. But hey, the defaultprototypes example finally works.
* Fix autotest checking QScriptValue::objectId method.Jedrzej Nowacki2009-07-095-21/+29
| | | | (QScriptValue::objectId() and QScriptEnigne::objectById)
* get rid of some expected failuresKent Hansen2009-07-091-36/+12
| | | | | | | | | | The JSC parser doesn't understand function expressions as statements; you have to surround the expression by parentheses. That's in accordance with the ECMA spec, but most implementations (including the old qtscript backend) don't require the parentheses. However, since it's easier to change the tests than the JSC parser, let's do that for now to get rid of some noise in the test output.
* make native object constructors workKent Hansen2009-07-092-12/+48
| | | | | With commit 6985212c8909c89183b232ca28b96a2c8a2f1385, context->thisObject() now returns the right thing.
* mark a few expected failuresKent Hansen2009-07-091-0/+3
|
* create a default-constructed object when calling native constructorsKent Hansen2009-07-091-0/+11
| | | | | | | | | | | | It's up to the implementation of the constructor to decide whether it wants to initialize the default-constructed object, or create and return a new one; just like for JS constructors. We need this functionality in QtScript so that QScriptContext::thisObject() will return the right thing. The built-in constructors (RegExp etc.) should be modified to initialize the default-constructed object instead of always creating a new object (only when RegExp is called as a function should it create a new object).
* make arguments object work for native functionsKent Hansen2009-07-093-1/+29
| | | | There's an off-by-one issue that we just work around for now.
* remove two expected failuresKent Hansen2009-07-091-2/+0
| | | | They now work.
* implement attributes for arguments.{callee,length}Kent Hansen2009-07-092-0/+11
| | | | Should be DontEnum, as per ECMA-262.
* create a new frame when executing native getter/setter functionsKent Hansen2009-07-092-4/+38
| | | | | | Frames are created when calling JS functions, so they should be when calling native functions as well. This makes QScriptContext behave correctly in these cases (see getSetProperty autotest).
* use currentFrame instead of globalExec whenever we canKent Hansen2009-07-093-48/+48
|
* more tests for QScriptValue::call() overload that takes an arrayKent Hansen2009-07-091-0/+22
|
* support callees that are not function objectsKent Hansen2009-07-092-5/+5
| | | | E.g. QScriptClass-based objects.
* store frame's callee as a normal JSObjectKent Hansen2009-07-094-22/+21
| | | | | It's possible for any JSObject to be a callee; all it needs to do is implement getCallData().
* rewrite most of QScriptContext handlingKent Hansen2009-07-0811-148/+360
| | | | Do it The right way(TM), by lazily wrapping JSC::ExecState objects.
* try to get arguments object to work for host call framesKent Hansen2009-07-081-11/+20
|
* make JSC::CallFrame::callee() an InternalFunctionKent Hansen2009-07-084-16/+16
| | | | | This makes it possible to obtain the callee for native (host) functions as well.
* Autotest engineDetected check status of unbindJedrzej Nowacki2009-07-081-0/+4
| | | | QScriptValues added.
* Fix engineDelete autotest.Jedrzej Nowacki2009-07-085-5/+111
|
* work on QScriptEngine::uncaughtException()Kent Hansen2009-07-076-9/+33
| | | | | | It's possible that JSC evaluate() returns a completion of type Throw without hadException() being true, so we need to store the exception value explicitly.
* mark the QScriptClass object prototypeKent Hansen2009-07-071-0/+2
|
* start to implement QScriptEngine::importExtension()Kent Hansen2009-07-062-6/+200
|
* implement QScriptEngine::availableExtensions()Kent Hansen2009-07-062-3/+75
|
* fix QScriptValue::construct() when argument is not array-likeKent Hansen2009-07-063-4/+16
|
* make QScriptClass::HasInstance extension workKent Hansen2009-07-063-7/+55
|
* start implementing QScriptClass extensionsKent Hansen2009-07-033-1/+51
| | | | Callable seems to work, HasInstance not quite there yet.
* make more tests passKent Hansen2009-07-033-9/+14
|
* kill a few QEXPECT_FAILsKent Hansen2009-07-031-3/+0
| | | | It's been fixed (commit c23be3111ec279b4e19ca9c37a0d9eddb756f402)
* Attributes and deletion of String object propertiesKent Hansen2009-07-034-0/+29
| | | | As per ECMA-262.
* make more tests passKent Hansen2009-07-032-10/+22
| | | | Implement delete operator for Qt properties.
* add some expected failures so the test completesKent Hansen2009-07-031-2/+13
|
* implement a fair amount of the QScriptClass functionalityKent Hansen2009-07-025-15/+212
| | | | | Enumeration is missing, as is the ability to change the class of an object after it has been created.
* implement string-->enum conversionKent Hansen2009-07-022-3/+9
|
* first stab at implementing Qt property getter/settersKent Hansen2009-07-024-24/+230
| | | | Not fully working yet, so disabled for now
* skip some of the V8 tests so autotest doesn't hangKent Hansen2009-07-021-0/+4
| | | | | With the JSC backend, these tests hang (in debug and non-JIT mode, at least).
* remove a bunch of expected failuresKent Hansen2009-07-021-94/+0
| | | | With JSC backend these tests work (better compatibility, yay).
* implement caching of slot wrapper functionsKent Hansen2009-07-023-4/+42
|
* make the qtscript calculator and tetrix examples runKent Hansen2009-07-022-4/+4
| | | | Disable the debugger for now, since it's not implemented.
* implement marking of QObject connectionKent Hansen2009-07-021-8/+9
|
* implement QScriptValue::QObjectMember property flagKent Hansen2009-07-024-8/+12
|
* use the JSC::Getter and JSC::Setter flagsKent Hansen2009-07-021-4/+2
|