[pypy-commit] lang-js default: Fixed a but in optimized array member access.

stepahn noreply at buildbot.pypy.org
Wed May 15 10:20:19 CEST 2013


Author: Stephan <stephan at stzal.com>
Branch: 
Changeset: r380:96c04922c1ef
Date: 2013-05-15 10:19 +0200
http://bitbucket.org/pypy/lang-js/changeset/96c04922c1ef/

Log:	Fixed a but in optimized array member access.

	Thanks to Andrews Medina https://bitbucket.org/andrewsmedina for
	finding and supplying tests for it.

diff --git a/js/jsobj.py b/js/jsobj.py
--- a/js/jsobj.py
+++ b/js/jsobj.py
@@ -1484,6 +1484,9 @@
                 return Descr(inherited.writable, None, inherited, prop)
 
     def _define_own_idx_property(self, idx, desc, throw=False, current_desc=None, prop=None):
+        if current_desc is None:
+            current_desc = self._get_idx_property(idx)
+
         from js.object_space import _w
         old_len_desc = self.get_own_property(u'length')
         assert old_len_desc is not None
@@ -1595,6 +1598,7 @@
                 if desc.has_set_getter() and desc.getter != current.getter:
                     return _ireject(throw, idx)
         # 12
+        prop = self._get_iprop(idx)
         prop.update_with_descriptor(desc)
 
         # 13
@@ -1612,12 +1616,13 @@
     # 15.4.5.1
     def define_own_property(self, p, desc, throw=False):
         from js.object_space import _w
-        old_len_desc = self.get_own_property(u'length')
-        assert old_len_desc is not None
-        old_len = old_len_desc.value.ToUInt32()
 
         # 3
         if p == u'length':
+            old_len_desc = self.get_own_property(u'length')
+            assert old_len_desc is not None
+            old_len = old_len_desc.value.ToUInt32()
+
             if desc.has_set_value() is False:
                 return W_BasicObject.define_own_property(self, u'length', desc, throw)
             new_len_desc = desc.copy()


More information about the pypy-commit mailing list