(key: string, build: () => RegExp[])
| 1174 | } |
| 1175 | |
| 1176 | function memoPatterns(key: string, build: () => RegExp[]): RegExp[] { |
| 1177 | const hit = PATTERN_MEMO.get(key); |
| 1178 | if (hit) return hit; |
| 1179 | const patterns = build(); |
| 1180 | if (PATTERN_MEMO.size >= PATTERN_MEMO_CAP) { |
| 1181 | const oldest = PATTERN_MEMO.keys().next().value; |
| 1182 | if (oldest !== undefined) PATTERN_MEMO.delete(oldest); |
| 1183 | } |
| 1184 | PATTERN_MEMO.set(key, patterns); |
| 1185 | return patterns; |
| 1186 | } |
| 1187 | |
| 1188 | export function localReceiverTypePatterns(language: Language, r: string): RegExp[] { |
| 1189 | return memoPatterns(`${language}|${r}`, () => buildLocalReceiverTypePatterns(language, r)); |
no test coverage detected