Package dk.brics.xact.analysis.flowgraph

Examples of dk.brics.xact.analysis.flowgraph.Variable


    cfg.addStatement(stm);
    context.putHotspot(box, stm);
  }
 
  public Variable translateExpr(Value expr) {
    Variable v = applyTo(expr, null);
    assert v != null;
    return v;
  }
View Full Code Here


  public Variable caseInstanceFieldRef(InstanceFieldRef v, Object question) {
    return assumeTypeAnnotation(context.getFieldSchemaType(v.getField()), context.getField(v.getField()));
  }
  @Override
  public Variable caseNullConstant(NullConstant v, Object question) {
    Variable dest = makevar();
    //cfg.addStatement(new EmptyStm(dest, false, context.getCurrentOrigin()));
    TemplateConstant cnst = new TemplateConstant("", new HashMap<String,String>(), context.getCurrentOrigin());
    cnst.setXML(parseXML(cnst.getTemplate(), context.getCurrentOrigin()));
    cfg.addStatement(new ConstStm(dest, cnst, context.getCurrentOrigin()));
    return dest;
View Full Code Here

    cfg.addStatement(new ConstStm(dest, cnst, context.getCurrentOrigin()));
    return dest;
  }
  @Override
  public Variable caseArrayRef(ArrayRef v, Object question) {
    Variable dest = makevar();
    cfg.addStatement(new ArrayReadStm(dest, translateExpr(v.getBase()), context.getCurrentOrigin()));
    return dest;
  }
View Full Code Here

  public Variable caseCastExpr(CastExpr v, Object question) {
    return translateExpr(v.getOp());
  }
  @Override
  public Variable caseNewArrayExpr(NewArrayExpr v, Object question) {
    Variable var = makevar();
    cfg.addStatement(new ConstStm(var, emptyConstant, context.getCurrentOrigin()));
    return var;
  }
View Full Code Here

    cfg.addStatement(new ConstStm(var, emptyConstant, context.getCurrentOrigin()));
    return var;
  }
  @Override
  public Variable caseNewMultiArrayExpr(NewMultiArrayExpr v, Object question) {
    Variable var = makevar();
    cfg.addStatement(new ConstStm(var, emptyConstant, context.getCurrentOrigin()));
    return var;
  }
View Full Code Here

    cfg.addStatement(new ConstStm(var, emptyConstant, context.getCurrentOrigin()));
    return var;
  }
  @Override
  public Variable caseNewExpr(NewExpr v, Object question) {
    Variable var = makevar();
    cfg.addStatement(new EmptyStm(var, false, context.getCurrentOrigin()));
    return var;
  }
View Full Code Here

  public Variable defaultExpr(Object v, Object question) {
    return makevar();
  }
  private Variable handleInvoke(InvokeExpr v) {
      this.invokedMethodName = v.getMethod().getName();
    Variable var = handleHardcodedInvoke(v);
    if (var != null) {
      return var;
    }
    Variable[] arguments = new Variable[v.getArgCount()];
    for (int i=0; i<v.getArgCount(); i++) {
View Full Code Here

        }
       
        // find the toXML() method
        SootClass createdClass = v.getMethod().getDeclaringClass();
        SootMethod toxmlMethod = context.getHierarchy().resolveConcreteDispatch(createdClass, Scene.v().getMethod("<dk.brics.xact.ToXMLable: dk.brics.xact.XML toXML()>"));
        Variable base = getLocal(v.getBase());
       
        // toXML() defined in external code?
        if (!toxmlMethod.getDeclaringClass().isApplicationClass()) {
            // ask config to resolve it
            String typename = config.resolveToXML(toxmlMethod);
View Full Code Here

  }

    @SuppressWarnings("unchecked")
    @Override
    public Variable caseThisRef(ThisRef v, Object question) {
        Variable var = makevar();
        SootClass currentClass = context.getCurrentClass();
        if (config.hasExternalSubtypes(currentClass)) {
            cfg.addStatement(new UnknownStm(var, context.getCurrentOrigin()));
            return var;
        }
View Full Code Here

  }
  public void caseIdentityStmt(IdentityStmt s) {
    assignment(s);
  }
  private void assignment(DefinitionStmt s) {
    Variable right = translateExpr(s.getRightOp());
    if (s.getLeftOp() instanceof ArrayRef) {
      // A[X] = B
      ArrayRef array = (ArrayRef)s.getLeftOp();
      if (((ArrayType)array.getBase().getType()).getElementType() instanceof RefLikeType) {
        Variable left = context.getLocal(((Local)array.getBase()).getName());
        cfg.addStatement(new ArrayWriteStm(left, right, context.getCurrentOrigin()));
        // also write possible strings we can get from converting the argument using toString()
        cfg.addStatement(addStringStatement(new ArrayWriteStringStm(left, null, context.getCurrentOrigin()), s.getRightOpBox()));
      } else {
        // ignore..
      }

    } else if (s.getLeftOp() instanceof FieldRef) {
      // A.field = B
      SootField sootField = ((FieldRef)s.getLeftOp()).getField();
      Variable field = context.getField(sootField);
      checkTypeAnnotation(context.getFieldSchemaType(sootField), right);
      cfg.startBranch();
      cfg.addStatement(new VarStm(field, right, context.getCurrentOrigin()));
      cfg.useBranch();
      cfg.useBranch(); // <-- second branch is empty for weak update
      cfg.endBranch();

    } else if (s.getLeftOp() instanceof Local) {
      // var = B
      Variable left = context.getLocal(((Local)s.getLeftOp()).getName());
      cfg.addStatement(new VarStm(left, right, context.getCurrentOrigin()));

    } else {
      throw new RuntimeException("Unexpected assignment to " + s.getLeftOp().getClass());
    }
View Full Code Here

TOP

Related Classes of dk.brics.xact.analysis.flowgraph.Variable

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.