Skip to content

Commit d34baf4

Browse files
committed
Emit template-heads of type-scope object aliases in correct order, closes #802
1 parent d8b5e18 commit d34baf4

9 files changed

+35
-4
lines changed

regression-tests/mixed-fixed-type-aliases.cpp2

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ test: (x:_) = {
1212
<< "\n";
1313
}
1414

15+
mytype: @struct <T> type = {
16+
myvalue: <U> bool == true;
17+
}
18+
1519
main: (args) -> int = {
1620
y: my::u16 = 42;
1721
test(y);
@@ -21,4 +25,6 @@ main: (args) -> int = {
2125

2226
for args do (arg)
2327
std::cout << std::filesystem::path(arg).filename() << "\n";
28+
29+
std::cout << "(mytype<int>::myvalue<int>)$\n";
2430
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
true
22
false
33
"test.exe"
4+
true
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
true
22
false
33
"test.exe"
4+
true
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
true
22
false
33
"test.exe"
4+
true

regression-tests/test-results/mixed-fixed-type-aliases.cpp

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
#include "cpp2util.h"
77

88

9+
#line 15 "mixed-fixed-type-aliases.cpp2"
10+
template<typename T> class mytype;
11+
912

1013
//=== Cpp2 type definitions and function declarations ===========================
1114

@@ -22,6 +25,10 @@ auto test(auto const& x) -> void;
2225

2326

2427
#line 15 "mixed-fixed-type-aliases.cpp2"
28+
template<typename T> class mytype {
29+
public: template<typename U> static const bool myvalue;
30+
};
31+
2532
[[nodiscard]] auto main(int const argc_, char** argv_) -> int;
2633

2734

@@ -35,9 +42,13 @@ auto test(auto const& x) -> void{
3542
<< "\n";
3643
}
3744

45+
#line 16 "mixed-fixed-type-aliases.cpp2"
46+
template <typename T> template<typename U> inline CPP2_CONSTEXPR bool mytype<T>::myvalue = true;
47+
48+
#line 19 "mixed-fixed-type-aliases.cpp2"
3849
[[nodiscard]] auto main(int const argc_, char** argv_) -> int{
3950
auto const args = cpp2::make_args(argc_, argv_);
40-
#line 16 "mixed-fixed-type-aliases.cpp2"
51+
#line 20 "mixed-fixed-type-aliases.cpp2"
4152
my::u16 y {42};
4253
test(std::move(y));
4354

@@ -46,5 +57,7 @@ auto test(auto const& x) -> void{
4657

4758
for ( auto const& arg : args )
4859
std::cout << CPP2_UFCS_0(filename, std::filesystem::path(arg)) << "\n";
60+
61+
std::cout << cpp2::to_string(mytype<int>::myvalue<int>) + "\n";
4962
}
5063

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
true
22
false
33
"test.exe"
4+
true

regression-tests/test-results/version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11

2-
cppfront compiler v0.3.0 Build 8B13:1628
2+
cppfront compiler v0.3.0 Build 8B14:0859
33
Copyright(c) Herb Sutter All rights reserved
44

55
SPDX-License-Identifier: CC-BY-NC-ND-4.0

source/build.info

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
"8B13:1628"
1+
"8B14:0859"

source/to_cpp1.h

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5133,6 +5133,15 @@ class cppfront
51335133
}
51345134

51355135
// Emit template parameters if any
5136+
if (
5137+
a->is_object_alias()
5138+
&& n.parent_is_type()
5139+
&& printer.get_phase() == printer.phase2_func_defs
5140+
)
5141+
{
5142+
emit_parent_template_parameters();
5143+
}
5144+
51365145
if (n.template_parameters) {
51375146
printer.print_cpp2("template", n.position());
51385147
emit(*n.template_parameters, false, true);
@@ -5202,7 +5211,6 @@ class cppfront
52025211
return;
52035212
}
52045213

5205-
emit_parent_template_parameters();
52065214
printer.print_cpp2(
52075215
"inline CPP2_CONSTEXPR "
52085216
+ type

0 commit comments

Comments
 (0)