org.mozilla.javascript.InterpreterData 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!
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* 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;
import java.io.Serializable;
import java.math.BigInteger;
import java.util.Arrays;
import org.mozilla.javascript.debug.DebuggableScript;
final class InterpreterData implements Serializable, DebuggableScript {
private static final long serialVersionUID = 5067677351589230234L;
static final int INITIAL_MAX_ICODE_LENGTH = 1024;
static final int INITIAL_STRINGTABLE_SIZE = 64;
static final int INITIAL_NUMBERTABLE_SIZE = 64;
static final int INITIAL_BIGINTTABLE_SIZE = 64;
InterpreterData(
int languageVersion, String sourceFile, String encodedSource, boolean isStrict) {
this.languageVersion = languageVersion;
this.itsSourceFile = sourceFile;
this.encodedSource = encodedSource;
this.isStrict = isStrict;
init();
}
InterpreterData(InterpreterData parent) {
this.parentData = parent;
this.languageVersion = parent.languageVersion;
this.itsSourceFile = parent.itsSourceFile;
this.encodedSource = parent.encodedSource;
this.isStrict = parent.isStrict;
init();
}
private void init() {
itsICode = new byte[INITIAL_MAX_ICODE_LENGTH];
itsStringTable = new String[INITIAL_STRINGTABLE_SIZE];
itsBigIntTable = new BigInteger[INITIAL_BIGINTTABLE_SIZE];
}
String itsName;
String itsSourceFile;
boolean itsNeedsActivation;
int itsFunctionType;
String[] itsStringTable;
double[] itsDoubleTable;
BigInteger[] itsBigIntTable;
InterpreterData[] itsNestedFunctions;
Object[] itsRegExpLiterals;
Object[] itsTemplateLiterals;
byte[] itsICode;
int[] itsExceptionTable;
int itsMaxVars;
int itsMaxLocals;
int itsMaxStack;
int itsMaxFrameArray;
// see comments in NativeFuncion for definition of argNames and argCount
String[] argNames;
boolean[] argIsConst;
int argCount;
boolean argsHasRest;
int itsMaxCalleeArgs;
String encodedSource;
int encodedSourceStart;
int encodedSourceEnd;
int languageVersion;
boolean isStrict;
boolean topLevel;
boolean isES6Generator;
Object[] literalIds;
UintMap longJumps;
int firstLinePC = -1; // PC for the first LINE icode
InterpreterData parentData;
boolean evalScriptFlag; // true if script corresponds to eval() code
private int icodeHashCode = 0;
/** true if the function has been declared like "var foo = function() {...}" */
boolean declaredAsVar;
/** true if the function has been declared like "!function() {}". */
boolean declaredAsFunctionExpression;
@Override
public boolean isTopLevel() {
return topLevel;
}
@Override
public boolean isFunction() {
return itsFunctionType != 0;
}
@Override
public String getFunctionName() {
return itsName;
}
@Override
public int getParamCount() {
return argCount;
}
@Override
public int getParamAndVarCount() {
return argNames.length;
}
@Override
public String getParamOrVarName(int index) {
return argNames[index];
}
public boolean getParamOrVarConst(int index) {
return argIsConst[index];
}
@Override
public String getSourceName() {
return itsSourceFile;
}
@Override
public boolean isGeneratedScript() {
return ScriptRuntime.isGeneratedScript(itsSourceFile);
}
@Override
public int[] getLineNumbers() {
return Interpreter.getLineNumbers(this);
}
@Override
public int getFunctionCount() {
return (itsNestedFunctions == null) ? 0 : itsNestedFunctions.length;
}
@Override
public DebuggableScript getFunction(int index) {
return itsNestedFunctions[index];
}
@Override
public DebuggableScript getParent() {
return parentData;
}
public int icodeHashCode() {
int h = icodeHashCode;
if (h == 0) {
icodeHashCode = h = Arrays.hashCode(itsICode);
}
return h;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy