Review Request: KJS: Implement Object.GetOwnPropertyDescriptor & Object.DefineProperty
Bernd Buschinski
b.buschinski at googlemail.com
Thu May 31 21:46:17 BST 2012
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://git.reviewboard.kde.org/r/104515/
-----------------------------------------------------------
(Updated May 31, 2012, 8:46 p.m.)
Review request for kdelibs.
Changes
-------
Updated "arguments" handling,
as we use putDirect in all places we also need it for the arguments,
same for getDirect.
Also fixed a bug in deleting arguments indexes.
Description
-------
KJS: Implement Object.GetOwnPropertyDescriptor & Object.DefineProperty
This is a pretty big patch, to get Object.defineProperty perfect for ecmascript (for all tests that only use implemented stuff, all test that use Object.create for example will fail, as its not implemented)
PropertyDescriptor:
Necessary for collectiong data, this introduce new CommonIdentifiers.h, this might requiere to rebuild khtml against new kjs, otherwise it might cause weird crashes (at least for me)
object.h:
Beside from adding new getPropertyDescriptor & getOwnPropertyDescriptor & defineOwnProperty, the important changes are making
getPropertyAttributes, put/get/remove-Direct virtual.
Why do I need that?
Because put checks if the prototype already has property XYZ and uses it. Now imagine an array that got a setter-only property via a prototype. DefineProperty would try to use put, which uses the prototype property and it would fail. So all custom-data classes like Array need to implement/use put/get/remove-Direct.
object.cpp:
currently put on a setter-only property would always throw an exception, this is only correct for strict-mode, as we currently do not check for strict-mode it would make more sense to change it to default not throwing an exception.
array.cpp/h:
The old Array implementation did not store attributes for array indexes, I rewrote it to also store the attributes.
+ Bonus: also fix getOwnPropertyNames, as we now store attributes.
+ use new attributes, reject put/delete/enum if set
function.cpp (Arguments)
changed the default attributes how parameter are stored, according to ECMA 10.6.11.b
Rest is "just" the defineProperty implementation
Diffs (updated)
-----
kjs/CMakeLists.txt 1188064
kjs/CommonIdentifiers.h 8ee40e8
kjs/array_instance.h 3f2b630
kjs/array_instance.cpp fe9b8b4
kjs/function.h 3757fe8
kjs/function.cpp 5f39ae6
kjs/object.h 047c242
kjs/object.cpp c19122f
kjs/object_object.cpp 986f03f
kjs/operations.h f8a28c8
kjs/operations.cpp d4c0066
kjs/propertydescriptor.h PRE-CREATION
kjs/propertydescriptor.cpp PRE-CREATION
Diff: http://git.reviewboard.kde.org/r/104515/diff/
Testing
-------
ecmascript & daily surfing
used valgrind on many array testcases to check for possible memleaks
Thanks,
Bernd Buschinski
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kde-core-devel/attachments/20120531/18bd5c3d/attachment.htm>
More information about the kde-core-devel
mailing list