diff options
| author | Robin Burchell <robin.burchell@crimson.no> | 2017-02-02 18:37:21 +0100 |
|---|---|---|
| committer | Robin Burchell <robin.burchell@crimson.no> | 2017-02-03 15:10:33 +0000 |
| commit | 6653fdb6bfb538b601685966ad96e055bafbdbcf (patch) | |
| tree | f74cff62762f2c427a7d9d9324dfa8203be576f0 /src/qml/jsruntime/qv4functionobject.cpp | |
| parent | dd31156c6c6b120c88fff3be17ea1290a964e193 (diff) | |
FunctionObject: Mark name/length property configurable
In ES5, these were not configurable, but ES6 changed the behavior.
For length, refer to:
9.2.4 (FunctionInitialize)
17 (ECMAScript Standard Built-in Objects):
Unless otherwise specified, the length property of a built-in Function
object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
[[Configurable]]: true }.
19.2.2.1 Function.length
19.2.3.2 (Function.prototype.bind)
19.2.4.1 (Function instances, length)
For name, refer to:
9.2.11 (SetFunctionName)
This does regress test262 for ES5 for me a little, but improves our es6 test
coverage a bit (~682 more tests pass, +1.5%).
Change-Id: Icda7c9068dc3e6e4e4aebbb0d359868a30343013
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/qml/jsruntime/qv4functionobject.cpp')
| -rw-r--r-- | src/qml/jsruntime/qv4functionobject.cpp | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/qml/jsruntime/qv4functionobject.cpp b/src/qml/jsruntime/qv4functionobject.cpp index b2d89220ea..e9431ed25e 100644 --- a/src/qml/jsruntime/qv4functionobject.cpp +++ b/src/qml/jsruntime/qv4functionobject.cpp @@ -131,7 +131,7 @@ void FunctionObject::init(String *n, bool createProto) } if (n) - defineReadonlyProperty(s.engine->id_name(), *n); + defineReadonlyConfigurableProperty(s.engine->id_name(), *n); } ReturnedValue FunctionObject::name() const @@ -258,10 +258,10 @@ void FunctionPrototype::init(ExecutionEngine *engine, Object *ctor) Scope scope(engine); ScopedObject o(scope); - ctor->defineReadonlyProperty(engine->id_length(), Primitive::fromInt32(1)); + ctor->defineReadonlyConfigurableProperty(engine->id_length(), Primitive::fromInt32(1)); ctor->defineReadonlyProperty(engine->id_prototype(), (o = this)); - defineReadonlyProperty(engine->id_length(), Primitive::fromInt32(0)); + defineReadonlyConfigurableProperty(engine->id_length(), Primitive::fromInt32(0)); defineDefaultProperty(QStringLiteral("constructor"), (o = ctor)); defineDefaultProperty(engine->id_toString(), method_toString, 0); defineDefaultProperty(QStringLiteral("apply"), method_apply, 2); @@ -557,7 +557,7 @@ void Heap::BoundFunction::init(QV4::ExecutionContext *scope, QV4::FunctionObject len -= boundArgs->size(); if (len < 0) len = 0; - f->defineReadonlyProperty(s.engine->id_length(), Primitive::fromInt32(len)); + f->defineReadonlyConfigurableProperty(s.engine->id_length(), Primitive::fromInt32(len)); ScopedProperty pd(s); pd->value = s.engine->thrower(); |
