summaryrefslogtreecommitdiffstats
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
* don't crash during GC if no prototype has been set for a metatypeKent Hansen2009-07-101-4/+7
| | | | | | Also, have pushContext() return currentContext() for now, to avoid crashing, and disable processing of __postInit__ property in importExtension() for same reason.
* implement ability to dynamically change class of script objectsKent Hansen2009-07-1012-381/+886
| | | | | | | | | | | | | | | | | | | | | | | | | | 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-101-4/+20
|
* 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-091-6/+12
| | | | | Setters don't work yet. But hey, the defaultprototypes example finally works.
* Fix autotest checking QScriptValue::objectId method.Jedrzej Nowacki2009-07-094-19/+29
| | | | (QScriptValue::objectId() and QScriptEnigne::objectById)
* make native object constructors workKent Hansen2009-07-091-10/+8
| | | | | With commit 6985212c8909c89183b232ca28b96a2c8a2f1385, context->thisObject() now returns the right thing.
* 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-092-1/+3
| | | | There's an off-by-one issue that we just work around for now.
* 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
|
* 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-089-147/+350
| | | | 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.
* Fix engineDelete autotest.Jedrzej Nowacki2009-07-084-4/+110
|
* work on QScriptEngine::uncaughtException()Kent Hansen2009-07-073-8/+22
| | | | | | 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-061-5/+200
|
* implement QScriptEngine::availableExtensions()Kent Hansen2009-07-062-3/+75
|
* fix QScriptValue::construct() when argument is not array-likeKent Hansen2009-07-062-4/+8
|
* make QScriptClass::HasInstance extension workKent Hansen2009-07-062-2/+2
|
* start implementing QScriptClass extensionsKent Hansen2009-07-032-1/+50
| | | | Callable seems to work, HasInstance not quite there yet.
* make more tests passKent Hansen2009-07-032-4/+2
|
* Attributes and deletion of String object propertiesKent Hansen2009-07-034-0/+29
| | | | As per ECMA-262.
* make more tests passKent Hansen2009-07-031-1/+13
| | | | Implement delete operator for Qt properties.
* implement a fair amount of the QScriptClass functionalityKent Hansen2009-07-024-15/+209
| | | | | 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-021-1/+9
|
* first stab at implementing Qt property getter/settersKent Hansen2009-07-024-24/+230
| | | | Not fully working yet, so disabled for now
* implement caching of slot wrapper functionsKent Hansen2009-07-022-1/+42
|
* implement marking of QObject connectionKent Hansen2009-07-021-8/+9
|
* implement QScriptValue::QObjectMember property flagKent Hansen2009-07-023-4/+12
|
* use the JSC::Getter and JSC::Setter flagsKent Hansen2009-07-021-4/+2
|
* create a new QScriptContext when calling a Qt methodKent Hansen2009-07-021-2/+14
| | | | Makes the args, thisObject etc. available if QScriptable is used.
* implement QObject property flagsKent Hansen2009-07-021-0/+74
|
* add placeholder implementations of findChild() and findChildren()Kent Hansen2009-07-011-1/+25
|
* don't crash if isFunction() is called with invalid JS valueKent Hansen2009-06-301-1/+1
|
* implement setting of default prototype in newQObject()Kent Hansen2009-06-302-14/+51
|
* implement name-based connection, make more tests workKent Hansen2009-06-301-7/+13
|
* port recent changes from qt/masterKent Hansen2009-06-302-7/+20
| | | | Makes variant conversion work for signal handlers.
* make part of test not assertKent Hansen2009-06-291-0/+2
|
* dummy QScriptContextInfo implementationKent Hansen2009-06-291-25/+81
| | | | | It doesn't give useful information but at least apps that try to use it (e.g. the qscriptjstestsuite autotest) won't assert now.
* disable the JIT for nowKent Hansen2009-06-291-0/+2
| | | | Eases debugging.