| 2441 | } |
| 2442 | |
| 2443 | BeMCSymbol* BeCOFFObject::GetSymbol(BeValue* value, bool allowCreate) |
| 2444 | { |
| 2445 | /*auto itr = mSymbolMap.find(value); |
| 2446 | if (itr != mSymbolMap.end()) |
| 2447 | return itr->second;*/ |
| 2448 | BeMCSymbol** symbolPtr = NULL; |
| 2449 | if (mSymbolMap.TryGetValue(value, &symbolPtr)) |
| 2450 | return *symbolPtr; |
| 2451 | |
| 2452 | if (allowCreate) |
| 2453 | { |
| 2454 | if (auto func = BeValueDynCast<BeFunction>(value)) |
| 2455 | { |
| 2456 | mFuncWorkList.Add(func); |
| 2457 | |
| 2458 | BeMCSymbol* sym = mSymbols.Alloc(); |
| 2459 | sym->mType = func->GetType(); |
| 2460 | sym->mName = func->mName; |
| 2461 | sym->mIsStatic = func->mLinkageType == BfIRLinkageType_Internal; |
| 2462 | if (func->mBlocks.empty()) |
| 2463 | { |
| 2464 | sym->mSymKind = BeMCSymbolKind_External; |
| 2465 | } |
| 2466 | else |
| 2467 | { |
| 2468 | sym->mSymKind = BeMCSymbolKind_Function; |
| 2469 | } |
| 2470 | sym->mIdx = (int)mSymbols.size() - 1; |
| 2471 | sym->mBeFunction = func; |
| 2472 | |
| 2473 | mSymbolMap[func] = sym; |
| 2474 | return sym; |
| 2475 | } |
| 2476 | } |
| 2477 | |
| 2478 | return NULL; |
| 2479 | } |
| 2480 | |
| 2481 | BeMCSymbol* BeCOFFObject::GetSymbolRef(const StringImpl& name) |
| 2482 | { |