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-runtime Show documentation
Show all versions of rhino-runtime Show documentation
Rhino JavaScript runtime jar, excludes tools & JSR-223 Script Engine wrapper.
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;
}