From 7dd2d6c590edcad0a492eb9b4ff107900218518f Mon Sep 17 00:00:00 2001 From: "yangguo@chromium.org" Date: Fri, 25 Oct 2013 11:55:56 +0000 Subject: [PATCH] Reland "Make Array.prototype.pop throw if the last element is not configurable." This relands r17346. R=machenbach@chromium.org BUG=311164 Review URL: https://codereview.chromium.org/43923002 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@17394 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/array.js | 2 +- .../regress/regress-array-pop-nonconfigurable.js | 31 ++++++++++++++++++++++ tools/presubmit.py | 6 ++--- 3 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 test/mjsunit/regress/regress-array-pop-nonconfigurable.js diff --git a/src/array.js b/src/array.js index 2649798..e98d7f5 100644 --- a/src/array.js +++ b/src/array.js @@ -430,7 +430,7 @@ function ArrayPop() { n--; var value = this[n]; - delete this[n]; + Delete(this, ToName(n), true); this.length = n; return value; } diff --git a/test/mjsunit/regress/regress-array-pop-nonconfigurable.js b/test/mjsunit/regress/regress-array-pop-nonconfigurable.js new file mode 100644 index 0000000..129e198 --- /dev/null +++ b/test/mjsunit/regress/regress-array-pop-nonconfigurable.js @@ -0,0 +1,31 @@ +// Copyright 2013 the V8 project authors. All rights reserved. +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following +// disclaimer in the documentation and/or other materials provided +// with the distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived +// from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +var a = []; +Object.defineProperty(a, 0, {}); +assertThrows(function() { a.pop(); }); + diff --git a/tools/presubmit.py b/tools/presubmit.py index 780dab9..1ab6347 100755 --- a/tools/presubmit.py +++ b/tools/presubmit.py @@ -282,8 +282,8 @@ class SourceProcessor(SourceFileProcessor): Check that all files include a copyright notice and no trailing whitespaces. """ - RELEVANT_EXTENSIONS = ['.js', '.cc', '.h', '.py', '.c', 'SConscript', - 'SConstruct', '.status', '.gyp', '.gypi'] + RELEVANT_EXTENSIONS = ['.js', '.cc', '.h', '.py', '.c', + '.status', '.gyp', '.gypi'] # Overwriting the one in the parent class. def FindFilesIn(self, path): @@ -292,7 +292,7 @@ class SourceProcessor(SourceFileProcessor): stdout=PIPE, cwd=path, shell=True) result = [] for file in output.stdout.read().split(): - for dir_part in os.path.dirname(file).split(os.sep): + for dir_part in os.path.dirname(file).replace(os.sep, '/').split('/'): if self.IgnoreDir(dir_part): break else: -- 2.7.4