Mercurial > hg > openjdk > lambda > nashorn
changeset 577:195be8ca5c97
8025111: undefined or null 'with' expression in empty with block should throw TypeError
Reviewed-by: lagergren, hannesw
author | sundar |
---|---|
date | Fri, 20 Sep 2013 12:56:07 +0530 |
parents | 18d64bc4937d |
children | fa491b75d3e4 |
files | src/jdk/nashorn/internal/codegen/CodeGenerator.java test/script/basic/JDK-8025111.js |
diffstat | 2 files changed, 55 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/jdk/nashorn/internal/codegen/CodeGenerator.java Thu Sep 19 23:48:37 2013 +0530 +++ b/src/jdk/nashorn/internal/codegen/CodeGenerator.java Fri Sep 20 12:56:07 2013 +0530 @@ -2174,8 +2174,9 @@ method.invoke(ScriptRuntime.OPEN_WITH); method.storeCompilerConstant(SCOPE); } else { - // We just loaded the expression for its side effect; discard it - method.pop(); + // We just loaded the expression for its side effect and to check + // for null or undefined value. + globalCheckObjectCoercible(); } @@ -3257,6 +3258,10 @@ return method.invokestatic(GLOBAL_OBJECT, "isEval", methodDescriptor(boolean.class, Object.class)); } + private MethodEmitter globalCheckObjectCoercible() { + return method.invokestatic(GLOBAL_OBJECT, "checkObjectCoercible", methodDescriptor(void.class, Object.class)); + } + private MethodEmitter globalDirectEval() { return method.invokestatic(GLOBAL_OBJECT, "directEval", methodDescriptor(Object.class, Object.class, Object.class, Object.class, Object.class, Object.class));
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/script/basic/JDK-8025111.js Fri Sep 20 12:56:07 2013 +0530 @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * JDK-8025111: undefined or null 'with' expression in empty with block should throw TypeError + * + * @test + * @run + */ + +function check(callback, arg) { + try { + callback(arg); + fail("should have thrown TypeError: " + callback + " on " + arg); + } catch (e) { + if (! (e instanceof TypeError)) { + fail("Expected TypeError, got " + e); + } + } +} + +function func(obj) { + with(obj) {} +} + +check(func); +check(func, undefined); +check(func, null);