// returns true if it is ok to further unroll the procedure // otherwise, the procedure is not inlined at the call site protected int GetInlineCount(Implementation impl) { Contract.Requires(impl != null); Contract.Requires(impl.Proc != null); string/*!*/ procName = impl.Name; Contract.Assert(procName != null); int c; if (recursiveProcUnrollMap.TryGetValue(procName, out c)) { return c; } c = -1; // TryGetValue above always overwrites c impl.CheckIntAttribute("inline", ref c); // procedure attribute overrides implementation impl.Proc.CheckIntAttribute("inline", ref c); recursiveProcUnrollMap[procName] = c; return c; }