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 org.apache.servicemix.bundles.rhino
Show all versions of org.apache.servicemix.bundles.rhino
This OSGi bundle wraps rhino and rhino-engine ${pkgVersion} jar files.
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