-
Notifications
You must be signed in to change notification settings - Fork 41
[requires CppInterOp 1.9.0 release] Use Cpp::GetLanguageStandard to get language standard #461
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?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -101,33 +101,102 @@ namespace xcpp | |
| xeus::register_interpreter(this); | ||
| } | ||
|
|
||
| // FIXME: This function should be upstreamed to CppInterOp. See | ||
| // https://github.com/compiler-research/CppInterOp/issues/879 | ||
| static std::string get_stdopt() | ||
| { | ||
| // We need to find what's the C++ version the interpreter runs with. | ||
| const char* code = R"( | ||
| int __get_cxx_version () { | ||
| #if __cplusplus > 202302L | ||
| return 26; | ||
| #elif __cplusplus > 202002L | ||
| return 23; | ||
| #elif __cplusplus > 201703L | ||
| return 20; | ||
| #elif __cplusplus > 201402L | ||
| return 17; | ||
| #elif __cplusplus > 201103L || (defined(_WIN32) && _MSC_VER >= 1900) | ||
| return 14; | ||
| #elif __cplusplus >= 201103L | ||
| return 11; | ||
| #else | ||
| return 0; | ||
| #endif | ||
| } | ||
| __get_cxx_version () | ||
| )"; | ||
| auto cxx_version = Cpp::Evaluate(code); | ||
| return std::to_string(cxx_version); | ||
| } | ||
| switch (Cpp::GetLanguageStandard(nullptr)) | ||
| { | ||
| case Cpp::InterpreterLanguageStandard::c89: | ||
| return "c89"; | ||
| case Cpp::InterpreterLanguageStandard::c94: | ||
| return "c94"; | ||
| case Cpp::InterpreterLanguageStandard::gnu89: | ||
| return "gnu89"; | ||
| case Cpp::InterpreterLanguageStandard::c99: | ||
| return "c99"; | ||
| case Cpp::InterpreterLanguageStandard::gnu99: | ||
| return "gnu99"; | ||
| case Cpp::InterpreterLanguageStandard::c11: | ||
| return "c11"; | ||
| case Cpp::InterpreterLanguageStandard::gnu11: | ||
| return "gnu11"; | ||
| case Cpp::InterpreterLanguageStandard::c17: | ||
| return "c17"; | ||
| case Cpp::InterpreterLanguageStandard::gnu17: | ||
| return "gnu17"; | ||
| case Cpp::InterpreterLanguageStandard::c23: | ||
| return "c23"; | ||
| case Cpp::InterpreterLanguageStandard::gnu23: | ||
| return "gnu23"; | ||
| case Cpp::InterpreterLanguageStandard::c2y: | ||
| return "c2y"; | ||
| case Cpp::InterpreterLanguageStandard::gnu2y: | ||
| return "gnu2y"; | ||
| case Cpp::InterpreterLanguageStandard::cxx98: | ||
| return "cxx98"; | ||
| case Cpp::InterpreterLanguageStandard::gnucxx98: | ||
| return "gnucxx98"; | ||
| case Cpp::InterpreterLanguageStandard::cxx11: | ||
| return "cxx11"; | ||
| case Cpp::InterpreterLanguageStandard::gnucxx11: | ||
| return "gnucxx11"; | ||
| case Cpp::InterpreterLanguageStandard::cxx14: | ||
| return "cxx14"; | ||
| case Cpp::InterpreterLanguageStandard::gnucxx14: | ||
| return "gnucxx14"; | ||
| case Cpp::InterpreterLanguageStandard::cxx17: | ||
| return "cxx17"; | ||
| case Cpp::InterpreterLanguageStandard::gnucxx17: | ||
| return "gnucxx17"; | ||
| case Cpp::InterpreterLanguageStandard::cxx20: | ||
| return "cxx20"; | ||
| case Cpp::InterpreterLanguageStandard::gnucxx20: | ||
| return "gnucxx20"; | ||
| case Cpp::InterpreterLanguageStandard::cxx23: | ||
| return "cxx23"; | ||
| case Cpp::InterpreterLanguageStandard::gnucxx23: | ||
| return "gnucxx23"; | ||
| case Cpp::InterpreterLanguageStandard::cxx26: | ||
| return "cxx26"; | ||
| case Cpp::InterpreterLanguageStandard::gnucxx26: | ||
| return "gnucxx26"; | ||
| case Cpp::InterpreterLanguageStandard::opencl10: | ||
| return "opencl10"; | ||
| case Cpp::InterpreterLanguageStandard::opencl11: | ||
| return "opencl11"; | ||
| case Cpp::InterpreterLanguageStandard::opencl12: | ||
| return "opencl12"; | ||
| case Cpp::InterpreterLanguageStandard::opencl20: | ||
| return "opencl20"; | ||
| case Cpp::InterpreterLanguageStandard::opencl30: | ||
| return "opencl30"; | ||
| case Cpp::InterpreterLanguageStandard::openclcpp10: | ||
| return "openclcpp10"; | ||
| case Cpp::InterpreterLanguageStandard::openclcpp2021: | ||
| return "openclcpp2021"; | ||
| case Cpp::InterpreterLanguageStandard::hlsl: | ||
| return "hlsl"; | ||
| case Cpp::InterpreterLanguageStandard::hlsl2015: | ||
| return "hlsl2015"; | ||
| case Cpp::InterpreterLanguageStandard::hlsl2016: | ||
| return "hlsl2016"; | ||
| case Cpp::InterpreterLanguageStandard::hlsl2017: | ||
| return "hlsl2017"; | ||
| case Cpp::InterpreterLanguageStandard::hlsl2018: | ||
| return "hlsl2018"; | ||
| case Cpp::InterpreterLanguageStandard::hlsl2021: | ||
| return "hlsl2021"; | ||
| case Cpp::InterpreterLanguageStandard::hlsl202x: | ||
| return "hlsl202x"; | ||
| case Cpp::InterpreterLanguageStandard::hlsl202y: | ||
| return "hlsl202y"; | ||
| case Cpp::InterpreterLanguageStandard::lang_unspecified: | ||
| return "lang_unspecified"; | ||
| } | ||
|
Comment on lines
+108
to
+196
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. That will need to move to cppinterop in a longer run...
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yes for the next cppinterop release I will upstream this function. This PR is ready as of now, if your willing to approve and take it in. I'm not sure what this will return for the openmp kernels. I suspect it will return the c/c++ standard.
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yes, it should be fine assuming we have a fixme explaining that and pointing to a bug report in cppinterop
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Added fixme comment. Also did this for my PR about using CppInterOp to get the language (this PR #462)
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Arghh okay I'm not a fan of a huge switch case like this lying in xinterpreter.cpp ! Should be restricted to creating the interpreter and overriding the kernel methods from xeus. Can this lie in a xutils/xhelper ? (we should have one I think)
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Also let's just start with the kernels we currently cater to ? I guess we don't need such a huge switch case. Offcourse when shifting it to cppinterop we should have everything !
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I've reduced it so that get_stdopt covers all the c++ standards we did previously, plus all the c standards from c11 onwards, since we have the c kernels now.
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Turns out I need to cover all cases otherwise I get these errors https://github.com/compiler-research/xeus-cpp/actions/runs/23733299499/job/69131805701?pr=461#step:11:33 , since we treat all warnings as errors in the ci. I will switch back. |
||
|
|
||
| return "unknown"; | ||
| } | ||
| interpreter::interpreter(int argc, const char* const* argv) : | ||
| xmagics() | ||
| , p_cout_strbuf(nullptr) | ||
|
|
||
Uh oh!
There was an error while loading. Please reload this page.