Package org.aspectj.weaver

Examples of org.aspectj.weaver.IntMap


    InstructionList ret = new InstructionList();
    // we have on stack all the arguments for the ADVICE call.
    // we have in frame somewhere all the arguments for the non-advice call.
   
    BcelVar[] adviceVars = munger.getExposedStateAsBcelVars(true);
    IntMap proceedMap =  makeProceedArgumentMap(adviceVars);

//    System.out.println(proceedMap + " for " + this);
//    System.out.println(argVarList);
   
    ResolvedType[] proceedParamTypes =
      world.resolve(munger.getSignature().getParameterTypes());
    // remove this*JoinPoint* as arguments to proceed
    if (munger.getBaseParameterCount()+1 < proceedParamTypes.length) {
      int len = munger.getBaseParameterCount()+1;
      ResolvedType[] newTypes = new ResolvedType[len];
      System.arraycopy(proceedParamTypes, 0, newTypes, 0, len);
      proceedParamTypes = newTypes;
    }

    //System.out.println("stateTypes: " + Arrays.asList(stateTypes));
    BcelVar[] proceedVars =
      Utility.pushAndReturnArrayOfVars(proceedParamTypes, ret, fact, localAdviceMethod);

    Type[] stateTypes = callbackMethod.getArgumentTypes();
//    System.out.println("stateTypes: " + Arrays.asList(stateTypes));
   
    for (int i=0, len=stateTypes.length; i < len; i++) {
            Type stateType = stateTypes[i];
            ResolvedType stateTypeX = BcelWorld.fromBcel(stateType).resolve(world);
            if (proceedMap.hasKey(i)) {
              //throw new RuntimeException("unimplemented");
        proceedVars[proceedMap.get(i)].appendLoadAndConvert(ret, fact, stateTypeX);
            } else {
        ((BcelVar) argVarList.get(i)).appendLoad(ret, fact);
            }
    }
       
View Full Code Here


   

    private IntMap makeProceedArgumentMap(BcelVar[] adviceArgs) {
        //System.err.println("coming in with " + Arrays.asList(adviceArgs));

        IntMap ret = new IntMap();
        for(int i = 0, len = adviceArgs.length; i < len; i++) {
            BcelVar v = (BcelVar) adviceArgs[i];
            if (v == null) continue; // XXX we don't know why this is required
            int pos = v.getPositionInAroundState();
            if (pos >= 0) {  // need this test to avoid args bound via cflow
              ret.put(pos, i);
            }
        }
        //System.err.println("returning " + ret);
       
        return ret;
View Full Code Here


    /** make a map from old frame location to new frame location.  Any unkeyed frame
     * location picks out a copied local */
    private IntMap makeRemap() {
        IntMap ret = new IntMap(5);
        int reti = 0;
    if (thisVar != null) {
      ret.put(0, reti++)// thisVar guaranteed to be 0
    }
        if (targetVar != null && targetVar != thisVar) {
            ret.put(targetVar.getSlot(), reti++);
        }           
        for (int i = 0, len = argVars.length; i < len; i++) {
            ret.put(argVars[i].getSlot(), reti);
            reti += argVars[i].getType().getSize();           
        }
        if (thisJoinPointVar != null) {
          ret.put(thisJoinPointVar.getSlot(), reti++);
        }
        // we not only need to put the arguments, we also need to remap their
        // aliases, which we so helpfully put into temps at the beginning of this join
        // point.
        if (! getKind().argsOnStack()) {
          int oldi = 0;
          int newi = 0;
          // if we're passing in a this and we're not argsOnStack we're always
          // passing in a target too
          if (arg0HoldsThis()) { ret.put(0, 0); oldi++; newi+=1; }
          //assert targetVar == thisVar
          for (int i = 0; i < getArgCount(); i++) {
              UnresolvedType type = getArgType(i);
        ret.put(oldi, newi);
              oldi += type.getSize();
              newi += type.getSize();
          }  
        }     
       
View Full Code Here

TOP

Related Classes of org.aspectj.weaver.IntMap

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.