@Override public CheckTypesResult checkExprTypeBounds() { CheckTypesResult result = new CheckTypesResult(); result.addMinTypeExprent(index, VarType.VARTYPE_BYTECHAR); result.addMaxTypeExprent(index, VarType.VARTYPE_INT); return result; }
public void calculateVarTypes(RootStatement root, DirectGraph graph) { setInitVars(root); resetExprentTypes(graph); //noinspection StatementWithEmptyBody while (!processVarTypes(graph)) ; }
public void setVarVersions(RootStatement root, VarVersionsProcessor previousVersionsProcessor) { SSAConstructorSparseEx ssa = new SSAConstructorSparseEx(); ssa.splitVariables(root, method); FlattenStatementsHelper flattenHelper = new FlattenStatementsHelper(); DirectGraph graph = flattenHelper.buildDirectGraph(root); mergePhiVersions(ssa, graph); typeProcessor.calculateVarTypes(root, graph); simpleMerge(typeProcessor, graph, method); // FIXME: advanced merging eliminateNonJavaTypes(typeProcessor); setNewVarIndices(typeProcessor, graph, previousVersionsProcessor); }
public void setVarVersions(RootStatement root) { VarVersionsProcessor oldProcessor = varVersions; varVersions = new VarVersionsProcessor(method, methodDescriptor); varVersions.setVarVersions(root, oldProcessor); }
public VarVersionPair getVarVersionPair() { return new VarVersionPair(index, version); }
public VarVersionsProcessor(StructMethod mt, MethodDescriptor md) { method = mt; typeProcessor = new VarTypeProcessor(mt, md); }
public VarType getVarType(VarVersionPair pair) { return typeProcessor.getVarType(pair); }
public void setVarType(VarVersionPair pair, VarType type) { typeProcessor.setVarType(pair, type); }
public VarType getVarType(VarVersionPair pair) { return varVersions == null ? null : varVersions.getVarType(pair); }
public void setVarType(VarVersionPair pair, VarType type) { varVersions.setVarType(pair, type); }
public int getVarFinal(VarVersionPair pair) { return varVersions == null ? VarTypeProcessor.VAR_FINAL : varVersions.getVarFinal(pair); }
public void setVarFinal(VarVersionPair pair, int finalType) { varVersions.setVarFinal(pair, finalType); }
public Integer getVarOriginalIndex(int index) { if (varVersions == null) { return null; } return varVersions.getMapOriginalVarIndices().get(index); }
@Override public int hashCode() { return fieldKey.hashCode() + varPair.hashCode(); } }
@Override public boolean equals(Object o) { if (o == this) return true; if (!(o instanceof VarFieldPair)) return false; VarFieldPair pair = (VarFieldPair)o; return fieldKey.equals(pair.fieldKey) && varPair.equals(pair.varPair); }
public VarType getVarType() { VarType vt = null; if (processor != null) { vt = processor.getVarType(getVarVersionPair()); } if (vt == null || (varType != null && varType.type != CodeConstants.TYPE_UNKNOWN)) { vt = varType; } return vt == null ? VarType.VARTYPE_UNKNOWN : vt; }
public VarVersionNode createNode(VarVersionPair ver) { VarVersionNode node; nodes.addWithKey(node = new VarVersionNode(ver.var, ver.version), ver); return node; }
@Override public CheckTypesResult checkExprTypeBounds() { CheckTypesResult result = new CheckTypesResult(); if (exitType == EXIT_RETURN && retType.type != CodeConstants.TYPE_VOID) { result.addMinTypeExprent(value, VarType.getMinTypeInFamily(retType.typeFamily)); result.addMaxTypeExprent(value, retType); } return result; }
private static Exprent isReplaceableVar(Exprent exprent, Map<VarVersionPair, Exprent> mapVarValues) { Exprent dest = null; if (exprent.type == Exprent.EXPRENT_VAR) { VarExprent var = (VarExprent)exprent; dest = mapVarValues.get(new VarVersionPair(var)); } return dest; }