org.mozilla.javascript.optimizer.OptFunctionNode Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of rhino Show documentation
Show all versions of rhino Show documentation
Rhino is an open-source implementation of JavaScript written entirely in Java. It is typically
embedded into Java applications to provide scripting to end users.
The newest version!
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.javascript.optimizer;
import org.mozilla.javascript.Kit;
import org.mozilla.javascript.Node;
import org.mozilla.javascript.Token;
import org.mozilla.javascript.ast.FunctionNode;
import org.mozilla.javascript.ast.ScriptNode;
public final class OptFunctionNode {
OptFunctionNode(FunctionNode fnode) {
this.fnode = fnode;
fnode.setCompilerData(this);
}
public static OptFunctionNode get(ScriptNode scriptOrFn, int i) {
FunctionNode fnode = scriptOrFn.getFunctionNode(i);
return (OptFunctionNode) fnode.getCompilerData();
}
public static OptFunctionNode get(ScriptNode scriptOrFn) {
return (OptFunctionNode) scriptOrFn.getCompilerData();
}
public boolean isTargetOfDirectCall() {
return directTargetIndex >= 0;
}
public int getDirectTargetIndex() {
return directTargetIndex;
}
void setDirectTargetIndex(int directTargetIndex) {
// One time action
if (directTargetIndex < 0 || this.directTargetIndex >= 0) Kit.codeBug();
this.directTargetIndex = directTargetIndex;
}
void setParameterNumberContext(boolean b) {
itsParameterNumberContext = b;
}
public boolean getParameterNumberContext() {
return itsParameterNumberContext;
}
public int getVarCount() {
return fnode.getParamAndVarCount();
}
public boolean isParameter(int varIndex) {
return varIndex < fnode.getParamCount();
}
public boolean isNumberVar(int varIndex) {
varIndex -= fnode.getParamCount();
if (varIndex >= 0 && numberVarFlags != null) {
return numberVarFlags[varIndex];
}
return false;
}
void setIsNumberVar(int varIndex) {
varIndex -= fnode.getParamCount();
// Can only be used with non-parameters
if (varIndex < 0) Kit.codeBug();
if (numberVarFlags == null) {
int size = fnode.getParamAndVarCount() - fnode.getParamCount();
numberVarFlags = new boolean[size];
}
numberVarFlags[varIndex] = true;
}
public int getVarIndex(Node n) {
int index = n.getIntProp(Node.VARIABLE_PROP, -1);
if (index == -1) {
Node node;
int type = n.getType();
if (type == Token.GETVAR) {
node = n;
} else if (type == Token.SETVAR || type == Token.SETCONSTVAR) {
node = n.getFirstChild();
} else {
throw Kit.codeBug();
}
index = fnode.getIndexForNameNode(node);
if (index < 0) throw Kit.codeBug();
n.putIntProp(Node.VARIABLE_PROP, index);
}
return index;
}
public final FunctionNode fnode;
private boolean[] numberVarFlags;
private int directTargetIndex = -1;
private boolean itsParameterNumberContext;
boolean itsContainsCalls0;
boolean itsContainsCalls1;
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy