| 51 | } |
| 52 | |
| 53 | absl::optional<Macro> MacroRegistry::FindMacro(absl::string_view name, |
| 54 | size_t arg_count, |
| 55 | bool receiver_style) const { |
| 56 | // <function>:<argument_count>:<receiver_style> |
| 57 | if (name.empty() || absl::StrContains(name, ':')) { |
| 58 | return absl::nullopt; |
| 59 | } |
| 60 | // Try argument count specific key first. |
| 61 | auto key = absl::StrCat(name, ":", arg_count, ":", |
| 62 | receiver_style ? "true" : "false"); |
| 63 | if (auto it = macros_.find(key); it != macros_.end()) { |
| 64 | return it->second; |
| 65 | } |
| 66 | // Next try variadic. |
| 67 | key = absl::StrCat(name, ":*:", receiver_style ? "true" : "false"); |
| 68 | if (auto it = macros_.find(key); it != macros_.end()) { |
| 69 | return it->second; |
| 70 | } |
| 71 | return absl::nullopt; |
| 72 | } |
| 73 | |
| 74 | std::vector<Macro> MacroRegistry::ListMacros() const { |
| 75 | std::vector<Macro> macros; |