Class InterpretCodeGenerator
- java.lang.Object
-
- com.googlecode.aviator.code.BaseEvalCodeGenerator
-
- com.googlecode.aviator.code.interpreter.InterpretCodeGenerator
-
- All Implemented Interfaces:
CodeGenerator,EvalCodeGenerator
public class InterpretCodeGenerator extends BaseEvalCodeGenerator
Generate expression based on IR for interpreting.
-
-
Field Summary
Fields Modifier and Type Field Description private java.util.Set<Token<?>>constantPoolprivate LabelcurrLabelprivate java.util.List<IR>instrumentsprivate intlabelNumprivate java.util.Stack<Label>labels0private java.util.Stack<Label>labels1private static java.util.Set<Token.TokenType>LOAD_CONSTANTS_TYPE-
Fields inherited from class com.googlecode.aviator.code.BaseEvalCodeGenerator
classLoader, compileEnv, funcsArgs, instance, lambdaBootstraps, lambdaGenerator, methodMetaDataStack, methodTokens, parentCodeGenerator, parser, sourceFile, symbolTable, variables
-
-
Constructor Summary
Constructors Constructor Description InterpretCodeGenerator(AviatorEvaluatorInstance instance, java.lang.String sourceFile, AviatorClassLoader classLoader)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private voidemit(IR ir)voidgenNewLambdaCode(LambdaFunctionBootstrap bootstrap)ExpressiongetResult(boolean unboxObject)voidinitConstants(java.util.Set<Token<?>> constants)voidinitVariables(java.util.Map<java.lang.String,VariableMeta> vars)private LabelmakeLabel()voidonAdd(Token<?> lookhead)voidonAndLeft(Token<?> lookhead)voidonAndRight(Token<?> lookhead)voidonArray(Token<?> lookhead)voidonArrayIndexEnd(Token<?> lookhead)voidonArrayIndexStart(Token<?> token)voidonAssignment(Token<?> lookhead)voidonBitAnd(Token<?> lookhead)voidonBitNot(Token<?> lookhead)voidonBitOr(Token<?> lookhead)voidonBitXor(Token<?> lookhead)voidonConstant(Token<?> lookhead)voidonDiv(Token<?> lookhead)voidonEq(Token<?> lookhead)voidonExponent(Token<?> loohead)voidonGe(Token<?> lookhead)voidonGt(Token<?> lookhead)voidonJoinLeft(Token<?> lookhead)voidonJoinRight(Token<?> lookhead)voidonLambdaArgument(Token<?> lookhead, FunctionParam param)voidonLambdaBodyEnd(Token<?> lookhead)voidonLambdaBodyStart(Token<?> lookhead)voidonLambdaDefineStart(Token<?> lookhead)voidonLe(Token<?> lookhead)voidonLt(Token<?> lookhead)voidonMatch(Token<?> lookhead)voidonMethodInvoke(Token<?> lookhead)voidonMethodName(Token<?> lookhead)voidonMethodParameter(Token<?> lookhead)voidonMod(Token<?> lookhead)voidonMult(Token<?> lookhead)voidonNeg(Token<?> lookhead)voidonNeq(Token<?> lookhead)voidonNot(Token<?> lookhead)voidonShiftLeft(Token<?> lookhead)voidonShiftRight(Token<?> lookhead)voidonSub(Token<?> lookhead)voidonTernaryBoolean(Token<?> lookhead)voidonTernaryEnd(Token<?> lookhead)voidonTernaryLeft(Token<?> lookhead)voidonTernaryRight(Token<?> lookhead)voidonUnsignedShiftRight(Token<?> lookhead)private voidoptimize(java.util.List<IR> instruments)private LabelpeekLabel0()private LabelpeekLabel1()private LabelpopLabel0()private LabelpopLabel1()private voidpushLabel0(Label label)private voidpushLabel1(Label label)private voidresolveLabels(java.util.List<IR> instruments)voidstart()private voidvisitLabel(Label label)-
Methods inherited from class com.googlecode.aviator.code.BaseEvalCodeGenerator
getClassLoader, getFuncsArgs, getNextFuncInvocationId, initMethods, setLambdaBootstraps, setParser
-
-
-
-
Field Detail
-
instruments
private final java.util.List<IR> instruments
-
constantPool
private java.util.Set<Token<?>> constantPool
-
labelNum
private int labelNum
-
labels0
private final java.util.Stack<Label> labels0
-
labels1
private final java.util.Stack<Label> labels1
-
currLabel
private Label currLabel
-
LOAD_CONSTANTS_TYPE
private static java.util.Set<Token.TokenType> LOAD_CONSTANTS_TYPE
-
-
Constructor Detail
-
InterpretCodeGenerator
public InterpretCodeGenerator(AviatorEvaluatorInstance instance, java.lang.String sourceFile, AviatorClassLoader classLoader)
-
-
Method Detail
-
visitLabel
private void visitLabel(Label label)
-
pushLabel0
private void pushLabel0(Label label)
-
popLabel0
private Label popLabel0()
-
peekLabel0
private Label peekLabel0()
-
pushLabel1
private void pushLabel1(Label label)
-
popLabel1
private Label popLabel1()
-
peekLabel1
private Label peekLabel1()
-
makeLabel
private Label makeLabel()
-
start
public void start()
-
initVariables
public void initVariables(java.util.Map<java.lang.String,VariableMeta> vars)
-
initConstants
public void initConstants(java.util.Set<Token<?>> constants)
-
genNewLambdaCode
public void genNewLambdaCode(LambdaFunctionBootstrap bootstrap)
-
onAssignment
public void onAssignment(Token<?> lookhead)
-
onShiftRight
public void onShiftRight(Token<?> lookhead)
-
onShiftLeft
public void onShiftLeft(Token<?> lookhead)
-
onUnsignedShiftRight
public void onUnsignedShiftRight(Token<?> lookhead)
-
onBitOr
public void onBitOr(Token<?> lookhead)
-
onBitAnd
public void onBitAnd(Token<?> lookhead)
-
onBitXor
public void onBitXor(Token<?> lookhead)
-
onBitNot
public void onBitNot(Token<?> lookhead)
-
onAdd
public void onAdd(Token<?> lookhead)
-
onSub
public void onSub(Token<?> lookhead)
-
onMult
public void onMult(Token<?> lookhead)
-
onExponent
public void onExponent(Token<?> loohead)
-
onDiv
public void onDiv(Token<?> lookhead)
-
onAndLeft
public void onAndLeft(Token<?> lookhead)
-
emit
private void emit(IR ir)
-
onAndRight
public void onAndRight(Token<?> lookhead)
-
onTernaryBoolean
public void onTernaryBoolean(Token<?> lookhead)
-
onTernaryLeft
public void onTernaryLeft(Token<?> lookhead)
-
onTernaryRight
public void onTernaryRight(Token<?> lookhead)
-
onTernaryEnd
public void onTernaryEnd(Token<?> lookhead)
-
onJoinLeft
public void onJoinLeft(Token<?> lookhead)
-
onJoinRight
public void onJoinRight(Token<?> lookhead)
-
onEq
public void onEq(Token<?> lookhead)
-
onMatch
public void onMatch(Token<?> lookhead)
-
onNeq
public void onNeq(Token<?> lookhead)
-
onLt
public void onLt(Token<?> lookhead)
-
onLe
public void onLe(Token<?> lookhead)
-
onGt
public void onGt(Token<?> lookhead)
-
onGe
public void onGe(Token<?> lookhead)
-
onMod
public void onMod(Token<?> lookhead)
-
onNot
public void onNot(Token<?> lookhead)
-
onNeg
public void onNeg(Token<?> lookhead)
-
getResult
public Expression getResult(boolean unboxObject)
-
optimize
private void optimize(java.util.List<IR> instruments)
-
resolveLabels
private void resolveLabels(java.util.List<IR> instruments)
-
onConstant
public void onConstant(Token<?> lookhead)
-
onMethodName
public void onMethodName(Token<?> lookhead)
-
onMethodParameter
public void onMethodParameter(Token<?> lookhead)
-
onMethodInvoke
public void onMethodInvoke(Token<?> lookhead)
-
onLambdaDefineStart
public void onLambdaDefineStart(Token<?> lookhead)
-
onLambdaArgument
public void onLambdaArgument(Token<?> lookhead, FunctionParam param)
-
onLambdaBodyStart
public void onLambdaBodyStart(Token<?> lookhead)
-
onLambdaBodyEnd
public void onLambdaBodyEnd(Token<?> lookhead)
-
onArray
public void onArray(Token<?> lookhead)
-
onArrayIndexStart
public void onArrayIndexStart(Token<?> token)
-
onArrayIndexEnd
public void onArrayIndexEnd(Token<?> lookhead)
-
-