コード例 #1
0
 @Override
 public void translate(
     TranslateStack stack,
     List<GraphTargetItem> output,
     HashMap<Integer, String> regNames,
     HashMap<String, GraphTargetItem> variables,
     HashMap<String, GraphTargetItem> functions,
     int staticOperation,
     String path) {
   GraphTargetItem value = stack.peek();
   stack.push(new DuplicateItem(this, value));
   value.getMoreSrc().add(new GraphSourceItemPos(this, 0));
 }
コード例 #2
0
  @Override
  public void translate(
      TranslateStack stack,
      List<GraphTargetItem> output,
      HashMap<Integer, String> regNames,
      HashMap<String, GraphTargetItem> variables,
      HashMap<String, GraphTargetItem> functions,
      int staticOperation,
      String path) {
    GraphTargetItem value = stack.pop();
    RegisterNumber rn = new RegisterNumber(registerNumber);
    if (regNames.containsKey(registerNumber)) {
      rn.name = regNames.get(registerNumber);
    }
    value.getMoreSrc().add(new GraphSourceItemPos(this, 0));
    if (variables.containsKey("__register" + registerNumber)) {
      if (variables.get("__register" + registerNumber) instanceof TemporaryRegister) {
        variables.remove("__register" + registerNumber);
      }
    }
    boolean define = !variables.containsKey("__register" + registerNumber);
    if (regNames.containsKey(registerNumber)) {
      define = false;
    }
    variables.put("__register" + registerNumber, value);
    if (value instanceof DirectValueActionItem) {
      if (((DirectValueActionItem) value).value instanceof RegisterNumber) {
        if (((RegisterNumber) ((DirectValueActionItem) value).value).number == registerNumber) {
          stack.push(value);
          return;
        }
      }
    }
    if (value instanceof StoreRegisterActionItem) {
      if (((StoreRegisterActionItem) value).register.number == registerNumber) {
        stack.push(value);
        return;
      }
    }

    if (value instanceof IncrementActionItem) {
      GraphTargetItem obj = ((IncrementActionItem) value).object;
      if (!stack.isEmpty()) {
        if (stack.peek().valueEquals(obj)) {
          stack.pop();
          stack.push(new PostIncrementActionItem(this, obj));
          stack.push(obj);
          return;
        }
      }
    }
    if (value instanceof DecrementActionItem) {
      GraphTargetItem obj = ((DecrementActionItem) value).object;
      if (!stack.isEmpty()) {
        if (stack.peek().valueEquals(obj)) {
          stack.pop();
          stack.push(new PostDecrementActionItem(this, obj));
          stack.push(obj);
          return;
        }
      }
    }
    stack.push(new StoreRegisterActionItem(this, rn, value, define));
  }