Skip to content
Snippets Groups Projects
ArrayTypeRewrite.jrag 1.04 KiB
Newer Older
  • Learn to ignore specific revisions
  • Anders Nilsson's avatar
    Anders Nilsson committed
    aspect ArrayRewrite {
    
      syn boolean Dim.isVariable() {
        for (int i = 0 ; i < getNumExp() ; i++) {
          if (getExp(i) instanceof VariableSize) {
    	return true;
          }	
        }
        return false;
      }
    
      rewrite ParseArrayType {
        when (! getDim(0).isVariable()) 
        to FixedArrayType  { 
          if (getNumDim() == 1) {
            return new FixedArrayType(getType(), 
    				  getDim(0).getExpList());
          } else {
            List l = new List();
            for (int i = 1 ; i < getNumDim() ; i++) {
    	  l.add(getDim(i));
            }
            return new FixedArrayType(new ParseArrayType(getType(), l), 
    				  getDim(0).getExpList());
          }
        }
        when (getDim(0).isVariable()) 
        to VariableArrayType  { 
          if (getNumDim() == 1) {
            return new VariableArrayType(getType(), 
    				     getDim(0).getExpList());
          } else {
            List l = new List();
            for (int i = 1 ; i < getNumDim() ; i++) {
    	  l.add(getDim(i));
            }
            return new VariableArrayType(new ParseArrayType(getType(), l), 
    				     getDim(0).getExpList());
          }
        }
      }
    
    }