| 507 | } |
| 508 | |
| 509 | ClangTranslationUnit* ClangHelper::GetTranslationUnit(const StringImpl& fileName, const char* headerPrefix, BfSourceClassifier::CharData* charData, int charLen, const char** args, int argCount, bool forceReparse, bool noTransUnit, bool noReparse) |
| 510 | { |
| 511 | ThreadProtect threadProtect(this); |
| 512 | |
| 513 | BfLogClang("%d Clang GetTranslationUnit %s\n", ::GetCurrentThreadId(), fileName.c_str()); |
| 514 | |
| 515 | uint32 options; |
| 516 | if (mIsForResolve) |
| 517 | { |
| 518 | options = CXTranslationUnit_DetailedPreprocessingRecord | |
| 519 | CXTranslationUnit_IncludeBriefCommentsInCodeCompletion | |
| 520 | CXTranslationUnit_Incomplete | |
| 521 | CXTranslationUnit_PrecompiledPreamble | |
| 522 | CXTranslationUnit_CacheCompletionResults; |
| 523 | } |
| 524 | else |
| 525 | { |
| 526 | options = CXTranslationUnit_SkipFunctionBodies | |
| 527 | CXTranslationUnit_PrecompiledPreamble | |
| 528 | CXTranslationUnit_Incomplete; |
| 529 | } |
| 530 | |
| 531 | //options = clang_defaultEditingTranslationUnitOptions(); |
| 532 | |
| 533 | std::map<String, ClangTranslationUnit, StrPathCompare> transMap; |
| 534 | auto itr2 = transMap.find(fileName); |
| 535 | |
| 536 | auto itr = mTranslationUnits.find(fileName); |
| 537 | if (itr == mTranslationUnits.end()) |
| 538 | { |
| 539 | if (fileName[fileName.length() - 1] == 'h') |
| 540 | { |
| 541 | BF_ASSERT(headerPrefix != NULL); |
| 542 | } |
| 543 | |
| 544 | const char* defaultArgs [] = { "-cc1", "-x", "c++", "-std=c++11", "-stdlib=libc++", "-target-cpu", "x86-64", "-target-feature", "+sse2", |
| 545 | "-triple", "x86_64-pc-windows-gnu", "-D__x86_64__", "-D__x86_64", "-MD"}; |
| 546 | if (args == NULL) |
| 547 | { |
| 548 | args = defaultArgs; |
| 549 | argCount = BF_ARRAY_COUNT(defaultArgs); |
| 550 | } |
| 551 | |
| 552 | ClangTranslationUnit transUnit; |
| 553 | |
| 554 | bool isHeader = headerPrefix != NULL; |
| 555 | |
| 556 | if (headerPrefix != NULL) |
| 557 | { |
| 558 | transUnit.mHeaderPrefix = _strdup(headerPrefix); |
| 559 | transUnit.mHeaderPrefixLen = (int)strlen(headerPrefix); |
| 560 | |
| 561 | transUnit.mCharLen = transUnit.mHeaderPrefixLen + 1; |
| 562 | transUnit.mChars = new char[transUnit.mCharLen + 1]; |
| 563 | transUnit.mChars[transUnit.mHeaderPrefixLen] = 0; |
| 564 | for (int i = 0; i < transUnit.mHeaderPrefixLen; i++) |
| 565 | transUnit.mChars[i] = headerPrefix[i]; |
| 566 |
no test coverage detected