Skip to content

Commit 6adad0e

Browse files
authored
C++ modules conformance (#495)
1 parent 2f7dffc commit 6adad0e

File tree

8 files changed

+56
-55
lines changed

8 files changed

+56
-55
lines changed

cppwinrt/cppwinrt.vcxproj

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,14 +52,12 @@
5252
<ClInclude Include="..\strings\base_collections_vector.h" />
5353
<ClInclude Include="..\strings\base_composable.h" />
5454
<ClInclude Include="..\strings\base_com_ptr.h" />
55-
<ClInclude Include="..\strings\base_coroutine.h" />
5655
<ClInclude Include="..\strings\base_coroutine_foundation.h" />
5756
<ClInclude Include="..\strings\base_coroutine_system.h" />
5857
<ClInclude Include="..\strings\base_coroutine_threadpool.h" />
5958
<ClInclude Include="..\strings\base_coroutine_ui_core.h" />
6059
<ClInclude Include="..\strings\base_deferral.h" />
6160
<ClInclude Include="..\strings\base_delegate.h" />
62-
<ClInclude Include="..\strings\base_dependencies.h" />
6361
<ClInclude Include="..\strings\base_error.h" />
6462
<ClInclude Include="..\strings\base_events.h" />
6563
<ClInclude Include="..\strings\base_extern.h" />
@@ -68,6 +66,7 @@
6866
<ClInclude Include="..\strings\base_handle.h" />
6967
<ClInclude Include="..\strings\base_identity.h" />
7068
<ClInclude Include="..\strings\base_implements.h" />
69+
<ClInclude Include="..\strings\base_includes.h" />
7170
<ClInclude Include="..\strings\base_lock.h" />
7271
<ClInclude Include="..\strings\base_macros.h" />
7372
<ClInclude Include="..\strings\base_marshaler.h" />

cppwinrt/cppwinrt.vcxproj.filters

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,6 @@
7676
<ClInclude Include="..\strings\base_delegate.h">
7777
<Filter>strings</Filter>
7878
</ClInclude>
79-
<ClInclude Include="..\strings\base_dependencies.h">
80-
<Filter>strings</Filter>
81-
</ClInclude>
8279
<ClInclude Include="..\strings\base_error.h">
8380
<Filter>strings</Filter>
8481
</ClInclude>
@@ -151,15 +148,15 @@
151148
<ClInclude Include="..\strings\base_fast_forward.h">
152149
<Filter>strings</Filter>
153150
</ClInclude>
154-
<ClInclude Include="..\strings\base_coroutine.h">
155-
<Filter>strings</Filter>
156-
</ClInclude>
157151
<ClInclude Include="..\strings\base_deferral.h">
158152
<Filter>strings</Filter>
159153
</ClInclude>
160154
<ClInclude Include="cmd_reader.h" />
161155
<ClInclude Include="task_group.h" />
162156
<ClInclude Include="text_writer.h" />
157+
<ClInclude Include="..\strings\base_includes.h">
158+
<Filter>strings</Filter>
159+
</ClInclude>
163160
</ItemGroup>
164161
<ItemGroup>
165162
<ResourceCompile Include="$(OutDir)version.rc" />

cppwinrt/file_writers.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@ namespace cppwinrt
88
write_preamble(w);
99
write_open_file_guard(w, "BASE");
1010

11-
w.write(strings::base_dependencies);
12-
w.write(strings::base_coroutine);
11+
w.write(strings::base_includes);
1312
w.write(strings::base_macros);
1413
w.write(strings::base_types);
1514
w.write(strings::base_extern);

cppwinrt/main.cpp

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -289,16 +289,23 @@ Where <spec> is one or more of:
289289

290290
w.flush_to_console();
291291
task_group group;
292+
writer ixx;
293+
write_preamble(ixx);
294+
ixx.write("module;\n");
295+
ixx.write(strings::base_includes);
296+
ixx.write("\nexport module winrt;\n#define WINRT_EXPORT export\n\n");
292297

293298
for (auto&&[ns, members] : c.namespaces())
294299
{
295-
group.add([&, &ns = ns, &members = members]
300+
if (!has_projected_types(members) || !settings.projection_filter.includes(members))
296301
{
297-
if (!has_projected_types(members) || !settings.projection_filter.includes(members))
298-
{
299-
return;
300-
}
302+
continue;
303+
}
304+
305+
ixx.write("#include \"winrt/%.h\"\n", ns);
301306

307+
group.add([&, &ns = ns, &members = members]
308+
{
302309
write_namespace_0_h(ns, members);
303310
write_namespace_1_h(ns, members);
304311
write_namespace_2_h(ns, members);
@@ -309,6 +316,7 @@ Where <spec> is one or more of:
309316
if (settings.base)
310317
{
311318
write_base_h();
319+
ixx.flush_to_file(settings.output_folder + "winrt/winrt.ixx");
312320
}
313321

314322
if (settings.component)

strings/base_coroutine_foundation.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -527,7 +527,7 @@ namespace winrt::impl
527527
};
528528
}
529529

530-
namespace std::experimental
530+
WINRT_EXPORT namespace std::experimental
531531
{
532532
template <typename... Args>
533533
struct coroutine_traits<winrt::Windows::Foundation::IAsyncAction, Args...>

strings/base_dependencies.h

Lines changed: 0 additions & 39 deletions
This file was deleted.
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,27 @@
11

2+
#include <algorithm>
3+
#include <array>
4+
#include <atomic>
5+
#include <charconv>
6+
#include <chrono>
7+
#include <cstddef>
8+
#include <map>
9+
#include <memory>
10+
#include <optional>
11+
#include <stdexcept>
12+
#include <string_view>
13+
#include <string>
14+
#include <tuple>
15+
#include <type_traits>
16+
#include <unordered_map>
17+
#include <utility>
18+
#include <vector>
19+
20+
#if __has_include(<WindowsNumerics.impl.h>)
21+
#define WINRT_IMPL_NUMERICS
22+
#include <directxmath.h>
23+
#endif
24+
225
#ifndef __clang__
326

427
#include <experimental/coroutine>

strings/base_macros.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,17 @@
3030
#if defined(_RESUMABLE_FUNCTIONS_SUPPORTED) && !defined(__cpp_coroutines)
3131
#define __cpp_coroutines
3232
#endif
33+
34+
#ifndef WINRT_EXPORT
35+
#define WINRT_EXPORT
36+
#endif
37+
38+
#ifdef WINRT_IMPL_NUMERICS
39+
#define _WINDOWS_NUMERICS_NAMESPACE_ winrt::Windows::Foundation::Numerics
40+
#define _WINDOWS_NUMERICS_BEGIN_NAMESPACE_ WINRT_EXPORT namespace winrt::Windows::Foundation::Numerics
41+
#define _WINDOWS_NUMERICS_END_NAMESPACE_
42+
#include <WindowsNumerics.impl.h>
43+
#undef _WINDOWS_NUMERICS_NAMESPACE_
44+
#undef _WINDOWS_NUMERICS_BEGIN_NAMESPACE_
45+
#undef _WINDOWS_NUMERICS_END_NAMESPACE_
46+
#endif

0 commit comments

Comments
 (0)