| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // A general interface for filtering and only acting on classes in Chromium C++ | 5 // A general interface for filtering and only acting on classes in Chromium C++ |
| 6 // code. | 6 // code. |
| 7 | 7 |
| 8 #include "ChromeClassTester.h" | 8 #include "ChromeClassTester.h" |
| 9 | 9 |
| 10 #include <sys/param.h> | 10 #include <sys/param.h> |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 55 | 55 |
| 56 return true; // true means continue parsing. | 56 return true; // true means continue parsing. |
| 57 } | 57 } |
| 58 | 58 |
| 59 void ChromeClassTester::CheckTag(TagDecl* tag) { | 59 void ChromeClassTester::CheckTag(TagDecl* tag) { |
| 60 // We handle class types here where we have semantic information. We can only | 60 // We handle class types here where we have semantic information. We can only |
| 61 // check structs/classes/enums here, but we get a bunch of nice semantic | 61 // check structs/classes/enums here, but we get a bunch of nice semantic |
| 62 // information instead of just parsing information. | 62 // information instead of just parsing information. |
| 63 | 63 |
| 64 if (CXXRecordDecl* record = dyn_cast<CXXRecordDecl>(tag)) { | 64 if (CXXRecordDecl* record = dyn_cast<CXXRecordDecl>(tag)) { |
| 65 // If this is a POD or a class template or a type dependent on a | |
| 66 // templated class, assume there's no ctor/dtor/virtual method | |
| 67 // optimization that we can do. | |
| 68 if (record->isPOD() || | |
| 69 record->getDescribedClassTemplate() || | |
| 70 record->getTemplateSpecializationKind() || | |
| 71 record->isDependentType()) | |
| 72 return; | |
| 73 | |
| 74 if (InBannedNamespace(record)) | 65 if (InBannedNamespace(record)) |
| 75 return; | 66 return; |
| 76 | 67 |
| 77 SourceLocation record_location = record->getInnerLocStart(); | 68 SourceLocation record_location = record->getInnerLocStart(); |
| 78 if (InBannedDirectory(record_location)) | 69 if (InBannedDirectory(record_location)) |
| 79 return; | 70 return; |
| 80 | 71 |
| 81 // We sadly need to maintain a blacklist of types that violate these | 72 // We sadly need to maintain a blacklist of types that violate these |
| 82 // rules, but do so for good reason or due to limitations of this | 73 // rules, but do so for good reason or due to limitations of this |
| 83 // checker (i.e., we don't handle extern templates very well). | 74 // checker (i.e., we don't handle extern templates very well). |
| (...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 302 PresumedLoc ploc = source_manager.getPresumedLoc(spelling_location); | 293 PresumedLoc ploc = source_manager.getPresumedLoc(spelling_location); |
| 303 if (ploc.isInvalid()) { | 294 if (ploc.isInvalid()) { |
| 304 // If we're in an invalid location, we're looking at things that aren't | 295 // If we're in an invalid location, we're looking at things that aren't |
| 305 // actually stated in the source. | 296 // actually stated in the source. |
| 306 return false; | 297 return false; |
| 307 } | 298 } |
| 308 | 299 |
| 309 *filename = ploc.getFilename(); | 300 *filename = ploc.getFilename(); |
| 310 return true; | 301 return true; |
| 311 } | 302 } |
| OLD | NEW |