/** * Returns a deep clone of this {@link AObjectTypeIR} node. * @return a deep clone of this {@link AObjectTypeIR} node */ public AObjectTypeIR clone() { return new AObjectTypeIR( _sourceNode, _tag, _metaData, _optional, cloneNode(_namedInvType) ); }
/** * Called by the {@link AObjectTypeIR} node from {@link AObjectTypeIR#apply(IAnalysis)}. * @param node the calling {@link AObjectTypeIR} node */ public void caseAObjectTypeIR(AObjectTypeIR node) throws AnalysisException { _visitedNodes.add(node); inAObjectTypeIR(node); if(node.getNamedInvType() != null && !_visitedNodes.contains(node.getNamedInvType())) { node.getNamedInvType().apply(this); } outAObjectTypeIR(node); }
/** * Essentially this.toString().equals(o.toString()). **/ @Override public boolean equals(Object o) { if (o != null && o instanceof AObjectTypeIR) { return toString().equals(o.toString()); } return false; }
@Override public STypeIR defaultINode(INode node, IRInfo question) throws AnalysisException { if (node instanceof PType) { if (contains((PType) node, question)) { return new AObjectTypeIR(); } typeStack.push((PType) node); STypeIR result = super.defaultINode(node, question); typeStack.pop(); return result; } return super.defaultINode(node, question); }
private ACastUnaryExpIR consObjId() { String paramName = tracePrefixes.callStmMethodParamName(); AIdentifierVarExpIR idVar = assist.getInfo().getExpAssistant().consIdVar(paramName, new AObjectTypeIR()); ACastUnaryExpIR castVar = new ACastUnaryExpIR(); castVar.setType(assist.consClassType(traceEnclosingClass)); castVar.setExp(idVar); return castVar; }
public AMethodDeclIR consEqualMethodSignature(String paramName) { AMethodDeclIR equalsMethod = new AMethodDeclIR(); equalsMethod.setImplicit(false); AMethodTypeIR methodType = new AMethodTypeIR(); methodType.getParams().add(new AObjectTypeIR()); AExternalTypeIR returnType = new AExternalTypeIR(); returnType.setInfo(null); returnType.setName(IJavaConstants.BOOLEAN); methodType.setResult(returnType); equalsMethod.setAccess(IJavaConstants.PUBLIC); equalsMethod.setIsConstructor(false); equalsMethod.setName(IJavaConstants.EQUALS); equalsMethod.setMethodType(methodType); // Add the formal parameter "Object obj" to the method AFormalParamLocalParamIR formalParam = new AFormalParamLocalParamIR(); AIdentifierPatternIR idPattern = new AIdentifierPatternIR(); idPattern.setName(paramName); formalParam.setPattern(idPattern); AObjectTypeIR paramType = new AObjectTypeIR(); formalParam.setType(paramType); equalsMethod.getFormalParams().add(formalParam); return equalsMethod; }
/** * Creates a deep clone of this {@link AObjectTypeIR} node while putting all * old node-new node relations in the map {@code oldToNewMap}. * @param oldToNewMap the map filled with the old node-new node relation * @return a deep clone of this {@link AObjectTypeIR} node */ public AObjectTypeIR clone(Map<INode,INode> oldToNewMap) { AObjectTypeIR node = new AObjectTypeIR( _sourceNode, _tag, _metaData, _optional, cloneNode(_namedInvType, oldToNewMap) ); oldToNewMap.put(this, node); return node; }
/** * Called by the {@link AObjectTypeIR} node from {@link AObjectTypeIR#apply(IAnalysis)}. * @param node the calling {@link AObjectTypeIR} node */ public void caseAObjectTypeIR(AObjectTypeIR node, Q question) throws AnalysisException { _visitedNodes.add(node); inAObjectTypeIR(node, question); if(node.getNamedInvType() != null && !_visitedNodes.contains(node.getNamedInvType())) { node.getNamedInvType().apply(this, question); } outAObjectTypeIR(node, question); }
protected SStmIR handleVoidValueReturn(SStmIR stm) { AExternalTypeIR traceNodeClassType = new AExternalTypeIR(); traceNodeClassType.setName(traceTrans.getTracePrefixes().voidValueEnclosingClassName()); AExplicitVarExpIR voidValue = new AExplicitVarExpIR(); voidValue.setType(new AObjectTypeIR()); voidValue.setClassType(traceNodeClassType); voidValue.setIsLambda(false); voidValue.setIsLocal(true); voidValue.setName(traceTrans.getTracePrefixes().voidValueFieldName()); AReturnStmIR returnVoidVal = new AReturnStmIR(); returnVoidVal.setExp(voidValue); ABlockStmIR block = new ABlockStmIR(); block.getStatements().add(stm); block.getStatements().add(returnVoidVal); return block; }
/** * Called by the {@link AObjectTypeIR} node from {@link AObjectTypeIR#apply(IIsaAnalysis)}. * @param node the calling {@link AObjectTypeIR} node */ public void caseAObjectTypeIR(AObjectTypeIR node) throws AnalysisException { _visitedNodes.add(node); inAObjectTypeIR(node); if(node.getNamedInvType() != null && !_visitedNodes.contains(node.getNamedInvType())) { node.getNamedInvType().apply(this); } outAObjectTypeIR(node); }
private AMethodDeclIR consEqualsMethod(String name) { AIdentifierVarExpIR paramVar = transAssistant.getInfo().getExpAssistant().consIdVar(EQUALS_METHOD_PARAM, new AObjectTypeIR()); AClassTypeIR quoteClass = new AClassTypeIR(); quoteClass.setName(name); AIsOfClassExpIR instanceCheck = new AIsOfClassExpIR(); instanceCheck.setType(new ABoolBasicTypeIR()); instanceCheck.setExp(paramVar); instanceCheck.setCheckedType(quoteClass); AReturnStmIR checkReturned = new AReturnStmIR(); checkReturned.setExp(instanceCheck); AMethodDeclIR equalsMethod = consEqualMethodSignature(EQUALS_METHOD_PARAM); ABlockStmIR body = new ABlockStmIR(); body.getStatements().add(checkReturned); equalsMethod.setBody(body); return equalsMethod; }
/** * Called by the {@link AObjectTypeIR} node from {@link AObjectTypeIR#apply(IAnalysis)}. * @param node the calling {@link AObjectTypeIR} node */ public A caseAObjectTypeIR(AObjectTypeIR node, Q question) throws AnalysisException { _visitedNodes.add(node); A retVal = createNewReturnValue(node, question); mergeReturns(retVal,inAObjectTypeIR(node, question)); if(node.getNamedInvType() != null && !_visitedNodes.contains(node.getNamedInvType())) { mergeReturns(retVal,node.getNamedInvType().apply(this, question)); } mergeReturns(retVal,outAObjectTypeIR(node, question)); return retVal; }
public ABlockStmIR consVarFromCastedExp(ARecordDeclIR record, String formalParamName, String varName) throws AnalysisException { // Construct a local var in a statement: RecordType varName = ((RecordType) formalParamName); ARecordTypeIR recordType = new ARecordTypeIR(); recordType.setName(consTypeName(record)); AIdentifierPatternIR idPattern = new AIdentifierPatternIR(); idPattern.setName(varName); ACastUnaryExpIR cast = new ACastUnaryExpIR(); cast.setType(recordType.clone()); AIdentifierVarExpIR varExp = new AIdentifierVarExpIR(); varExp.setType(new AObjectTypeIR()); varExp.setName(formalParamName); varExp.setIsLocal(true); cast.setExp(varExp); AVarDeclIR localVar = info.getDeclAssistant().consLocalVarDecl(recordType, idPattern, cast); ABlockStmIR stm = new ABlockStmIR(); stm.getLocalDefs().add(localVar); return stm; }
/** * Called by the {@link AObjectTypeIR} node from {@link AObjectTypeIR#apply(IAnalysis)}. * @param node the calling {@link AObjectTypeIR} node */ public A caseAObjectTypeIR(AObjectTypeIR node) throws AnalysisException { _visitedNodes.add(node); A retVal = createNewReturnValue(node); mergeReturns(retVal,inAObjectTypeIR(node)); if(node.getNamedInvType() != null && !_visitedNodes.contains(node.getNamedInvType())) { mergeReturns(retVal,node.getNamedInvType().apply(this)); } mergeReturns(retVal,outAObjectTypeIR(node)); return retVal; }
protected AMethodDeclIR consExecuteMethod(SStmIR stm) { AMethodTypeIR methodType = new AMethodTypeIR(); methodType.setResult(new AObjectTypeIR()); AMethodDeclIR execMethod = new AMethodDeclIR(); execMethod.setImplicit(false); execMethod.setAbstract(false); execMethod.setAccess(IRConstants.PUBLIC); execMethod.setAsync(false); execMethod.setIsConstructor(false); execMethod.setMethodType(methodType); execMethod.setName(traceTrans.getTracePrefixes().callStmExecMethodNamePrefix()); execMethod.setStatic(false); ABlockStmIR body = new ABlockStmIR(); body.getStatements().add(makeInstanceCall(stm)); ensureStoreLookups(body); execMethod.setBody(body); return execMethod; }
public AIsOfClassExpIR consInstanceOf(ARecordDeclIR record, String formalParamName) { // Example: objRef instanceof classType ADefaultClassDeclIR enclosingClass = record.getAncestor(ADefaultClassDeclIR.class); ATypeNameIR typeName = new ATypeNameIR(); typeName.setDefiningClass(enclosingClass.getName()); typeName.setName(record.getName()); ARecordTypeIR recordType = new ARecordTypeIR(); recordType.setName(typeName); AIdentifierVarExpIR objRef = new AIdentifierVarExpIR(); objRef.setType(new AObjectTypeIR()); objRef.setIsLocal(true); objRef.setName(formalParamName); AIsOfClassExpIR instanceOfExp = new AIsOfClassExpIR(); instanceOfExp.setType(new ABoolBasicTypeIR()); instanceOfExp.setExp(objRef); instanceOfExp.setCheckedType(recordType); return instanceOfExp; }