--- old/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/ir/OptimisticLexicalContext.java 2020-04-15 18:48:01.000000000 +0530 +++ /dev/null 2020-04-15 18:48:01.000000000 +0530 @@ -1,128 +0,0 @@ -/* - * 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. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * 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. - */ -package jdk.nashorn.internal.ir; - -import java.util.ArrayDeque; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Deque; -import java.util.List; -import jdk.nashorn.internal.codegen.types.Type; - -/** - * Lexical context that keeps track of optimistic assumptions (if any) - * made during code generation. Used from Attr and FinalizeTypes - */ -public class OptimisticLexicalContext extends LexicalContext { - - private final boolean isEnabled; - - class Assumption { - Symbol symbol; - Type type; - - Assumption(final Symbol symbol, final Type type) { - this.symbol = symbol; - this.type = type; - } - @Override - public String toString() { - return symbol.getName() + "=" + type; - } - } - - /** Optimistic assumptions that could be made per function */ - private final Deque> optimisticAssumptions = new ArrayDeque<>(); - - /** - * Constructor - * @param isEnabled are optimistic types enabled? - */ - public OptimisticLexicalContext(final boolean isEnabled) { - super(); - this.isEnabled = isEnabled; - } - - /** - * Are optimistic types enabled - * @return true if optimistic types - */ - public boolean isEnabled() { - return isEnabled; - } - - /** - * Log an optimistic assumption during codegen - * TODO : different parameters and more info about the assumption for future profiling - * needs - * @param symbol symbol - * @param type type - */ - public void logOptimisticAssumption(final Symbol symbol, final Type type) { - if (isEnabled) { - final List peek = optimisticAssumptions.peek(); - peek.add(new Assumption(symbol, type)); - } - } - - /** - * Get the list of optimistic assumptions made - * @return optimistic assumptions - */ - public List getOptimisticAssumptions() { - return Collections.unmodifiableList(optimisticAssumptions.peek()); - } - - /** - * Does this method have optimistic assumptions made during codegen? - * @return true if optimistic assumptions were made - */ - public boolean hasOptimisticAssumptions() { - return !optimisticAssumptions.isEmpty() && !getOptimisticAssumptions().isEmpty(); - } - - @Override - public T push(final T node) { - if (isEnabled) { - if(node instanceof FunctionNode) { - optimisticAssumptions.push(new ArrayList()); - } - } - - return super.push(node); - } - - @Override - public T pop(final T node) { - final T popped = super.pop(node); - if (isEnabled) { - if(node instanceof FunctionNode) { - optimisticAssumptions.pop(); - } - } - return popped; - } - -}