// returns a list consisting of two-element-lists consisting of // (actual cbr-param, formal cbr-param) (Variable objects) public List<List<Variable>> getCbrParams() { if (this.cbrParamList != null) { return this.cbrParamList; } List<TacActualParameter> actualParams = this.paramList; List<TacFormalParameter> formalParams = this.getCallee().getParams(); this.cbrParamList = new LinkedList<>(); Iterator<TacActualParameter> actualIter = actualParams.iterator(); Iterator<TacFormalParameter> formalIter = formalParams.iterator(); while (actualIter.hasNext()) { TacActualParameter actualParam = actualIter.next(); TacFormalParameter formalParam = formalIter.next(); // if this is a cbr-param... if (actualParam.isReference() || formalParam.isReference()) { // the actual part of a cbr-param must always be a variable if (!(actualParam.getPlace() instanceof Variable)) { throw new RuntimeException("Error in the PHP file!"); } Variable actualVar = (Variable) actualParam.getPlace(); Variable formalVar = formalParam.getVariable(); // check for unsupported features; // none of the variables must be an array or etc.; // in such a case, ignore it and continue with the next cbr-param boolean supported = AliasAnalysis.isSupported(formalVar, actualVar, true, this.getOriginalLineNumber()); if (!supported) { continue; } List<Variable> pairList = new LinkedList<>(); pairList.add(actualVar); pairList.add(formalVar); cbrParamList.add(pairList); } } return cbrParamList; }