| 266 | } |
| 267 | |
| 268 | expr Pointer::getValue(const char *name, const FunctionExpr &local_fn, |
| 269 | const FunctionExpr &nonlocal_fn, |
| 270 | const expr &ret_type, bool src_name) const { |
| 271 | if (!p.isValid()) |
| 272 | return {}; |
| 273 | |
| 274 | auto bid = getShortBid(); |
| 275 | expr non_local; |
| 276 | |
| 277 | if (auto val = nonlocal_fn.lookup(bid)) |
| 278 | non_local = *val; |
| 279 | else { |
| 280 | non_local = expr::mkUF(src_name ? local_name(m.state, name).c_str() : name, |
| 281 | { bid }, ret_type); |
| 282 | } |
| 283 | |
| 284 | if (auto local = local_fn(bid)) |
| 285 | return expr::mkIf(isLocal(), *local, non_local); |
| 286 | return non_local; |
| 287 | } |
| 288 | |
| 289 | expr Pointer::getBlockBaseAddress(bool simplify) const { |
| 290 | assert(Memory::observesAddresses()); |
no test coverage detected