================
@@ -525,14 +527,14 @@ class SymbolManager {
 
   static bool canSymbolicate(QualType T);
 
-  /// Make a unique symbol for MemRegion R according to its kind.
-  const SymbolRegionValue* getRegionValueSymbol(const TypedValueRegion* R);
+  template <typename T, typename... Args> const T *get(Args &&...args);
----------------
NagyDonat wrote:

> I was considering "make" briefly, but it is not entirely correct: this 
> function doesn't always make a `SymExpr`, sometimes it retrieves an existing 
> one matching the arguments. Besides, most of the replaced member functions 
> were called `get*`.

I would say that "`make`" is still reasonable in this case, because 
semantically it _makes the symbol_ which is determined by the arguments passed 
to it -- and it's just an implementation detail that symbols are immutable 
objects and the `make` call returns already created symbols instead of 
recreating them. However, I can accept a different name if you're opposed to 
"`make`".

> How do you like `findOrCreate`, `createIfNone`, `ensureExists`, `obtain`, 
> `acquire`, `procure`?

I think `acquire` would be the best choice, followed by something like 
`makeOrGet` or `findOrCreate`. IMO `obtain` suggests that we're getting the 
symbol from an external source, [`procure` has unfortunate connections to 
sexual services](https://www.merriam-webster.com/dictionary/procure) and in my 
opinion `createIfNone` and `ensureExists` don't clearly imply that these 
functions _return the symbol_ in addition to just initializing it in some 
internal table.

https://github.com/llvm/llvm-project/pull/121781
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to