Package com.googlecode.aviator.code
Class OptimizeCodeGenerator
- java.lang.Object
-
- com.googlecode.aviator.code.OptimizeCodeGenerator
-
- All Implemented Interfaces:
CodeGenerator
public class OptimizeCodeGenerator extends java.lang.Object implements CodeGenerator
Optimized code generator
-
-
Field Summary
Fields Modifier and Type Field Description private EvalCodeGenerator
codeGen
private Env
compileEnv
private AviatorEvaluatorInstance
instance
private java.util.Map<java.lang.String,LambdaFunctionBootstrap>
lambdaBootstraps
Compiled lambda functions.private LambdaGenerator
lambdaGenerator
private CodeGenerator
parentCodeGenerator
private Parser
parser
private java.lang.String
sourceFile
private java.util.List<Token<?>>
tokenList
-
Constructor Summary
Constructors Constructor Description OptimizeCodeGenerator(AviatorEvaluatorInstance instance, java.lang.String sourceFile, java.lang.ClassLoader classLoader, java.io.OutputStream traceOutStream)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private void
callASM(java.util.Map<java.lang.String,VariableMeta> variables, java.util.Map<java.lang.String,java.lang.Integer> methods, java.util.Set<Token<?>> constants)
private void
compactTokenList()
private int
execute()
private int
executeOperator(java.util.Map<java.lang.Integer,DelegateToken.DelegateTokenType> index2DelegateType, Token<?> operatorToken, OperatorType operatorType, int operatorIndex, int operandCount)
private AviatorObject
getAviatorObjectFromToken(Token<?> lookhead)
private Env
getCompileEnv()
private java.util.Map<java.lang.Integer,DelegateToken.DelegateTokenType>
getIndex2DelegateTypeMap(OperatorType opType)
Expression
getResult(boolean unboxObject)
private Token<?>
getTokenFromOperand(Token<?> operatorToken, AviatorObject operand)
Get token from executing resultprivate boolean
isLiteralOperand(Token<?> token, Token.TokenType tokenType, int index, java.util.Map<java.lang.Integer,DelegateToken.DelegateTokenType> index2DelegateType)
void
onAdd(Token<?> lookhead)
void
onAndLeft(Token<?> lookhead)
void
onAndRight(Token<?> lookhead)
void
onArray(Token<?> lookhead)
void
onArrayIndexEnd(Token<?> lookhead)
void
onArrayIndexStart(Token<?> lookhead)
void
onAssignment(Token<?> lookhead)
void
onBitAnd(Token<?> lookhead)
void
onBitNot(Token<?> lookhead)
void
onBitOr(Token<?> lookhead)
void
onBitXor(Token<?> lookhead)
void
onConstant(Token<?> lookhead)
void
onDiv(Token<?> lookhead)
void
onEq(Token<?> lookhead)
void
onExponent(Token<?> lookhead)
void
onGe(Token<?> lookhead)
void
onGt(Token<?> lookhead)
void
onJoinLeft(Token<?> lookhead)
void
onJoinRight(Token<?> lookhead)
void
onLambdaArgument(Token<?> lookhead, FunctionParam param)
void
onLambdaBodyEnd(Token<?> lookhead)
void
onLambdaBodyStart(Token<?> lookhead)
void
onLambdaDefineStart(Token<?> lookhead)
void
onLe(Token<?> lookhead)
void
onLt(Token<?> lookhead)
void
onMatch(Token<?> lookhead)
void
onMethodInvoke(Token<?> lookhead)
void
onMethodName(Token<?> lookhead)
void
onMethodParameter(Token<?> lookhead)
void
onMod(Token<?> lookhead)
void
onMult(Token<?> lookhead)
void
onNeg(Token<?> lookhead)
void
onNeq(Token<?> lookhead)
void
onNot(Token<?> lookhead)
void
onShiftLeft(Token<?> lookhead)
void
onShiftRight(Token<?> lookhead)
void
onSub(Token<?> lookhead)
void
onTernaryBoolean(Token<?> lookhead)
void
onTernaryEnd(Token<?> lookhead)
void
onTernaryLeft(Token<?> lookhead)
void
onTernaryRight(Token<?> lookhead)
void
onUnsignedShiftRight(Token<?> lookhead)
private void
printTokenList()
void
setParser(Parser parser)
-
-
-
Field Detail
-
codeGen
private final EvalCodeGenerator codeGen
-
tokenList
private final java.util.List<Token<?>> tokenList
-
lambdaGenerator
private LambdaGenerator lambdaGenerator
-
parentCodeGenerator
private CodeGenerator parentCodeGenerator
-
instance
private final AviatorEvaluatorInstance instance
-
parser
private Parser parser
-
compileEnv
private Env compileEnv
-
lambdaBootstraps
private java.util.Map<java.lang.String,LambdaFunctionBootstrap> lambdaBootstraps
Compiled lambda functions.
-
sourceFile
private final java.lang.String sourceFile
-
-
Constructor Detail
-
OptimizeCodeGenerator
public OptimizeCodeGenerator(AviatorEvaluatorInstance instance, java.lang.String sourceFile, java.lang.ClassLoader classLoader, java.io.OutputStream traceOutStream)
-
-
Method Detail
-
getCompileEnv
private Env getCompileEnv()
-
setParser
public void setParser(Parser parser)
- Specified by:
setParser
in interfaceCodeGenerator
-
getIndex2DelegateTypeMap
private java.util.Map<java.lang.Integer,DelegateToken.DelegateTokenType> getIndex2DelegateTypeMap(OperatorType opType)
-
execute
private int execute()
-
executeOperator
private int executeOperator(java.util.Map<java.lang.Integer,DelegateToken.DelegateTokenType> index2DelegateType, Token<?> operatorToken, OperatorType operatorType, int operatorIndex, int operandCount)
-
isLiteralOperand
private boolean isLiteralOperand(Token<?> token, Token.TokenType tokenType, int index, java.util.Map<java.lang.Integer,DelegateToken.DelegateTokenType> index2DelegateType)
-
getTokenFromOperand
private Token<?> getTokenFromOperand(Token<?> operatorToken, AviatorObject operand)
Get token from executing result- Parameters:
operand
-- Returns:
-
compactTokenList
private void compactTokenList()
-
getAviatorObjectFromToken
private AviatorObject getAviatorObjectFromToken(Token<?> lookhead)
-
getResult
public Expression getResult(boolean unboxObject)
- Specified by:
getResult
in interfaceCodeGenerator
-
callASM
private void callASM(java.util.Map<java.lang.String,VariableMeta> variables, java.util.Map<java.lang.String,java.lang.Integer> methods, java.util.Set<Token<?>> constants)
-
printTokenList
private void printTokenList()
-
onAdd
public void onAdd(Token<?> lookhead)
- Specified by:
onAdd
in interfaceCodeGenerator
-
onAndLeft
public void onAndLeft(Token<?> lookhead)
- Specified by:
onAndLeft
in interfaceCodeGenerator
-
onAndRight
public void onAndRight(Token<?> lookhead)
- Specified by:
onAndRight
in interfaceCodeGenerator
-
onConstant
public void onConstant(Token<?> lookhead)
- Specified by:
onConstant
in interfaceCodeGenerator
-
onDiv
public void onDiv(Token<?> lookhead)
- Specified by:
onDiv
in interfaceCodeGenerator
-
onArrayIndexStart
public void onArrayIndexStart(Token<?> lookhead)
- Specified by:
onArrayIndexStart
in interfaceCodeGenerator
-
onAssignment
public void onAssignment(Token<?> lookhead)
- Specified by:
onAssignment
in interfaceCodeGenerator
-
onArrayIndexEnd
public void onArrayIndexEnd(Token<?> lookhead)
- Specified by:
onArrayIndexEnd
in interfaceCodeGenerator
-
onArray
public void onArray(Token<?> lookhead)
- Specified by:
onArray
in interfaceCodeGenerator
-
onEq
public void onEq(Token<?> lookhead)
- Specified by:
onEq
in interfaceCodeGenerator
-
onGe
public void onGe(Token<?> lookhead)
- Specified by:
onGe
in interfaceCodeGenerator
-
onGt
public void onGt(Token<?> lookhead)
- Specified by:
onGt
in interfaceCodeGenerator
-
onJoinLeft
public void onJoinLeft(Token<?> lookhead)
- Specified by:
onJoinLeft
in interfaceCodeGenerator
-
onJoinRight
public void onJoinRight(Token<?> lookhead)
- Specified by:
onJoinRight
in interfaceCodeGenerator
-
onLe
public void onLe(Token<?> lookhead)
- Specified by:
onLe
in interfaceCodeGenerator
-
onLt
public void onLt(Token<?> lookhead)
- Specified by:
onLt
in interfaceCodeGenerator
-
onMatch
public void onMatch(Token<?> lookhead)
- Specified by:
onMatch
in interfaceCodeGenerator
-
onMethodInvoke
public void onMethodInvoke(Token<?> lookhead)
- Specified by:
onMethodInvoke
in interfaceCodeGenerator
-
onMethodName
public void onMethodName(Token<?> lookhead)
- Specified by:
onMethodName
in interfaceCodeGenerator
-
onMethodParameter
public void onMethodParameter(Token<?> lookhead)
- Specified by:
onMethodParameter
in interfaceCodeGenerator
-
onLambdaDefineStart
public void onLambdaDefineStart(Token<?> lookhead)
- Specified by:
onLambdaDefineStart
in interfaceCodeGenerator
-
onLambdaArgument
public void onLambdaArgument(Token<?> lookhead, FunctionParam param)
- Specified by:
onLambdaArgument
in interfaceCodeGenerator
-
onLambdaBodyStart
public void onLambdaBodyStart(Token<?> lookhead)
- Specified by:
onLambdaBodyStart
in interfaceCodeGenerator
-
onLambdaBodyEnd
public void onLambdaBodyEnd(Token<?> lookhead)
- Specified by:
onLambdaBodyEnd
in interfaceCodeGenerator
-
onMod
public void onMod(Token<?> lookhead)
- Specified by:
onMod
in interfaceCodeGenerator
-
onMult
public void onMult(Token<?> lookhead)
- Specified by:
onMult
in interfaceCodeGenerator
-
onExponent
public void onExponent(Token<?> lookhead)
- Specified by:
onExponent
in interfaceCodeGenerator
-
onNeg
public void onNeg(Token<?> lookhead)
- Specified by:
onNeg
in interfaceCodeGenerator
-
onNeq
public void onNeq(Token<?> lookhead)
- Specified by:
onNeq
in interfaceCodeGenerator
-
onNot
public void onNot(Token<?> lookhead)
- Specified by:
onNot
in interfaceCodeGenerator
-
onSub
public void onSub(Token<?> lookhead)
- Specified by:
onSub
in interfaceCodeGenerator
-
onTernaryBoolean
public void onTernaryBoolean(Token<?> lookhead)
- Specified by:
onTernaryBoolean
in interfaceCodeGenerator
-
onTernaryLeft
public void onTernaryLeft(Token<?> lookhead)
- Specified by:
onTernaryLeft
in interfaceCodeGenerator
-
onTernaryRight
public void onTernaryRight(Token<?> lookhead)
- Specified by:
onTernaryRight
in interfaceCodeGenerator
-
onTernaryEnd
public void onTernaryEnd(Token<?> lookhead)
- Specified by:
onTernaryEnd
in interfaceCodeGenerator
-
onBitAnd
public void onBitAnd(Token<?> lookhead)
- Specified by:
onBitAnd
in interfaceCodeGenerator
-
onBitNot
public void onBitNot(Token<?> lookhead)
- Specified by:
onBitNot
in interfaceCodeGenerator
-
onBitOr
public void onBitOr(Token<?> lookhead)
- Specified by:
onBitOr
in interfaceCodeGenerator
-
onShiftLeft
public void onShiftLeft(Token<?> lookhead)
- Specified by:
onShiftLeft
in interfaceCodeGenerator
-
onShiftRight
public void onShiftRight(Token<?> lookhead)
- Specified by:
onShiftRight
in interfaceCodeGenerator
-
onUnsignedShiftRight
public void onUnsignedShiftRight(Token<?> lookhead)
- Specified by:
onUnsignedShiftRight
in interfaceCodeGenerator
-
onBitXor
public void onBitXor(Token<?> lookhead)
- Specified by:
onBitXor
in interfaceCodeGenerator
-
-