| 2687 | } |
| 2688 | |
| 2689 | BfFileInstance* BfModule::GetFileFromNode(BfAstNode* astNode) |
| 2690 | { |
| 2691 | auto bfParser = astNode->GetSourceData()->ToParserData(); |
| 2692 | if (bfParser == NULL) |
| 2693 | return NULL; |
| 2694 | |
| 2695 | BfFileInstance** fileInstancePtr = NULL; |
| 2696 | |
| 2697 | if (!mFileInstanceMap.TryAdd(bfParser, NULL, &fileInstancePtr)) |
| 2698 | { |
| 2699 | return *fileInstancePtr; |
| 2700 | } |
| 2701 | else |
| 2702 | { |
| 2703 | // It's possible two parsers have the same file name (ie: mNextRevision) |
| 2704 | BfFileInstance** namedFileInstancePtr = NULL; |
| 2705 | if (!mNamedFileInstanceMap.TryAdd(bfParser->mFileName, NULL, &namedFileInstancePtr)) |
| 2706 | { |
| 2707 | auto bfFileInstance = *namedFileInstancePtr; |
| 2708 | *fileInstancePtr = bfFileInstance; |
| 2709 | return bfFileInstance; |
| 2710 | } |
| 2711 | |
| 2712 | int slashPos = (int)bfParser->mFileName.LastIndexOf(DIR_SEP_CHAR); |
| 2713 | |
| 2714 | auto bfFileInstance = new BfFileInstance(); |
| 2715 | *fileInstancePtr = bfFileInstance; |
| 2716 | *namedFileInstancePtr = bfFileInstance; |
| 2717 | |
| 2718 | bfFileInstance->mPrevPosition.mFileInstance = bfFileInstance; |
| 2719 | bfFileInstance->mParser = bfParser; |
| 2720 | |
| 2721 | BfLogSysM("GetFileFromNode new file. Mod: %p FileInstance: %p Parser: %p\n", this, bfFileInstance, bfParser); |
| 2722 | |
| 2723 | if ((mBfIRBuilder != NULL) && (mBfIRBuilder->DbgHasLineInfo())) |
| 2724 | { |
| 2725 | String fileName = bfParser->mFileName; |
| 2726 | |
| 2727 | for (int i = 0; i < (int)fileName.length(); i++) |
| 2728 | { |
| 2729 | if (fileName[i] == DIR_SEP_CHAR_ALT) |
| 2730 | fileName[i] = DIR_SEP_CHAR; |
| 2731 | } |
| 2732 | |
| 2733 | bfFileInstance->mDIFile = mBfIRBuilder->DbgCreateFile(fileName.Substring(slashPos + 1), fileName.Substring(0, BF_MAX(slashPos, 0)), bfParser->mMD5Hash); |
| 2734 | } |
| 2735 | return bfFileInstance; |
| 2736 | } |
| 2737 | } |
| 2738 | |
| 2739 | void BfModule::UpdateSrcPos(BfAstNode* astNode, BfSrcPosFlags flags, int debugLocOffset) |
| 2740 | { |
no test coverage detected