--- old/src/jdk/nashorn/internal/codegen/CodeGenerator.java 2013-09-20 09:48:00.168547299 +0530 +++ new/src/jdk/nashorn/internal/codegen/CodeGenerator.java 2013-09-20 09:47:59.912546029 +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 2013-09-20 07:58:31.101503302 +0530 +++ new/test/script/basic/JDK-8025111.js 2013-09-20 09:48:00.780550337 +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);