| // Copyright 2015 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // Flags: --strong-mode |
| |
| function getGlobal() { |
| return this; |
| } |
| |
| function polluteGlobal() { |
| bar = 0; |
| } |
| |
| (function() { |
| "use strict"; |
| |
| let builtins = [ |
| Array, |
| Object, |
| Function, |
| getGlobal() |
| ]; |
| |
| for (let builtin of builtins) { |
| assertThrows(function(){"use strong"; builtin.foo}, TypeError); |
| assertThrows(function(){"use strong"; builtin[0]}, TypeError); |
| assertThrows(function(){"use strong"; builtin[10000]}, TypeError); |
| builtin.foo = 1; |
| assertDoesNotThrow(function(){"use strong"; builtin.foo}); |
| assertThrows(function(){"use strong"; builtin.bar}); |
| assertThrows(function(){"use strong"; builtin[0]}, TypeError); |
| assertThrows(function(){"use strong"; builtin[10000]}, TypeError); |
| builtin[0] = 1; |
| assertDoesNotThrow(function(){"use strong"; builtin.foo}); |
| assertThrows(function(){"use strong"; builtin.bar}); |
| assertDoesNotThrow(function(){"use strong"; builtin[0]}); |
| assertThrows(function(){"use strong"; builtin[10000]}, TypeError); |
| } |
| polluteGlobal(); |
| assertDoesNotThrow(function(){"use strong"; getGlobal().bar}); |
| })(); |