private IEnumerable <Variable> AvailableLinearVars(Absy absy) { HashSet <Variable> availableVars = new HashSet <Variable>(linearTypeChecker.AvailableLinearVars(absyMap[absy])); // A bit hackish, since GlobalVariableLayerRange and LocalVariableIntroLayer return maximum layer range // respectively minimum layer if called on non-global respectively non-local variable. availableVars.RemoveWhere(v => !civlTypeChecker.GlobalVariableLayerRange(v).Contains(layerNum) || layerNum < civlTypeChecker.LocalVariableIntroLayer(v) ); return(availableVars); }
private IEnumerable <Variable> AvailableLinearLocalVars(Absy absy) { if (absy is Implementation impl) { return(FilterInParams((MapAbsy(impl) as Implementation).InParams)); } if (absy is Procedure proc) { return(FilterInParams((MapAbsy(proc) as Procedure).InParams)); } return(linearTypeChecker.AvailableLinearVars(MapAbsy(absy)).Where(v => !(v is GlobalVariable) && civlTypeChecker.LocalVariableLayerRange(v).Contains(layerNum))); }