-
Notifications
You must be signed in to change notification settings - Fork 31
Add type info interfaces motivated by numba #534
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
clang-tidy made some suggestions
lib/Interpreter/CppInterOp.cpp
Outdated
@@ -1573,8 +1609,17 @@ namespace Cpp { | |||
return QT.getNonReferenceType().getAsOpaquePtr(); | |||
} | |||
|
|||
TCppType_t GetUnqualifiedType(TCppType_t type) { | |||
if (!type) | |||
return 0; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
warning: use nullptr [modernize-use-nullptr]
return 0; | |
return nullptr; |
lib/Interpreter/CppInterOp.cpp
Outdated
TCppType_t GetUnderlyingType(TCppType_t type) | ||
{ | ||
if (!type) | ||
return 0; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
warning: use nullptr [modernize-use-nullptr]
return 0; | |
return nullptr; |
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #534 +/- ##
==========================================
- Coverage 79.18% 79.08% -0.11%
==========================================
Files 9 9
Lines 3853 3882 +29
==========================================
+ Hits 3051 3070 +19
- Misses 802 812 +10
🚀 New features to boost your workflow:
|
We should add tests. |
Would love to have this. What's needed before we can merge? |
Hi! I have some unittests that I haven't pushed yet, and this PR should be ready to go. Will do in the next few hours once I have access to a laptop |
@@ -509,15 +509,40 @@ namespace Cpp { | |||
/// Checks if the provided parameter is a Plain Old Data Type (POD). | |||
CPPINTEROP_API bool IsPODType(TCppType_t type); | |||
|
|||
/// Checks if type has an integer representation | |||
CPPINTEROP_API bool IsIntegerType(TCppType_t type); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Probably we should have an enum instead of many interfaces..
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
clang-tidy made some suggestions
lib/Interpreter/CppInterOp.cpp
Outdated
return QT->hasSignedIntegerRepresentation(); | ||
} | ||
|
||
bool IsUnsignedIntegerType(TCppType_t type) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
warning: redundant boolean literal in conditional return statement [readability-simplify-boolean-expr]
lib/Interpreter/CppInterOp.cpp:1565:
- if (llvm::isa_and_nonnull<VarDecl>(D)) {
- return true;
- }
-
- return false;
+ return llvm::isa_and_nonnull<VarDecl>(D);
lib/Interpreter/CppInterOp.cpp
Outdated
bool IsFloatingType(TCppType_t type) { | ||
QualType QT = QualType::getFromOpaquePtr(type); | ||
return QT->hasFloatingRepresentation(); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
warning: do not use C-style cast to convert between unrelated types [cppcoreguidelines-pro-type-cstyle-cast]
auto *D = (clang::Decl *) var;
^
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
clang-tidy made some suggestions
897cfb3
to
05eb59c
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
clang-tidy made some suggestions
Adds tests for IsSameType, IsIntegerType, IsFloatingType, GetUnqualifiedType, IsVoidPointerType
@@ -578,6 +579,22 @@ CPPINTEROP_API bool IsRecordType(TCppType_t type); | |||
/// Checks if the provided parameter is a Plain Old Data Type (POD). | |||
CPPINTEROP_API bool IsPODType(TCppType_t type); | |||
|
|||
/// Checks if type has an integer representation | |||
CPPINTEROP_API bool IsIntegerType(TCppType_t type, | |||
Signedness s = Signedness::kAny); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Signedness s = Signedness::kAny); | |
Signedness *s = nullptr); |
We should probably take that as an output argument because you can have an integer type that's of different signedness and is still an int type.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, what you describe will happen if the caller specifies signed or unsigned. I was of the opinion that if you call this by default (for kAny) it will return true if the qualtype has an integer representation which should cover the above scenario
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, but if you don't know the underlying signedness you will get a false
telling you that this is not an integral type. This assumes that you will call the function couple of times before you figure everything out. My proposal is to enable this in a single call.
clang-tidy review says "All clean, LGTM! 👍" |
IsSameType
used for matching arg types between numba inferred signatures and CppOverloads in cppyy.IsIntegral
andIsFloating
that check if types have the respective representations. Used in the case of Numba where scoring based on reflection is required.will add tests