Class JavaCAst2IRTranslator
java.lang.Object
com.ibm.wala.cast.tree.visit.CAstVisitor<AstTranslator.WalkContext>
com.ibm.wala.cast.ir.translator.AstTranslator
com.ibm.wala.cast.java.translator.JavaCAst2IRTranslator
- All Implemented Interfaces:
ArrayOpHandler, TranslatorToIR
-
Nested Class Summary
Nested classes/interfaces inherited from class AstTranslator
AstTranslator.AbstractScope, AstTranslator.AbstractSymbol, AstTranslator.AstCFG, AstTranslator.AstLexicalInformation, AstTranslator.CodeEntityContext, AstTranslator.FinalCAstSymbol, AstTranslator.IncipientCFG, AstTranslator.InternalCAstSymbol, AstTranslator.PreBasicBlock, AstTranslator.RootContext, AstTranslator.Scope, AstTranslator.ScopeType, AstTranslator.Symbol, AstTranslator.TypeContext, AstTranslator.UnwindState, AstTranslator.WalkContextNested classes/interfaces inherited from class CAstVisitor
CAstVisitor.Context -
Field Summary
Fields inherited from class AstTranslator
DEBUG_ALL, DEBUG_CFG, DEBUG_LEXICAL, DEBUG_NAMES, DEBUG_TOP, entity2ExposedNames, entity2WrittenNames, insts, loader, namedEntityResolverFields inherited from class CAstVisitor
currentPosition -
Constructor Summary
ConstructorsConstructorDescriptionJavaCAst2IRTranslator(ModuleEntry module, CAstEntity sourceFileEntity, JavaSourceLoaderImpl loader, StringFilter exclusions) -
Method Summary
Modifier and TypeMethodDescriptionprotected StringcomposeEntityName(AstTranslator.WalkContext parent, CAstEntity f) create the language-appropriate name for fprotected voiddeclareFunction(CAstEntity N, AstTranslator.WalkContext definingContext) declare a new function, represented by Nprotected TypeReferencefor a block that catches all exceptions, what is the root exception type that it can catch? E.g., for Java, java.lang.Throwableprotected voiddefineField(CAstEntity topEntity, AstTranslator.WalkContext definingContext, CAstEntity n) define a new field fieldEntity within topEntityprotected voiddefineFunction(CAstEntity N, AstTranslator.WalkContext definingContext, AbstractCFG<SSAInstruction, ? extends IBasicBlock<SSAInstruction>> cfg, SymbolTable symtab, boolean hasCatchBlock, Map<IBasicBlock<SSAInstruction>, TypeReference[]> caughtTypes, boolean hasMonitorOp, AstTranslator.AstLexicalInformation lexicalInfo, AstMethod.DebuggingInformation debugInfo) fully define a function.protected booleandefineType(CAstEntity type, AstTranslator.WalkContext wc) define a new (presumably nested) type.voiddoArrayRead(AstTranslator.WalkContext context, int result, int arrayValue, CAstNode arrayRefNode, int[] dimValues) generate IR for a CAst array read, updating context.cfg()voiddoArrayWrite(AstTranslator.WalkContext context, int arrayValue, CAstNode arrayRefNode, int[] dimValues, int rval) generate IR for a CAst array write, updating context.cfg()protected voiddoCall(AstTranslator.WalkContext context, CAstNode call, int result, int exception, CAstNode name, int receiver, int[] arguments) generate IR for a CAst method call expression, updating context.cfg()protected voiddoFieldRead(AstTranslator.WalkContext context, int result, int receiver, CAstNode elt, CAstNode parent) generate IR for a CAst field read, updating context.cfg()protected voiddoFieldWrite(AstTranslator.WalkContext context, int receiver, CAstNode elt, CAstNode parent, int rval) generate IR for a CAst field write, updating context.cfg()protected voiddoGlobalWrite(AstTranslator.WalkContext context, String name, TypeReference type, int rval) generate instructions for a write of a globalprotected voiddoMaterializeFunction(CAstNode n, AstTranslator.WalkContext context, int result, int exception, CAstEntity fn) generate IR for a CAst function expression, updating context.cfg()protected voiddoNewObject(AstTranslator.WalkContext context, CAstNode newNode, int result, Object type, int[] arguments) generate IR for a CAst new expression, updating context.cfg()protected voiddoPrimitive(int resultVal, AstTranslator.WalkContext context, CAstNode primitiveCall) generate IR for call modeling creation of primitive value, updating context.cfg()protected voiddoThrow(AstTranslator.WalkContext context, int exception) generate IR for a CAst throw expression, updating context.cfg()protected booleandoVisit(CAstNode n, AstTranslator.WalkContext wc, CAstVisitor<AstTranslator.WalkContext> visitor) Node processing hook; sub-classes are expected to override if they introduce new node types.protected CAstTypethe most-general exception type for the language being translatedprotected CAstSourcePositionMap.Position[]protected booleanIf this returns true, new global declarations get created for any attempt to access a non-existent variable (believe it or not, JavaScript actually does this!)protected voidleaveCast(CAstNode n, AstTranslator.WalkContext context, CAstVisitor<AstTranslator.WalkContext> visitor) Leave a Cast node.protected voidleaveInstanceOf(CAstNode n, AstTranslator.WalkContext context, CAstVisitor<AstTranslator.WalkContext> visitor) Leave an InstanceOf node.protected voidleaveThis(CAstNode n, AstTranslator.WalkContext c, CAstVisitor<AstTranslator.WalkContext> visitor) Leave a This node.loader()protected TypeReferenceprotected CAstTypetopType()the most-general type for the language being translatedvoidprotected booleancan lexical reads / writes access globals?protected booleandoes the language care about using type-appropriate default values? For Java, the answer is yes (ints should get a default value of 0, null for pointers, etc.).protected booleanvisitCast(CAstNode n, AstTranslator.WalkContext context, CAstVisitor<AstTranslator.WalkContext> visitor) Visit a Cast node.protected booleanvisitInstanceOf(CAstNode n, AstTranslator.WalkContext context, CAstVisitor<AstTranslator.WalkContext> visitor) Visit an InstanceOf node.Methods inherited from class AstTranslator
assignValue, closeFunctionEntity, doGlobalRead, doIsFieldDefined, doLexicallyScopedRead, doLexicallyScopedWrite, doLocalRead, doLocalWrite, doPrologue, enterEntity, getArgumentCount, getArgumentNames, getCodeContext, getIncludedEntity, getTypeForNode, handleUnspecifiedLiteralKey, hasSpecialUndeclaredVariables, ignoreName, initFunctionEntity, isExceptionLabel, leaveArrayLength, leaveArrayLiteral, leaveArrayLiteralInitElement, leaveArrayLiteralObject, leaveArrayRef, leaveArrayRefAssign, leaveArrayRefAssignOp, leaveAssert, leaveAssign, leaveBinaryExpr, leaveBlockExpr, leaveBlockExprAssign, leaveBlockExprAssignOp, leaveBlockStmt, leaveCall, leaveCatch, leaveConstant, leaveDeclStmt, leaveEachElementGet, leaveEachElementHasNext, leaveEcho, leaveEmpty, leaveFieldEntity, leaveFileEntity, leaveFunctionEntity, leaveFunctionExpr, leaveFunctionStmt, leaveGetCaughtException, leaveGlobalEntity, leaveGoto, leaveIfExpr, leaveIfExprCondition, leaveIfExprTrueClause, leaveIfgoto, leaveIfStmt, leaveIfStmtCondition, leaveIfStmtTrueClause, leaveInclude, leaveIsDefinedExpr, leaveLabelStmt, leaveLocalScope, leaveLoop, leaveLoopHeader, leaveNew, leaveObjectLiteral, leaveObjectLiteralFieldInit, leaveObjectRef, leaveObjectRefAssign, leaveObjectRefAssignOp, leavePrimitive, leaveReturn, leaveScriptEntity, leaveSpecialParentScope, leaveSuper, leaveSwitch, leaveSwitchValue, leaveThrow, leaveTry, leaveTryBlock, leaveTypeEntity, leaveTypeLiteralExpr, leaveUnaryExpr, leaveUnwind, leaveVar, leaveVarAssign, leaveVarAssignOp, leaveVoid, leaveYield, liftDeclarationsForLexicalScoping, makeCodeContext, makeFileContext, makeGlobalRef, makeLocalContext, makeNameMap, makeScriptScope, makeSpecialParentContext, makeTypeContext, makeTypeScope, makeUnwindContext, processAssignOp, processFunctionExpr, processIf, setDefaultValue, topLevelFunctionsInGlobalScope, translate, translate, translateBinaryOpcode, translateConditionOpcode, translateUnaryOpcode, visitArrayLength, visitArrayLiteral, visitArrayRef, visitAssert, visitAssign, visitBinaryExpr, visitBlockExpr, visitBlockStmt, visitCall, visitCatch, visitConstant, visitDeclStmt, visitEachElementGet, visitEachElementHasNext, visitEcho, visitEmpty, visitFieldEntity, visitFileEntity, visitFunctionEntity, visitFunctionExpr, visitFunctionStmt, visitGetCaughtException, visitGlobalEntity, visitGoto, visitIfExpr, visitIfgoto, visitIfStmt, visitIsDefinedExpr, visitLabelStmt, visitLocalScope, visitLoop, visitMacroEntity, visitNew, visitObjectLiteral, visitObjectRef, visitPrimitive, visitReturn, visitScriptEntity, visitSpecialParentScope, visitSuper, visitSwitch, visitThis, visitThrow, visitTry, visitTypeEntity, visitTypeLiteralExpr, visitUnaryExpr, visitUnwind, visitVar, visitVoid, visitYield, walkEntitiesMethods inherited from class CAstVisitor
doVisitArrayRefNode, doVisitAssignNodes, doVisitEntity, enterNode, getCurrentPosition, getParent, leaveArrayLiteralAssign, leaveClassStmt, leaveEntity, leaveForIn, leaveMacroEntity, leaveMacroVar, leaveNode, leaveObjectLiteralAssign, postProcessEntity, postProcessNode, setParent, visit, visitAllChildren, visitArrayLiteralAssign, visitArrayRefAssign, visitArrayRefAssignOp, visitAssignNodes, visitBlockExprAssign, visitBlockExprAssignOp, visitChildren, visitClassStmt, visitEntities, visitEntity, visitForIn, visitInclude, visitMacroVar, visitNode, visitObjectLiteralAssign, visitObjectRefAssign, visitObjectRefAssignOp, visitScopedEntities, visitScopedEntities, visitVarAssign, visitVarAssignOp
-
Constructor Details
-
JavaCAst2IRTranslator
public JavaCAst2IRTranslator(ModuleEntry module, CAstEntity sourceFileEntity, JavaSourceLoaderImpl loader, StringFilter exclusions)
-
-
Method Details
-
translate
public void translate() -
sourceFileEntity
-
loader
-
useDefaultInitValues
protected boolean useDefaultInitValues()Description copied from class:AstTranslatordoes the language care about using type-appropriate default values? For Java, the answer is yes (ints should get a default value of 0, null for pointers, etc.). For JavaScript, the answer is no, as any variable can hold the value 'undefined'.- Specified by:
useDefaultInitValuesin classAstTranslator
-
hasImplicitGlobals
protected boolean hasImplicitGlobals()Description copied from class:AstTranslatorIf this returns true, new global declarations get created for any attempt to access a non-existent variable (believe it or not, JavaScript actually does this!)- Overrides:
hasImplicitGlobalsin classAstTranslator
-
defaultCatchType
Description copied from class:AstTranslatorfor a block that catches all exceptions, what is the root exception type that it can catch? E.g., for Java, java.lang.Throwable- Specified by:
defaultCatchTypein classAstTranslator
-
makeType
- Specified by:
makeTypein classAstTranslator
-
treatGlobalsAsLexicallyScoped
protected boolean treatGlobalsAsLexicallyScoped()Description copied from class:AstTranslatorcan lexical reads / writes access globals?- Specified by:
treatGlobalsAsLexicallyScopedin classAstTranslator
-
doThrow
Description copied from class:AstTranslatorgenerate IR for a CAst throw expression, updating context.cfg()- Specified by:
doThrowin classAstTranslator
-
doArrayRead
public void doArrayRead(AstTranslator.WalkContext context, int result, int arrayValue, CAstNode arrayRefNode, int[] dimValues) Description copied from class:AstTranslatorgenerate IR for a CAst array read, updating context.cfg()- Specified by:
doArrayReadin interfaceArrayOpHandler- Specified by:
doArrayReadin classAstTranslator
-
doArrayWrite
public void doArrayWrite(AstTranslator.WalkContext context, int arrayValue, CAstNode arrayRefNode, int[] dimValues, int rval) Description copied from class:AstTranslatorgenerate IR for a CAst array write, updating context.cfg()- Specified by:
doArrayWritein interfaceArrayOpHandler- Specified by:
doArrayWritein classAstTranslator
-
doFieldRead
protected void doFieldRead(AstTranslator.WalkContext context, int result, int receiver, CAstNode elt, CAstNode parent) Description copied from class:AstTranslatorgenerate IR for a CAst field read, updating context.cfg()- Specified by:
doFieldReadin classAstTranslator
-
doFieldWrite
protected void doFieldWrite(AstTranslator.WalkContext context, int receiver, CAstNode elt, CAstNode parent, int rval) Description copied from class:AstTranslatorgenerate IR for a CAst field write, updating context.cfg()- Specified by:
doFieldWritein classAstTranslator
-
doMaterializeFunction
protected void doMaterializeFunction(CAstNode n, AstTranslator.WalkContext context, int result, int exception, CAstEntity fn) Description copied from class:AstTranslatorgenerate IR for a CAst function expression, updating context.cfg()- Specified by:
doMaterializeFunctionin classAstTranslator
-
doNewObject
protected void doNewObject(AstTranslator.WalkContext context, CAstNode newNode, int result, Object type, int[] arguments) Description copied from class:AstTranslatorgenerate IR for a CAst new expression, updating context.cfg()- Specified by:
doNewObjectin classAstTranslator
-
doCall
protected void doCall(AstTranslator.WalkContext context, CAstNode call, int result, int exception, CAstNode name, int receiver, int[] arguments) Description copied from class:AstTranslatorgenerate IR for a CAst method call expression, updating context.cfg()- Specified by:
doCallin classAstTranslator
-
doGlobalWrite
protected void doGlobalWrite(AstTranslator.WalkContext context, String name, TypeReference type, int rval) Description copied from class:AstTranslatorgenerate instructions for a write of a global- Overrides:
doGlobalWritein classAstTranslator
-
defineField
protected void defineField(CAstEntity topEntity, AstTranslator.WalkContext definingContext, CAstEntity n) Description copied from class:AstTranslatordefine a new field fieldEntity within topEntity- Specified by:
defineFieldin classAstTranslator
-
declareFunction
Description copied from class:AstTranslatordeclare a new function, represented by N- Specified by:
declareFunctionin classAstTranslator
-
defineFunction
protected void defineFunction(CAstEntity N, AstTranslator.WalkContext definingContext, AbstractCFG<SSAInstruction, ? extends IBasicBlock<SSAInstruction>> cfg, SymbolTable symtab, boolean hasCatchBlock, Map<IBasicBlock<SSAInstruction>, TypeReference[]> caughtTypes, boolean hasMonitorOp, AstTranslator.AstLexicalInformation lexicalInfo, AstMethod.DebuggingInformation debugInfo) Description copied from class:AstTranslatorfully define a function. invoked after all the code of the function has been processed- Specified by:
defineFunctionin classAstTranslator
-
doPrimitive
protected void doPrimitive(int resultVal, AstTranslator.WalkContext context, CAstNode primitiveCall) Description copied from class:AstTranslatorgenerate IR for call modeling creation of primitive value, updating context.cfg()- Specified by:
doPrimitivein classAstTranslator
-
composeEntityName
Description copied from class:AstTranslatorcreate the language-appropriate name for f- Specified by:
composeEntityNamein classAstTranslator
-
defineType
Description copied from class:AstTranslatordefine a new (presumably nested) type. return true if type was successfully defined, false otherwise- Specified by:
defineTypein classAstTranslator
-
leaveThis
protected void leaveThis(CAstNode n, AstTranslator.WalkContext c, CAstVisitor<AstTranslator.WalkContext> visitor) Description copied from class:CAstVisitorLeave a This node.- Overrides:
leaveThisin classAstTranslator- Parameters:
n- the node to processc- a visitor-specific context
-
visitCast
protected boolean visitCast(CAstNode n, AstTranslator.WalkContext context, CAstVisitor<AstTranslator.WalkContext> visitor) Description copied from class:CAstVisitorVisit a Cast node.- Overrides:
visitCastin classCAstVisitor<AstTranslator.WalkContext>- Parameters:
n- the node to processcontext- a visitor-specific context- Returns:
- true if no further processing is needed
-
leaveCast
protected void leaveCast(CAstNode n, AstTranslator.WalkContext context, CAstVisitor<AstTranslator.WalkContext> visitor) Description copied from class:CAstVisitorLeave a Cast node.- Overrides:
leaveCastin classCAstVisitor<AstTranslator.WalkContext>- Parameters:
n- the node to processcontext- a visitor-specific context
-
visitInstanceOf
protected boolean visitInstanceOf(CAstNode n, AstTranslator.WalkContext context, CAstVisitor<AstTranslator.WalkContext> visitor) Description copied from class:CAstVisitorVisit an InstanceOf node.- Overrides:
visitInstanceOfin classCAstVisitor<AstTranslator.WalkContext>- Parameters:
n- the node to processcontext- a visitor-specific context- Returns:
- true if no further processing is needed
-
leaveInstanceOf
protected void leaveInstanceOf(CAstNode n, AstTranslator.WalkContext context, CAstVisitor<AstTranslator.WalkContext> visitor) Description copied from class:CAstVisitorLeave an InstanceOf node.- Overrides:
leaveInstanceOfin classCAstVisitor<AstTranslator.WalkContext>- Parameters:
n- the node to processcontext- a visitor-specific context
-
doVisit
protected boolean doVisit(CAstNode n, AstTranslator.WalkContext wc, CAstVisitor<AstTranslator.WalkContext> visitor) Description copied from class:CAstVisitorNode processing hook; sub-classes are expected to override if they introduce new node types.(Should invoke super.doVisit() for unprocessed nodes.)
- Overrides:
doVisitin classCAstVisitor<AstTranslator.WalkContext>- Returns:
- true if node was handled
-
topType
Description copied from class:AstTranslatorthe most-general type for the language being translated- Specified by:
topTypein classAstTranslator
-
exceptionType
Description copied from class:AstTranslatorthe most-general exception type for the language being translated- Specified by:
exceptionTypein classAstTranslator
-
getParameterPositions
- Specified by:
getParameterPositionsin classAstTranslator
-