/// <summary> /// This function modifies the function /// </summary> public void RemoveImplicitRhoVariables(CatFxnType ft) { foreach (CatKind k in ft.GetChildKinds()) { if (k is CatFxnType) { RemoveImplicitRhoVariables(k as CatFxnType); } } if (!ft.GetCons().IsEmpty() && !ft.GetProd().IsEmpty()) { CatKind k1 = ft.GetCons().GetBottom(); CatKind k2 = ft.GetProd().GetBottom(); // Does both consumption and production share the same // stack variable at the bottom, if so, then we might have // an implicit Rho variables if (k1 is CatStackVar && k1.Equals(k2)) { // try removing the stack variable ft.GetCons().GetKinds().RemoveAt(0); ft.GetProd().GetKinds().RemoveAt(0); // is the variable used anywhere else? // if so, then we have to restore it // otherwise we leave it taken away if (DoesVarExist(k1)) { ft.GetCons().GetKinds().Insert(0, k1); ft.GetProd().GetKinds().Insert(0, k2); } } } }
/// <summary> /// This function modifies the function /// </summary> public void RemoveImplicitRhoVariables(CatFxnType ft) { foreach (CatKind k in ft.GetChildKinds()) if (k is CatFxnType) RemoveImplicitRhoVariables(k as CatFxnType); if (!ft.GetCons().IsEmpty() && !ft.GetProd().IsEmpty()) { CatKind k1 = ft.GetCons().GetBottom(); CatKind k2 = ft.GetProd().GetBottom(); // Does both consumption and production share the same // stack variable at the bottom, if so, then we might have // an implicit Rho variables if (k1 is CatStackVar && k1.Equals(k2)) { // try removing the stack variable ft.GetCons().GetKinds().RemoveAt(0); ft.GetProd().GetKinds().RemoveAt(0); // is the variable used anywhere else? // if so, then we have to restore it // otherwise we leave it taken away if (DoesVarExist(k1)) { ft.GetCons().GetKinds().Insert(0, k1); ft.GetProd().GetKinds().Insert(0, k2); } } } }