src/jdk/nashorn/internal/codegen/Attr.java

Print this page

        

*** 375,386 **** * @return Symbol for given name or null for redefinition. */ private Symbol defineSymbol(final Block block, final String name, final int symbolFlags) { int flags = symbolFlags; Symbol symbol = findSymbol(block, name); // Locate symbol. ! if ((flags & KINDMASK) == IS_GLOBAL) { flags |= IS_SCOPE; } final FunctionNode function = lc.getFunction(block); if (symbol != null) { --- 375,387 ---- * @return Symbol for given name or null for redefinition. */ private Symbol defineSymbol(final Block block, final String name, final int symbolFlags) { int flags = symbolFlags; Symbol symbol = findSymbol(block, name); // Locate symbol. + boolean isGlobal = (flags & KINDMASK) == IS_GLOBAL; ! if (isGlobal) { flags |= IS_SCOPE; } final FunctionNode function = lc.getFunction(block); if (symbol != null) {
*** 412,421 **** --- 413,424 ---- Block symbolBlock; // Determine where to create it. if ((flags & Symbol.KINDMASK) == IS_VAR && ((flags & IS_INTERNAL) == IS_INTERNAL || (flags & IS_LET) == IS_LET)) { symbolBlock = block; //internal vars are always defined in the block closest to them + } else if (isGlobal) { + symbolBlock = lc.getOutermostFunction().getBody(); } else { symbolBlock = lc.getFunctionBody(function); } // Create and add to appropriate block.