Package org.htmlunit.corejs.javascript
Class Interpreter
- java.lang.Object
-
- org.htmlunit.corejs.javascript.Icode
-
- org.htmlunit.corejs.javascript.Interpreter
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static classInterpreter.CallFrameClass to hold data corresponding to one interpreted call stack frame.private static classInterpreter.ContinuationJump(package private) static classInterpreter.GeneratorState
-
Field Summary
Fields Modifier and Type Field Description (package private) static intEXCEPTION_HANDLER_SLOT(package private) static intEXCEPTION_LOCAL_SLOT(package private) static intEXCEPTION_SCOPE_SLOT(package private) static intEXCEPTION_SLOT_SIZE(package private) static intEXCEPTION_TRY_END_SLOT(package private) static intEXCEPTION_TRY_START_SLOT(package private) static intEXCEPTION_TYPE_SLOT(package private) InterpreterDataitsData-
Fields inherited from class org.htmlunit.corejs.javascript.Icode
Icode_CALLSPECIAL, Icode_CLOSURE_EXPR, Icode_CLOSURE_STMT, Icode_DEBUGGER, Icode_DELNAME, Icode_DUP, Icode_DUP2, Icode_ELEM_AND_THIS, Icode_ELEM_INC_DEC, Icode_ENTERDQ, Icode_GENERATOR, Icode_GENERATOR_END, Icode_GENERATOR_RETURN, Icode_GETVAR1, Icode_GOSUB, Icode_IFEQ_POP, Icode_INTNUMBER, Icode_LEAVEDQ, Icode_LINE, Icode_LITERAL_GETTER, Icode_LITERAL_NEW, Icode_LITERAL_SET, Icode_LITERAL_SETTER, Icode_LOCAL_CLEAR, Icode_NAME_AND_THIS, Icode_NAME_INC_DEC, Icode_ONE, Icode_POP, Icode_POP_RESULT, Icode_PROP_AND_THIS, Icode_PROP_INC_DEC, Icode_REF_INC_DEC, Icode_REG_BIGINT_C0, Icode_REG_BIGINT_C1, Icode_REG_BIGINT_C2, Icode_REG_BIGINT_C3, Icode_REG_BIGINT1, Icode_REG_BIGINT2, Icode_REG_BIGINT4, Icode_REG_IND_C0, Icode_REG_IND_C1, Icode_REG_IND_C2, Icode_REG_IND_C3, Icode_REG_IND_C4, Icode_REG_IND_C5, Icode_REG_IND1, Icode_REG_IND2, Icode_REG_IND4, Icode_REG_STR_C0, Icode_REG_STR_C1, Icode_REG_STR_C2, Icode_REG_STR_C3, Icode_REG_STR1, Icode_REG_STR2, Icode_REG_STR4, Icode_RETSUB, Icode_RETUNDEF, Icode_SCOPE_LOAD, Icode_SCOPE_SAVE, Icode_SETCONST, Icode_SETCONSTVAR, Icode_SETCONSTVAR1, Icode_SETVAR1, Icode_SHORTNUMBER, Icode_SPARE_ARRAYLIT, Icode_STARTSUB, Icode_SWAP, Icode_TAIL_CALL, Icode_TEMPLATE_LITERAL_CALLSITE, Icode_TYPEOFNAME, Icode_UNDEF, Icode_VALUE_AND_THIS, Icode_VAR_INC_DEC, Icode_YIELD_STAR, Icode_ZERO, MIN_ICODE
-
-
Constructor Summary
Constructors Constructor Description Interpreter()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private static voidaddInstructionCount(Context cx, Interpreter.CallFrame frame, int extra)private static intbytecodeSpan(int bytecode)static NativeContinuationcaptureContinuation(Context cx)private static NativeContinuationcaptureContinuation(Context cx, Interpreter.CallFrame frame, boolean requireContinuationsTopFrame)private static Interpreter.CallFramecaptureFrameForGenerator(Interpreter.CallFrame frame)voidcaptureStackInfo(RhinoException ex)Capture stack information from the given exception.private static booleancompareIdata(InterpreterData i1, InterpreterData i2)java.lang.Objectcompile(CompilerEnvirons compilerEnv, ScriptNode tree, java.lang.String encodedSource, boolean returnFunction)Compile the script or function from intermediate representation tree into an executable form.FunctioncreateFunctionObject(Context cx, Scriptable scope, java.lang.Object bytecode, java.lang.Object staticSecurityDomain)Create a function object.ScriptcreateScriptObject(java.lang.Object bytecode, java.lang.Object staticSecurityDomain)Create a script object.private static voiddoAdd(java.lang.Object[] stack, double[] sDbl, int stackTop, Context cx)private static intdoArithmetic(Interpreter.CallFrame frame, int op, java.lang.Object[] stack, double[] sDbl, int stackTop)private static intdoBitNOT(Interpreter.CallFrame frame, java.lang.Object[] stack, double[] sDbl, int stackTop)private static intdoBitOp(Interpreter.CallFrame frame, int op, java.lang.Object[] stack, double[] sDbl, int stackTop)private static intdoCallSpecial(Context cx, Interpreter.CallFrame frame, java.lang.Object[] stack, double[] sDbl, int stackTop, byte[] iCode, int indexReg)private static intdoCompare(Interpreter.CallFrame frame, int op, java.lang.Object[] stack, double[] sDbl, int stackTop)private static intdoDelName(Context cx, Interpreter.CallFrame frame, int op, java.lang.Object[] stack, double[] sDbl, int stackTop)private static intdoElemIncDec(Context cx, Interpreter.CallFrame frame, byte[] iCode, java.lang.Object[] stack, double[] sDbl, int stackTop)private static booleandoEquals(java.lang.Object[] stack, double[] sDbl, int stackTop)private static intdoGetElem(Context cx, Interpreter.CallFrame frame, java.lang.Object[] stack, double[] sDbl, int stackTop)private static intdoGetVar(Interpreter.CallFrame frame, java.lang.Object[] stack, double[] sDbl, int stackTop, java.lang.Object[] vars, double[] varDbls, int indexReg)private static intdoInOrInstanceof(Context cx, int op, java.lang.Object[] stack, double[] sDbl, int stackTop)private static intdoRefMember(Context cx, java.lang.Object[] stack, double[] sDbl, int stackTop, int flags)private static intdoRefNsMember(Context cx, java.lang.Object[] stack, double[] sDbl, int stackTop, int flags)private static intdoRefNsName(Context cx, Interpreter.CallFrame frame, java.lang.Object[] stack, double[] sDbl, int stackTop, int flags)private static intdoSetConstVar(Interpreter.CallFrame frame, java.lang.Object[] stack, double[] sDbl, int stackTop, java.lang.Object[] vars, double[] varDbls, int[] varAttributes, int indexReg)private static intdoSetElem(Context cx, Interpreter.CallFrame frame, java.lang.Object[] stack, double[] sDbl, int stackTop)private static intdoSetVar(Interpreter.CallFrame frame, java.lang.Object[] stack, double[] sDbl, int stackTop, java.lang.Object[] vars, double[] varDbls, int[] varAttributes, int indexReg)private static booleandoShallowEquals(java.lang.Object[] stack, double[] sDbl, int stackTop)private static intdoVarIncDec(Context cx, Interpreter.CallFrame frame, java.lang.Object[] stack, double[] sDbl, int stackTop, java.lang.Object[] vars, double[] varDbls, int[] varAttributes, int indexReg)(package private) static voiddumpICode(InterpreterData idata)private static voidenterFrame(Context cx, Interpreter.CallFrame frame, java.lang.Object[] args, boolean continuationRestart)private static voidexitFrame(Context cx, Interpreter.CallFrame frame, java.lang.Object throwable)private static java.lang.ObjectfreezeGenerator(Context cx, Interpreter.CallFrame frame, int stackTop, Interpreter.GeneratorState generatorState, boolean yieldStar)private static java.lang.Object[]getArgsArray(java.lang.Object[] stack, double[] sDbl, int shift, int count)(package private) static java.lang.StringgetEncodedSource(InterpreterData idata)private static intgetExceptionHandler(Interpreter.CallFrame frame, boolean onlyFinally)private static intgetIndex(byte[] iCode, int pc)private static intgetInt(byte[] iCode, int pc)(package private) static int[]getLineNumbers(InterpreterData data)java.lang.StringgetPatchedStack(RhinoException ex, java.lang.String nativeStackTrace)Given a native stack trace, patch it with script-specific source and line informationjava.util.List<java.lang.String>getScriptStack(RhinoException ex)Get the script stack for the given exceptionScriptStackElement[][]getScriptStackElements(RhinoException ex)private static intgetShort(byte[] iCode, int pc)java.lang.StringgetSourcePositionFromStack(Context cx, int[] linep)Get the source position information by examining the stack.private static Interpreter.CallFrameinitFrame(Context cx, Scriptable callerScope, Scriptable thisObj, java.lang.Object[] args, double[] argsDbl, int argShift, int argCount, InterpretedFunction fnOrScript, Interpreter.CallFrame parentFrame)private static Interpreter.CallFrameinitFrameForApplyOrCall(Context cx, Interpreter.CallFrame frame, int indexReg, java.lang.Object[] stack, double[] sDbl, int stackTop, int op, Scriptable calleeScope, IdFunctionObject ifun, InterpretedFunction iApplyCallable)private static Interpreter.CallFrameinitFrameForNoSuchMethod(Context cx, Interpreter.CallFrame frame, int indexReg, java.lang.Object[] stack, double[] sDbl, int stackTop, int op, Scriptable funThisObj, Scriptable calleeScope, ScriptRuntime.NoSuchMethodShim noSuchMethodShim, InterpretedFunction ifun)Call __noSuchMethod__.private static voidinitFunction(Context cx, Scriptable scope, InterpretedFunction parent, int index)(package private) static java.lang.Objectinterpret(InterpretedFunction ifun, Context cx, Scriptable scope, Scriptable thisObj, java.lang.Object[] args)private static java.lang.ObjectinterpretLoop(Context cx, Interpreter.CallFrame frame, java.lang.Object throwable)private static Interpreter.CallFrameprocessThrowable(Context cx, java.lang.Object throwable, Interpreter.CallFrame frame, int indexReg, boolean instructionCounting)static java.lang.ObjectrestartContinuation(NativeContinuation c, Context cx, Scriptable scope, java.lang.Object[] args)static java.lang.ObjectresumeGenerator(Context cx, Scriptable scope, int operation, java.lang.Object savedState, java.lang.Object value)private static voidsetCallResult(Interpreter.CallFrame frame, java.lang.Object callResult, double callResultDbl)voidsetEvalScriptFlag(Script script)Mark the given script to indicate it was created by a call to eval() or to a Function constructor.private static booleanstack_boolean(Interpreter.CallFrame frame, int i)private static doublestack_double(Interpreter.CallFrame frame, int i)private static intstack_int32(Interpreter.CallFrame frame, int i)private static java.lang.Numberstack_numeric(Interpreter.CallFrame frame, int i)private static java.lang.ObjectthawGenerator(Interpreter.CallFrame frame, int stackTop, Interpreter.GeneratorState generatorState, int op)-
Methods inherited from class org.htmlunit.corejs.javascript.Icode
bytecodeName, validBytecode, validIcode, validTokenCode
-
-
-
-
Field Detail
-
itsData
InterpreterData itsData
-
EXCEPTION_TRY_START_SLOT
static final int EXCEPTION_TRY_START_SLOT
- See Also:
- Constant Field Values
-
EXCEPTION_TRY_END_SLOT
static final int EXCEPTION_TRY_END_SLOT
- See Also:
- Constant Field Values
-
EXCEPTION_HANDLER_SLOT
static final int EXCEPTION_HANDLER_SLOT
- See Also:
- Constant Field Values
-
EXCEPTION_TYPE_SLOT
static final int EXCEPTION_TYPE_SLOT
- See Also:
- Constant Field Values
-
EXCEPTION_LOCAL_SLOT
static final int EXCEPTION_LOCAL_SLOT
- See Also:
- Constant Field Values
-
EXCEPTION_SCOPE_SLOT
static final int EXCEPTION_SCOPE_SLOT
- See Also:
- Constant Field Values
-
EXCEPTION_SLOT_SIZE
static final int EXCEPTION_SLOT_SIZE
- See Also:
- Constant Field Values
-
-
Method Detail
-
compareIdata
private static boolean compareIdata(InterpreterData i1, InterpreterData i2)
-
captureFrameForGenerator
private static Interpreter.CallFrame captureFrameForGenerator(Interpreter.CallFrame frame)
-
compile
public java.lang.Object compile(CompilerEnvirons compilerEnv, ScriptNode tree, java.lang.String encodedSource, boolean returnFunction)
Description copied from interface:EvaluatorCompile the script or function from intermediate representation tree into an executable form.- Specified by:
compilein interfaceEvaluator- Parameters:
compilerEnv- Compiler environmenttree- parse treeencodedSource- encoding of the source code for decompilationreturnFunction- if true, compiling a function- Returns:
- an opaque object that can be passed to either createFunctionObject or createScriptObject, depending on the value of returnFunction
-
createScriptObject
public Script createScriptObject(java.lang.Object bytecode, java.lang.Object staticSecurityDomain)
Description copied from interface:EvaluatorCreate a script object.- Specified by:
createScriptObjectin interfaceEvaluator- Parameters:
bytecode- opaque object returned by compilestaticSecurityDomain- security domain- Returns:
- Script object that can be evaluated
-
setEvalScriptFlag
public void setEvalScriptFlag(Script script)
Description copied from interface:EvaluatorMark the given script to indicate it was created by a call to eval() or to a Function constructor.- Specified by:
setEvalScriptFlagin interfaceEvaluator- Parameters:
script- script to mark as from eval
-
createFunctionObject
public Function createFunctionObject(Context cx, Scriptable scope, java.lang.Object bytecode, java.lang.Object staticSecurityDomain)
Description copied from interface:EvaluatorCreate a function object.- Specified by:
createFunctionObjectin interfaceEvaluator- Parameters:
cx- Current contextscope- scope of the functionbytecode- opaque object returned by compilestaticSecurityDomain- security domain- Returns:
- Function object that can be called
-
getShort
private static int getShort(byte[] iCode, int pc)
-
getIndex
private static int getIndex(byte[] iCode, int pc)
-
getInt
private static int getInt(byte[] iCode, int pc)
-
getExceptionHandler
private static int getExceptionHandler(Interpreter.CallFrame frame, boolean onlyFinally)
-
dumpICode
static void dumpICode(InterpreterData idata)
-
bytecodeSpan
private static int bytecodeSpan(int bytecode)
-
getLineNumbers
static int[] getLineNumbers(InterpreterData data)
-
captureStackInfo
public void captureStackInfo(RhinoException ex)
Description copied from interface:EvaluatorCapture stack information from the given exception.- Specified by:
captureStackInfoin interfaceEvaluator- Parameters:
ex- an exception thrown during execution
-
getSourcePositionFromStack
public java.lang.String getSourcePositionFromStack(Context cx, int[] linep)
Description copied from interface:EvaluatorGet the source position information by examining the stack.- Specified by:
getSourcePositionFromStackin interfaceEvaluator- Parameters:
cx- Contextlinep- Array object of length >= 1; getSourcePositionFromStack will assign the line number to linep[0].- Returns:
- the name of the file or other source container
-
getPatchedStack
public java.lang.String getPatchedStack(RhinoException ex, java.lang.String nativeStackTrace)
Description copied from interface:EvaluatorGiven a native stack trace, patch it with script-specific source and line information- Specified by:
getPatchedStackin interfaceEvaluator- Parameters:
ex- exceptionnativeStackTrace- the native stack trace- Returns:
- patched stack trace
-
getScriptStack
public java.util.List<java.lang.String> getScriptStack(RhinoException ex)
Description copied from interface:EvaluatorGet the script stack for the given exception- Specified by:
getScriptStackin interfaceEvaluator- Parameters:
ex- exception from execution- Returns:
- list of strings for the stack trace
-
getScriptStackElements
public ScriptStackElement[][] getScriptStackElements(RhinoException ex)
-
getEncodedSource
static java.lang.String getEncodedSource(InterpreterData idata)
-
initFunction
private static void initFunction(Context cx, Scriptable scope, InterpretedFunction parent, int index)
-
interpret
static java.lang.Object interpret(InterpretedFunction ifun, Context cx, Scriptable scope, Scriptable thisObj, java.lang.Object[] args)
-
resumeGenerator
public static java.lang.Object resumeGenerator(Context cx, Scriptable scope, int operation, java.lang.Object savedState, java.lang.Object value)
-
restartContinuation
public static java.lang.Object restartContinuation(NativeContinuation c, Context cx, Scriptable scope, java.lang.Object[] args)
-
interpretLoop
private static java.lang.Object interpretLoop(Context cx, Interpreter.CallFrame frame, java.lang.Object throwable)
-
doInOrInstanceof
private static int doInOrInstanceof(Context cx, int op, java.lang.Object[] stack, double[] sDbl, int stackTop)
-
doCompare
private static int doCompare(Interpreter.CallFrame frame, int op, java.lang.Object[] stack, double[] sDbl, int stackTop)
-
doBitOp
private static int doBitOp(Interpreter.CallFrame frame, int op, java.lang.Object[] stack, double[] sDbl, int stackTop)
-
doBitNOT
private static int doBitNOT(Interpreter.CallFrame frame, java.lang.Object[] stack, double[] sDbl, int stackTop)
-
doDelName
private static int doDelName(Context cx, Interpreter.CallFrame frame, int op, java.lang.Object[] stack, double[] sDbl, int stackTop)
-
doGetElem
private static int doGetElem(Context cx, Interpreter.CallFrame frame, java.lang.Object[] stack, double[] sDbl, int stackTop)
-
doSetElem
private static int doSetElem(Context cx, Interpreter.CallFrame frame, java.lang.Object[] stack, double[] sDbl, int stackTop)
-
doElemIncDec
private static int doElemIncDec(Context cx, Interpreter.CallFrame frame, byte[] iCode, java.lang.Object[] stack, double[] sDbl, int stackTop)
-
doCallSpecial
private static int doCallSpecial(Context cx, Interpreter.CallFrame frame, java.lang.Object[] stack, double[] sDbl, int stackTop, byte[] iCode, int indexReg)
-
doSetConstVar
private static int doSetConstVar(Interpreter.CallFrame frame, java.lang.Object[] stack, double[] sDbl, int stackTop, java.lang.Object[] vars, double[] varDbls, int[] varAttributes, int indexReg)
-
doSetVar
private static int doSetVar(Interpreter.CallFrame frame, java.lang.Object[] stack, double[] sDbl, int stackTop, java.lang.Object[] vars, double[] varDbls, int[] varAttributes, int indexReg)
-
doGetVar
private static int doGetVar(Interpreter.CallFrame frame, java.lang.Object[] stack, double[] sDbl, int stackTop, java.lang.Object[] vars, double[] varDbls, int indexReg)
-
doVarIncDec
private static int doVarIncDec(Context cx, Interpreter.CallFrame frame, java.lang.Object[] stack, double[] sDbl, int stackTop, java.lang.Object[] vars, double[] varDbls, int[] varAttributes, int indexReg)
-
doRefMember
private static int doRefMember(Context cx, java.lang.Object[] stack, double[] sDbl, int stackTop, int flags)
-
doRefNsMember
private static int doRefNsMember(Context cx, java.lang.Object[] stack, double[] sDbl, int stackTop, int flags)
-
doRefNsName
private static int doRefNsName(Context cx, Interpreter.CallFrame frame, java.lang.Object[] stack, double[] sDbl, int stackTop, int flags)
-
initFrameForNoSuchMethod
private static Interpreter.CallFrame initFrameForNoSuchMethod(Context cx, Interpreter.CallFrame frame, int indexReg, java.lang.Object[] stack, double[] sDbl, int stackTop, int op, Scriptable funThisObj, Scriptable calleeScope, ScriptRuntime.NoSuchMethodShim noSuchMethodShim, InterpretedFunction ifun)
Call __noSuchMethod__.
-
doEquals
private static boolean doEquals(java.lang.Object[] stack, double[] sDbl, int stackTop)
-
doShallowEquals
private static boolean doShallowEquals(java.lang.Object[] stack, double[] sDbl, int stackTop)
-
processThrowable
private static Interpreter.CallFrame processThrowable(Context cx, java.lang.Object throwable, Interpreter.CallFrame frame, int indexReg, boolean instructionCounting)
-
freezeGenerator
private static java.lang.Object freezeGenerator(Context cx, Interpreter.CallFrame frame, int stackTop, Interpreter.GeneratorState generatorState, boolean yieldStar)
-
thawGenerator
private static java.lang.Object thawGenerator(Interpreter.CallFrame frame, int stackTop, Interpreter.GeneratorState generatorState, int op)
-
initFrameForApplyOrCall
private static Interpreter.CallFrame initFrameForApplyOrCall(Context cx, Interpreter.CallFrame frame, int indexReg, java.lang.Object[] stack, double[] sDbl, int stackTop, int op, Scriptable calleeScope, IdFunctionObject ifun, InterpretedFunction iApplyCallable)
-
initFrame
private static Interpreter.CallFrame initFrame(Context cx, Scriptable callerScope, Scriptable thisObj, java.lang.Object[] args, double[] argsDbl, int argShift, int argCount, InterpretedFunction fnOrScript, Interpreter.CallFrame parentFrame)
-
enterFrame
private static void enterFrame(Context cx, Interpreter.CallFrame frame, java.lang.Object[] args, boolean continuationRestart)
-
exitFrame
private static void exitFrame(Context cx, Interpreter.CallFrame frame, java.lang.Object throwable)
-
setCallResult
private static void setCallResult(Interpreter.CallFrame frame, java.lang.Object callResult, double callResultDbl)
-
captureContinuation
public static NativeContinuation captureContinuation(Context cx)
-
captureContinuation
private static NativeContinuation captureContinuation(Context cx, Interpreter.CallFrame frame, boolean requireContinuationsTopFrame)
-
stack_int32
private static int stack_int32(Interpreter.CallFrame frame, int i)
-
stack_double
private static double stack_double(Interpreter.CallFrame frame, int i)
-
stack_numeric
private static java.lang.Number stack_numeric(Interpreter.CallFrame frame, int i)
-
stack_boolean
private static boolean stack_boolean(Interpreter.CallFrame frame, int i)
-
doAdd
private static void doAdd(java.lang.Object[] stack, double[] sDbl, int stackTop, Context cx)
-
doArithmetic
private static int doArithmetic(Interpreter.CallFrame frame, int op, java.lang.Object[] stack, double[] sDbl, int stackTop)
-
getArgsArray
private static java.lang.Object[] getArgsArray(java.lang.Object[] stack, double[] sDbl, int shift, int count)
-
addInstructionCount
private static void addInstructionCount(Context cx, Interpreter.CallFrame frame, int extra)
-
-