Skip to content

Commit 0f3914e

Browse files
committed
Fix: using statement in another namespace that pointer to type alias
1 parent 9901b01 commit 0f3914e

File tree

3 files changed

+225
-184
lines changed

3 files changed

+225
-184
lines changed

include/cpp2regex.h

+79-63
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,32 @@
33
#define CPP2REGEX_H_CPP2
44

55

6+
//=== Cpp1 type definitions and function declarations ====================================================
7+
8+
#line 1 "cpp2regex.h2"
9+
10+
// Copyright 2022-2024 Herb Sutter
11+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
12+
//
13+
// Part of the Cppfront Project, under the Apache License v2.0 with LLVM Exceptions.
14+
// See https://github.com/hsutter/cppfront/blob/main/LICENSE for license information.
15+
16+
17+
//===========================================================================
18+
// Regex support
19+
//===========================================================================
20+
21+
#ifndef CPP2_CPP2REGEX_H
22+
#define CPP2_CPP2REGEX_H
23+
24+
template<typename matcher_wrapper, typename Iter, typename CharT>
25+
using matcher_wrapper_type = typename matcher_wrapper::template wrap<Iter, CharT>;
26+
27+
template<typename matcher>
28+
using matcher_context_type = typename matcher::context;
29+
#line 758 "cpp2regex.h2"
30+
#endif
31+
632
//=== Cpp2 type declarations ====================================================
733

834

@@ -15,6 +41,9 @@ namespace cpp2 {
1541

1642
namespace regex {
1743

44+
template<typename CharT> using bstring = std::basic_string<CharT>;
45+
template <typename CharT> using bview = std::basic_string_view<CharT>;
46+
1847
#line 38 "cpp2regex.h2"
1948
template<typename Iter> class match_group;
2049

@@ -54,12 +83,59 @@ template<typename CharT, typename Inner> class negated_class_entry;
5483
#line 211 "cpp2regex.h2"
5584
template<typename CharT, string_util::fixed_string Name, typename Inner> class shorthand_class_entry;
5685

86+
#line 220 "cpp2regex.h2"
87+
template <typename CharT> using digits_class = named_class_entry<CharT,"digits",range_class_entry<CharT,'0','9'>>;
88+
template <typename CharT> using lower_class = named_class_entry<CharT,"lower",range_class_entry<CharT,'a','z'>>;
89+
template <typename CharT> using upper_class = named_class_entry<CharT,"upper",range_class_entry<CharT,'A','Z'>>;
90+
91+
#line 226 "cpp2regex.h2"
92+
template <typename CharT> using alnum_class = named_class_entry<CharT,"alnum",combined_class_entry<CharT,lower_class<CharT>,upper_class<CharT>,digits_class<CharT>>>;
93+
template <typename CharT> using alpha_class = named_class_entry<CharT,"alpha",combined_class_entry<CharT,lower_class<CharT>,upper_class<CharT>>>;
94+
template <typename CharT> using ascii_class = named_class_entry<CharT,"ascii",range_class_entry<CharT,'\x00','\x7F'>>;
95+
template <typename CharT> using blank_class = named_class_entry<CharT,"blank",list_class_entry<CharT,' ','\t'>>;
96+
template <typename CharT> using cntrl_class = named_class_entry<CharT,"cntrl",combined_class_entry<CharT,range_class_entry<CharT,'\x00','\x1F'>,single_class_entry<CharT,'\x7F'>>>;
97+
template <typename CharT> using graph_class = named_class_entry<CharT,"graph",range_class_entry<CharT,'\x21','\x7E'>>;
98+
template<typename CharT> using hor_space_class = named_class_entry<CharT,"hspace",list_class_entry<CharT,'\t',' '>>;
99+
template <typename CharT> using print_class = named_class_entry<CharT,"print",range_class_entry<CharT,'\x20','\x7E'>>;
100+
template <typename CharT> using punct_class = named_class_entry<CharT,"punct",list_class_entry<CharT,'[','!','"','#','$','%','&','\'','(',')','*','+',',','-','.','/',':',';','<','=','>','?','@','[','\\',']','^','_','`','{','|','}','~',']'>>;
101+
template <typename CharT> using space_class = named_class_entry<CharT,"space",list_class_entry<CharT,' ','\t','\r','\n','\v','\f'>>;
102+
template<typename CharT> using ver_space_class = named_class_entry<CharT,"vspace",list_class_entry<CharT,'\n','\v','\f','\r'>>;
103+
template <typename CharT> using word_class = named_class_entry<CharT,"word",combined_class_entry<CharT,alnum_class<CharT>,single_class_entry<CharT,'_'>>>;
104+
template <typename CharT> using xdigit_class = named_class_entry<CharT,"xdigit",combined_class_entry<CharT,range_class_entry<CharT,'A','F'>,range_class_entry<CharT,'a','f'>,digits_class<CharT>>>;
105+
106+
#line 242 "cpp2regex.h2"
107+
template <typename CharT> using short_digits_class = shorthand_class_entry<CharT,"\\d",digits_class<CharT>>;
108+
template <typename CharT> using short_hor_space_class = shorthand_class_entry<CharT,"\\h",hor_space_class<CharT>>;
109+
template <typename CharT> using short_space_class = shorthand_class_entry<CharT,"\\s",space_class<CharT>>;
110+
template<typename CharT> using short_vert_space_class = shorthand_class_entry<CharT,"\\v",ver_space_class<CharT>>;
111+
template <typename CharT> using short_word_class = shorthand_class_entry<CharT,"\\w",word_class<CharT>>;
112+
113+
template <typename CharT> using short_not_digits_class = negated_class_entry<CharT,shorthand_class_entry<CharT,"\\D",digits_class<CharT>>>;
114+
template <typename CharT> using short_not_hor_space_class = negated_class_entry<CharT,shorthand_class_entry<CharT,"\\H",hor_space_class<CharT>>>;
115+
template <typename CharT> using short_not_space_class = negated_class_entry<CharT,shorthand_class_entry<CharT,"\\S",space_class<CharT>>>;
116+
template<typename CharT> using short_not_vert_space_class = negated_class_entry<CharT,shorthand_class_entry<CharT,"\\V",ver_space_class<CharT>>>;
117+
template <typename CharT> using short_not_word_class = negated_class_entry<CharT,shorthand_class_entry<CharT,"\\W",word_class<CharT>>>;
118+
57119
#line 259 "cpp2regex.h2"
58120
template<typename CharT> class alternative_token_matcher;
59121

60122
#line 337 "cpp2regex.h2"
61123
template<typename CharT, bool negate, bool case_insensitive, typename ...List> class class_token_matcher;
62124

125+
#line 397 "cpp2regex.h2"
126+
template <typename CharT, bool case_insensitive> using named_class_no_new_line = class_token_matcher<CharT,true,case_insensitive,single_class_entry<CharT,'\n'>>;
127+
template <typename CharT, bool case_insensitive> using named_class_digits = class_token_matcher<CharT,false,case_insensitive,digits_class<CharT>>;
128+
template <typename CharT, bool case_insensitive> using named_class_hor_space = class_token_matcher<CharT,false,case_insensitive,hor_space_class<CharT>>;
129+
template <typename CharT, bool case_insensitive> using named_class_space = class_token_matcher<CharT,false,case_insensitive,space_class<CharT>>;
130+
template <typename CharT, bool case_insensitive> using named_class_ver_space = class_token_matcher<CharT,false,case_insensitive,ver_space_class<CharT>>;
131+
template <typename CharT, bool case_insensitive> using named_class_word = class_token_matcher<CharT,false,case_insensitive,word_class<CharT>>;
132+
133+
template <typename CharT, bool case_insensitive> using named_class_not_digits = class_token_matcher<CharT,true,case_insensitive,digits_class<CharT>>;
134+
template <typename CharT, bool case_insensitive> using named_class_not_hor_space = class_token_matcher<CharT,true,case_insensitive,hor_space_class<CharT>>;
135+
template <typename CharT, bool case_insensitive> using named_class_not_space = class_token_matcher<CharT,true,case_insensitive,space_class<CharT>>;
136+
template <typename CharT, bool case_insensitive> using named_class_not_ver_space = class_token_matcher<CharT,true,case_insensitive,ver_space_class<CharT>>;
137+
template <typename CharT, bool case_insensitive> using named_class_not_word = class_token_matcher<CharT,true,case_insensitive,word_class<CharT>>;
138+
63139
#line 492 "cpp2regex.h2"
64140
class range_flags;
65141

@@ -79,34 +155,12 @@ template<typename CharT, typename matcher_wrapper> class regular_expression;
79155

80156
#line 1 "cpp2regex.h2"
81157

82-
// Copyright 2022-2024 Herb Sutter
83-
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
84-
//
85-
// Part of the Cppfront Project, under the Apache License v2.0 with LLVM Exceptions.
86-
// See https://github.com/hsutter/cppfront/blob/main/LICENSE for license information.
87-
88-
89-
//===========================================================================
90-
// Regex support
91-
//===========================================================================
92-
93-
#ifndef CPP2_CPP2REGEX_H
94-
#define CPP2_CPP2REGEX_H
95-
96-
template<typename matcher_wrapper, typename Iter, typename CharT>
97-
using matcher_wrapper_type = typename matcher_wrapper::template wrap<Iter, CharT>;
98-
99-
template<typename matcher>
100-
using matcher_context_type = typename matcher::context;
101-
102158
#line 22 "cpp2regex.h2"
103159
namespace cpp2 {
104160

105161
namespace regex {
106162

107-
template<typename CharT> using bstring = std::basic_string<CharT>;
108-
template <typename CharT> using bview = std::basic_string_view<CharT>;
109-
163+
#line 29 "cpp2regex.h2"
110164
//-----------------------------------------------------------------------
111165
//
112166
// Helper structures for the expression matching.
@@ -335,39 +389,14 @@ template<typename CharT, string_util::fixed_string Name, typename Inner> class s
335389
#line 218 "cpp2regex.h2"
336390
// Named basic character classes
337391
//
338-
template <typename CharT> using digits_class = named_class_entry<CharT,"digits",range_class_entry<CharT,'0','9'>>;
339-
template <typename CharT> using lower_class = named_class_entry<CharT,"lower",range_class_entry<CharT,'a','z'>>;
340-
template <typename CharT> using upper_class = named_class_entry<CharT,"upper",range_class_entry<CharT,'A','Z'>>;
341392

393+
#line 224 "cpp2regex.h2"
342394
// Named other classes
343395
//
344-
template <typename CharT> using alnum_class = named_class_entry<CharT,"alnum",combined_class_entry<CharT,lower_class<CharT>,upper_class<CharT>,digits_class<CharT>>>;
345-
template <typename CharT> using alpha_class = named_class_entry<CharT,"alpha",combined_class_entry<CharT,lower_class<CharT>,upper_class<CharT>>>;
346-
template <typename CharT> using ascii_class = named_class_entry<CharT,"ascii",range_class_entry<CharT,'\x00','\x7F'>>;
347-
template <typename CharT> using blank_class = named_class_entry<CharT,"blank",list_class_entry<CharT,' ','\t'>>;
348-
template <typename CharT> using cntrl_class = named_class_entry<CharT,"cntrl",combined_class_entry<CharT,range_class_entry<CharT,'\x00','\x1F'>,single_class_entry<CharT,'\x7F'>>>;
349-
template <typename CharT> using graph_class = named_class_entry<CharT,"graph",range_class_entry<CharT,'\x21','\x7E'>>;
350-
template<typename CharT> using hor_space_class = named_class_entry<CharT,"hspace",list_class_entry<CharT,'\t',' '>>;
351-
template <typename CharT> using print_class = named_class_entry<CharT,"print",range_class_entry<CharT,'\x20','\x7E'>>;
352-
template <typename CharT> using punct_class = named_class_entry<CharT,"punct",list_class_entry<CharT,'[','!','"','#','$','%','&','\'','(',')','*','+',',','-','.','/',':',';','<','=','>','?','@','[','\\',']','^','_','`','{','|','}','~',']'>>;
353-
template <typename CharT> using space_class = named_class_entry<CharT,"space",list_class_entry<CharT,' ','\t','\r','\n','\v','\f'>>;
354-
template<typename CharT> using ver_space_class = named_class_entry<CharT,"vspace",list_class_entry<CharT,'\n','\v','\f','\r'>>;
355-
template <typename CharT> using word_class = named_class_entry<CharT,"word",combined_class_entry<CharT,alnum_class<CharT>,single_class_entry<CharT,'_'>>>;
356-
template <typename CharT> using xdigit_class = named_class_entry<CharT,"xdigit",combined_class_entry<CharT,range_class_entry<CharT,'A','F'>,range_class_entry<CharT,'a','f'>,digits_class<CharT>>>;
357396

397+
#line 240 "cpp2regex.h2"
358398
// Shorthand class entries
359399
//
360-
template <typename CharT> using short_digits_class = shorthand_class_entry<CharT,"\\d",digits_class<CharT>>;
361-
template <typename CharT> using short_hor_space_class = shorthand_class_entry<CharT,"\\h",hor_space_class<CharT>>;
362-
template <typename CharT> using short_space_class = shorthand_class_entry<CharT,"\\s",space_class<CharT>>;
363-
template<typename CharT> using short_vert_space_class = shorthand_class_entry<CharT,"\\v",ver_space_class<CharT>>;
364-
template <typename CharT> using short_word_class = shorthand_class_entry<CharT,"\\w",word_class<CharT>>;
365-
366-
template <typename CharT> using short_not_digits_class = negated_class_entry<CharT,shorthand_class_entry<CharT,"\\D",digits_class<CharT>>>;
367-
template <typename CharT> using short_not_hor_space_class = negated_class_entry<CharT,shorthand_class_entry<CharT,"\\H",hor_space_class<CharT>>>;
368-
template <typename CharT> using short_not_space_class = negated_class_entry<CharT,shorthand_class_entry<CharT,"\\S",space_class<CharT>>>;
369-
template<typename CharT> using short_not_vert_space_class = negated_class_entry<CharT,shorthand_class_entry<CharT,"\\V",ver_space_class<CharT>>>;
370-
template <typename CharT> using short_not_word_class = negated_class_entry<CharT,shorthand_class_entry<CharT,"\\W",word_class<CharT>>>;
371400

372401
#line 255 "cpp2regex.h2"
373402
// Regex syntax: | Example: ab|ba
@@ -459,18 +488,6 @@ template<typename CharT, bool negate, bool case_insensitive, typename ...List> c
459488
#line 395 "cpp2regex.h2"
460489
// Named short classes
461490
//
462-
template <typename CharT, bool case_insensitive> using named_class_no_new_line = class_token_matcher<CharT,true,case_insensitive,single_class_entry<CharT,'\n'>>;
463-
template <typename CharT, bool case_insensitive> using named_class_digits = class_token_matcher<CharT,false,case_insensitive,digits_class<CharT>>;
464-
template <typename CharT, bool case_insensitive> using named_class_hor_space = class_token_matcher<CharT,false,case_insensitive,hor_space_class<CharT>>;
465-
template <typename CharT, bool case_insensitive> using named_class_space = class_token_matcher<CharT,false,case_insensitive,space_class<CharT>>;
466-
template <typename CharT, bool case_insensitive> using named_class_ver_space = class_token_matcher<CharT,false,case_insensitive,ver_space_class<CharT>>;
467-
template <typename CharT, bool case_insensitive> using named_class_word = class_token_matcher<CharT,false,case_insensitive,word_class<CharT>>;
468-
469-
template <typename CharT, bool case_insensitive> using named_class_not_digits = class_token_matcher<CharT,true,case_insensitive,digits_class<CharT>>;
470-
template <typename CharT, bool case_insensitive> using named_class_not_hor_space = class_token_matcher<CharT,true,case_insensitive,hor_space_class<CharT>>;
471-
template <typename CharT, bool case_insensitive> using named_class_not_space = class_token_matcher<CharT,true,case_insensitive,space_class<CharT>>;
472-
template <typename CharT, bool case_insensitive> using named_class_not_ver_space = class_token_matcher<CharT,true,case_insensitive,ver_space_class<CharT>>;
473-
template <typename CharT, bool case_insensitive> using named_class_not_word = class_token_matcher<CharT,true,case_insensitive,word_class<CharT>>;
474491

475492
#line 411 "cpp2regex.h2"
476493
// Regex syntax: \<number> Example: \1
@@ -624,7 +641,6 @@ template<typename CharT, typename matcher_wrapper> class regular_expression
624641

625642
}
626643
}
627-
#endif
628644

629645

630646
//=== Cpp2 function definitions =================================================

source/reflect.h

+26-21
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,25 @@
33
#define REFLECT_H_CPP2
44

55

6+
//=== Cpp1 type definitions and function declarations ====================================================
7+
8+
#line 1 "reflect.h2"
9+
10+
// Copyright 2022-2024 Herb Sutter
11+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
12+
//
13+
// Part of the Cppfront Project, under the Apache License v2.0 with LLVM Exceptions.
14+
// See https://github.com/hsutter/cppfront/blob/main/LICENSE for license information.
15+
16+
17+
//===========================================================================
18+
// Reflection and meta
19+
//===========================================================================
20+
21+
#include "parse.h"
22+
#include "cpp2regex.h"
23+
using namespace cpp2::regex;
24+
625
//=== Cpp2 type declarations ====================================================
726

827

@@ -45,12 +64,19 @@ class compound_statement;
4564
#line 1094 "reflect.h2"
4665
class value_member_info;
4766

67+
#line 1608 "reflect.h2"
68+
using error_func = std::function<void(cpp2::impl::in<std::string> x)>;
69+
4870
#line 1612 "reflect.h2"
4971
class expression_flags;
5072

5173
#line 1628 "reflect.h2"
5274
class regex_token;
5375

76+
#line 1648 "reflect.h2"
77+
using token_ptr = std::shared_ptr<regex_token>;
78+
using token_vec = std::vector<token_ptr>;
79+
5480
#line 1654 "reflect.h2"
5581
class regex_token_check;
5682

@@ -122,21 +148,6 @@ template<typename Error_out> class regex_generator;
122148

123149
#line 1 "reflect.h2"
124150

125-
// Copyright 2022-2024 Herb Sutter
126-
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
127-
//
128-
// Part of the Cppfront Project, under the Apache License v2.0 with LLVM Exceptions.
129-
// See https://github.com/hsutter/cppfront/blob/main/LICENSE for license information.
130-
131-
132-
//===========================================================================
133-
// Reflection and meta
134-
//===========================================================================
135-
136-
#include "parse.h"
137-
#include "cpp2regex.h"
138-
using namespace cpp2::regex;
139-
140151
#line 17 "reflect.h2"
141152
namespace cpp2 {
142153

@@ -602,9 +613,6 @@ auto cpp2_union(meta::type_declaration& t) -> void;
602613
#line 1588 "reflect.h2"
603614
auto print(cpp2::impl::in<meta::type_declaration> t) -> void;
604615

605-
#line 1608 "reflect.h2"
606-
using error_func = std::function<void(cpp2::impl::in<std::string> x)>;
607-
608616
#line 1612 "reflect.h2"
609617
class expression_flags
610618
{
@@ -667,9 +675,6 @@ class regex_token
667675
#line 1646 "reflect.h2"
668676
};
669677

670-
using token_ptr = std::shared_ptr<regex_token>;
671-
using token_vec = std::vector<token_ptr>;
672-
673678
#line 1652 "reflect.h2"
674679
// Adds a check in code generation.
675680
//

0 commit comments

Comments
 (0)