(key: string, build: () => RegExp[])
| 1186 | } |
| 1187 | |
| 1188 | function memoPatterns(key: string, build: () => RegExp[]): RegExp[] { |
| 1189 | const hit = PATTERN_MEMO.get(key); |
| 1190 | if (hit) return hit; |
| 1191 | const patterns = build(); |
| 1192 | if (PATTERN_MEMO.size >= PATTERN_MEMO_CAP) { |
| 1193 | const oldest = PATTERN_MEMO.keys().next().value; |
| 1194 | if (oldest !== undefined) PATTERN_MEMO.delete(oldest); |
| 1195 | } |
| 1196 | PATTERN_MEMO.set(key, patterns); |
| 1197 | return patterns; |
| 1198 | } |
| 1199 | |
| 1200 | export function localReceiverTypePatterns(language: Language, r: string): RegExp[] { |
| 1201 | return memoPatterns(`${language}|${r}`, () => buildLocalReceiverTypePatterns(language, r)); |
no test coverage detected