Skip to content

Commit 6faec13

Browse files
committed
fix: always include some CCFileSourceLocation when creating diagnostic in CCASTUnit
1 parent 3b2fe1e commit 6faec13

3 files changed

Lines changed: 57 additions & 32 deletions

File tree

Source/CoreCompiler/CCASTUnit.cpp

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,27 @@ Boolean _CCASTUnitRefillDiagnosticArray(CCMutableASTUnitRef mutableUnit)
150150
{
151151
type = CCDiagnosticTypeInternal;
152152
location = CCSourceLocationZero;
153+
154+
std::string originalInputFileName = mutableUnit->unit->getOriginalSourceFileName().str();
155+
if(originalInputFileName.empty())
156+
{
157+
continue;
158+
}
159+
160+
const char *originalInputFileNameCStr = originalInputFileName.c_str();
161+
162+
CFStringRef filePath = CFStringCreateWithCString(allocator, originalInputFileNameCStr, kCFStringEncodingUTF8);
163+
if(filePath == nullptr)
164+
{
165+
continue;
166+
}
167+
168+
fileURL = CFURLCreateWithFileSystemPath(allocator, filePath, kCFURLPOSIXPathStyle, false); /* its never a directory if it's a CCFileRef */
169+
CFRelease(filePath);
170+
if(fileURL == nullptr)
171+
{
172+
continue;
173+
}
153174
}
154175

155176
message = CFStringCreateWithCString(allocator, diag.getMessage().str().c_str(), kCFStringEncodingUTF8);
@@ -176,7 +197,11 @@ Boolean _CCASTUnitRefillDiagnosticArray(CCMutableASTUnitRef mutableUnit)
176197
break;
177198
}
178199

179-
CCFileSourceLocationRef fileSourceLocation = CCFileSourceLocationCreate(allocator, fileURL, location);
200+
CCFileSourceLocationRef fileSourceLocation = nullptr;
201+
if(fileURL != nil)
202+
{
203+
fileSourceLocation = CCFileSourceLocationCreate(allocator, fileURL, location);
204+
}
180205
CCDiagnosticRef result = CCDiagnosticCreate(allocator, type, level, fileSourceLocation, message);
181206
if(fileURL)
182207
{
@@ -198,8 +223,8 @@ CCMutableASTUnitRef CCASTUnitCreateMutable(CFAllocatorRef allocator)
198223
return (CCMutableASTUnitRef)_CFRuntimeCreateInstance(allocator, CCASTUnitGetTypeID(), sizeof(opaque_ccastunit) - sizeof(CFRuntimeBase), nullptr);
199224
}
200225

201-
CC_CXX_EXPORT CCASTUnitRef CCASTUnitCreateWithASTUnit(CFAllocatorRef allocator,
202-
std::unique_ptr<clang::ASTUnit> astUnit)
226+
CCASTUnitRef CCASTUnitCreateWithASTUnit(CFAllocatorRef allocator,
227+
std::unique_ptr<clang::ASTUnit> astUnit)
203228
{
204229
if(astUnit == nullptr)
205230
{
@@ -399,8 +424,8 @@ void CCASTUnitSetArguments(CCMutableASTUnitRef mutableUnit,
399424
mutableUnit->BaseArgs.push_back("--end-no-unused-arguments");
400425
}
401426

402-
CC_EXPORT void CCASTUnitSetFile(CCMutableASTUnitRef mutableUnit,
403-
CCFileRef file)
427+
void CCASTUnitSetFile(CCMutableASTUnitRef mutableUnit,
428+
CCFileRef file)
404429
{
405430
assert(mutableUnit->isMutable);
406431

Source/CoreCompiler/CCFile.c

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ static void CCFileFinalize(CFTypeRef cf)
4444
{
4545
CCFileRef fileRef = (CCFileRef)cf;
4646
CFRelease(fileRef->fileURL);
47-
47+
4848
if(fileRef->unsavedData)
4949
{
5050
CFRelease(fileRef->unsavedData);
@@ -106,17 +106,17 @@ CCFileRef CCFileCreate(CFAllocatorRef allocator,
106106
CFURLRef fileURL)
107107
{
108108
assert(fileURL != nil);
109-
109+
110110
CCFileRef file = (CCFileRef)_CFRuntimeCreateInstance(allocator, CCFileGetTypeID(), sizeof(struct opaque_ccfile) - sizeof(CFRuntimeBase), NULL);
111111
if(file == nil)
112112
{
113113
return nil;
114114
}
115-
115+
116116
file->isMutable = false;
117117
file->fileURL = CFRetain(fileURL);
118118
file->unsavedData = nil;
119-
119+
120120
return file;
121121
}
122122

@@ -128,7 +128,7 @@ CCFileRef CCFileCreateWithFilePath(CFAllocatorRef allocator,
128128
{
129129
return nil;
130130
}
131-
131+
132132
CCFileRef file = CCFileCreate(allocator, fileURL);
133133
CFRelease(fileURL);
134134
return file;
@@ -143,7 +143,7 @@ CCFileRef CCFileCreateWithCString(CFAllocatorRef allocator,
143143
{
144144
return nil;
145145
}
146-
146+
147147
CCFileRef file = CCFileCreateWithFilePath(allocator, filePath);
148148
CFRelease(filePath);
149149
return file;
@@ -153,17 +153,17 @@ CCMutableFileRef CCFileCreateMutable(CFAllocatorRef allocator,
153153
CFURLRef fileURL)
154154
{
155155
assert(fileURL != nil);
156-
156+
157157
CCMutableFileRef mutableFile = (CCMutableFileRef)_CFRuntimeCreateInstance(allocator, CCFileGetTypeID(), sizeof(struct opaque_ccfile) - sizeof(CFRuntimeBase), NULL);
158158
if(mutableFile == nil)
159159
{
160160
return nil;
161161
}
162-
162+
163163
mutableFile->isMutable = true;
164164
mutableFile->fileURL = CFRetain(fileURL);
165165
mutableFile->unsavedData = nil;
166-
166+
167167
return mutableFile;
168168
}
169169

@@ -172,10 +172,10 @@ CCMutableFileRef CCFileCreateMutableWithUnsavedData(CFAllocatorRef allocator,
172172
CFDataRef data)
173173
{
174174
assert(data != nil);
175-
175+
176176
CCMutableFileRef mutableFile = CCFileCreateMutable(allocator, fileURL);
177177
mutableFile->unsavedData = CFRetain(data);
178-
178+
179179
return mutableFile;
180180
}
181181

@@ -184,16 +184,16 @@ static CCFileRef _CCFileCreateCopy(CFAllocatorRef allocator,
184184
bool isMutable)
185185
{
186186
assert(file != nil);
187-
187+
188188
CCFileRef newFile = (CCFileRef)_CFRuntimeCreateInstance(allocator, CCFileGetTypeID(), sizeof(struct opaque_ccfile) - sizeof(CFRuntimeBase), NULL);
189189
if(newFile == nil)
190190
{
191191
return nil;
192192
}
193-
193+
194194
newFile->isMutable = isMutable;
195195
newFile->fileURL = CFRetain(file->fileURL);
196-
196+
197197
if(file->unsavedData == nil)
198198
{
199199
newFile->unsavedData = nil;
@@ -202,7 +202,7 @@ static CCFileRef _CCFileCreateCopy(CFAllocatorRef allocator,
202202
{
203203
newFile->unsavedData = CFRetain(file->unsavedData);
204204
}
205-
205+
206206
return newFile;
207207
}
208208

@@ -225,10 +225,10 @@ CCFileType CCFileGetType(CCFileRef file)
225225
{
226226
return CCFileTypeUnknown;
227227
}
228-
228+
229229
/* FIXME: get header types later by project indexing */
230230
CCFileType type = CCFileTypeUnknown;
231-
231+
232232
if(CFEqual(CFSTR("c"), extension))
233233
{
234234
type = CCFileTypeC;
@@ -267,7 +267,7 @@ CCFileType CCFileGetType(CCFileRef file)
267267
{
268268
type = CCFileTypeObject;
269269
}
270-
270+
271271
CFRelease(extension);
272272
return type;
273273
}
@@ -299,25 +299,25 @@ void CCFileSetFileURL(CCMutableFileRef mutableFile,
299299
CFURLRef fileURL)
300300
{
301301
assert(fileURL != nil && mutableFile->isMutable);
302-
302+
303303
if(mutableFile->fileURL)
304304
{
305305
CFRelease(mutableFile->fileURL);
306306
}
307-
307+
308308
mutableFile->fileURL = CFRetain(fileURL);
309309
}
310310

311311
void CCFileSetUnsavedData(CCMutableFileRef mutableFile,
312312
CFDataRef data)
313313
{
314314
assert(mutableFile->isMutable);
315-
315+
316316
if(mutableFile->unsavedData)
317317
{
318318
CFRelease(mutableFile->unsavedData);
319319
}
320-
320+
321321
if(data == nil)
322322
{
323323
/* seems to be now upto date with disk content? */

Source/CoreCompiler/CCFileSourceLocation.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,12 @@ static Boolean CCFileSourceLocationEqual(CFTypeRef cf1,
5050
{
5151
CCFileSourceLocationRef fileSourceLocationRef1 = (CCFileSourceLocationRef)cf1;
5252
CCFileSourceLocationRef fileSourceLocationRef2 = (CCFileSourceLocationRef)cf2;
53-
53+
5454
if(!CFEqual(fileSourceLocationRef1->fileURL, fileSourceLocationRef2->fileURL))
5555
{
5656
return false;
5757
}
58-
58+
5959
return CCSourceLocationEqualToLocation(fileSourceLocationRef1->location, fileSourceLocationRef2->location);
6060
}
6161

@@ -107,16 +107,16 @@ CCFileSourceLocationRef CCFileSourceLocationCreate(CFAllocatorRef allocator,
107107
CCSourceLocation location)
108108
{
109109
assert(fileURL != nil);
110-
110+
111111
CCFileSourceLocationRef fileSourceLocation = (CCFileSourceLocationRef)_CFRuntimeCreateInstance(allocator, CCFileSourceLocationGetTypeID(), sizeof(struct opaque_ccfilesourcelocation) - sizeof(CFRuntimeBase), NULL);
112112
if(fileSourceLocation == nil)
113113
{
114114
return nil;
115115
}
116-
116+
117117
fileSourceLocation->fileURL = CFRetain(fileURL);
118118
fileSourceLocation->location = location;
119-
119+
120120
return fileSourceLocation;
121121
}
122122

0 commit comments

Comments
 (0)