11#ifndef _C4_YML_DETAIL_DBGPRINT_HPP_
22#define _C4_YML_DETAIL_DBGPRINT_HPP_
33
4- #ifndef _C4_YML_COMMON_HPP_
5- #include " ../common.hpp"
6- #endif
7-
8- #ifdef RYML_DBG
9- #include < cstdio>
10- #endif
11-
124
135// -----------------------------------------------------------------------------
146// debug prints
2315# define _c4presc (...)
2416# define _c4prscalar (msg, scalar, keep_newlines )
2517#else
26- # define _c4dbgt (fmt, ...) do { if (_dbg_enabled ()) { \
27- this ->_dbg (" {}:{}: " fmt , __FILE__, __LINE__, __VA_ARGS__); } } while (0 )
18+ # define _c4dbgt (fmt, ...) do { \
19+ if (_dbg_enabled ()) { \
20+ this ->_dbg (" {}:{}: " fmt , __FILE__, __LINE__, __VA_ARGS__); \
21+ } \
22+ } while (0 )
2823# define _c4dbgpf (fmt, ...) _dbg_printf(" {}:{}: " fmt " \n " , __FILE__, __LINE__, __VA_ARGS__)
2924# define _c4dbgpf_ (fmt, ...) _dbg_printf(" {}:{}: " fmt , __FILE__, __LINE__, __VA_ARGS__)
3025# define _c4dbgp (msg ) _dbg_printf(" {}:{}: " msg " \n " , __FILE__, __LINE__ )
3126# define _c4dbgp_ (msg ) _dbg_printf(" {}:{}: " msg , __FILE__, __LINE__ )
3227# define _c4dbgq (msg ) _dbg_printf(msg " \n " )
33- # define _c4presc (...) do { if ( _dbg_enabled ()) __c4presc (__VA_ARGS__); } while ( 0 )
28+ # define _c4presc (...) __c4presc(__VA_ARGS__)
3429# define _c4prscalar (msg, scalar, keep_newlines ) \
3530 do { \
36- _c4dbgpf_ (" {}: [{}]~~~" , msg, scalar.len ); \
3731 if (_dbg_enabled ()) { \
38- __c4presc ((scalar), (keep_newlines)); \
32+ _c4dbgpf_ (" {}: [{}]~~~" , msg, scalar.len ); \
33+ __c4presc ((scalar), (keep_newlines)); \
34+ _c4dbgq (" ~~~" ); \
3935 } \
40- _c4dbgq (" ~~~" ); \
4136 } while (0 )
42- #endif // RYML_DBG
4337
4438
4539// -----------------------------------------------------------------------------
40+ // implementation
4641
47- #ifdef RYML_DBG
48-
42+ #include < cstdio>
4943
5044#if defined(C4_MSVC) || defined(C4_MINGW)
5145#include < malloc.h>
5650#include < alloca.h>
5751#endif
5852
53+ #ifndef _C4_YML_ESCAPE_SCALAR_HPP_
54+ #include " c4/yml/escape_scalar.hpp"
55+ #endif
56+
57+ #ifndef _C4_DUMP_HPP_
58+ #include " c4/dump.hpp"
59+ #endif
5960
60- #include < c4/dump.hpp>
6161
6262C4_SUPPRESS_WARNING_GCC_WITH_PUSH (" -Wattributes" )
6363
6464namespace c4 {
65+ namespace yml {
6566inline bool & _dbg_enabled () { static bool enabled = true ; return enabled; }
6667inline C4_NO_INLINE void _dbg_set_enabled (bool yes) { _dbg_enabled () = yes; }
6768inline C4_NO_INLINE void _dbg_dumper (csubstr s)
@@ -83,7 +84,7 @@ C4_NO_INLINE void _dbg_dump(DumpFn &&dumpfn, csubstr fmt, Args&& ...args)
8384 results = format_dump_resume (std::forward<DumpFn>(dumpfn), writebuf, fmt, std::forward<Args>(args)...);
8485 }
8586 // if any of the arguments failed to fit the buffer, allocate a
86- // larger buffer (up to a limit) and resume writing.
87+ // larger buffer (with alloca(), up to a limit) and resume writing.
8788 //
8889 // results.bufsize is set to the size of the largest element
8990 // serialized. Eg int(1) will require 1 byte.
@@ -106,58 +107,15 @@ C4_NO_INLINE void _dbg_printf(csubstr fmt, Args const& ...args)
106107}
107108inline C4_NO_INLINE void __c4presc (csubstr s, bool keep_newlines=false )
108109{
109- if (!_dbg_enabled ())
110- return ; // LCOV_EXCL_LINE
111- _RYML_ASSERT_BASIC (s.str || !s.len );
112- size_t prev = 0 ;
113- for (size_t i = 0 ; i < s.len ; ++i)
114- {
115- switch (s.str [i])
116- {
117- case ' \n ' : _dbg_dumper (s.range (prev, i)); _dbg_dumper (" \\ n" ); if (keep_newlines) { _dbg_dumper (" \n " ); } prev = i+1 ; break ;
118- case ' \t ' : _dbg_dumper (s.range (prev, i)); _dbg_dumper (" \\ t" ); prev = i+1 ; break ;
119- case ' \0 ' : _dbg_dumper (s.range (prev, i)); _dbg_dumper (" \\ 0" ); prev = i+1 ; break ;
120- case ' \r ' : _dbg_dumper (s.range (prev, i)); _dbg_dumper (" \\ r" ); prev = i+1 ; break ;
121- case ' \f ' : _dbg_dumper (s.range (prev, i)); _dbg_dumper (" \\ f" ); prev = i+1 ; break ;
122- case ' \b ' : _dbg_dumper (s.range (prev, i)); _dbg_dumper (" \\ b" ); prev = i+1 ; break ;
123- case ' \v ' : _dbg_dumper (s.range (prev, i)); _dbg_dumper (" \\ v" ); prev = i+1 ; break ;
124- case ' \a ' : _dbg_dumper (s.range (prev, i)); _dbg_dumper (" \\ a" ); prev = i+1 ; break ;
125- case ' \x1b ' : _dbg_dumper (s.range (prev, i)); _dbg_dumper (" \\ x1b" ); prev = i+1 ; break ;
126- case _RYML_CHCONST (-0x3e , 0xc2 ):
127- if (i+1 < s.len )
128- {
129- if (s.str [i+1 ] == _RYML_CHCONST (-0x60 , 0xa0 ))
130- {
131- _dbg_dumper (s.range (prev, i)); _dbg_dumper (" \\ _" ); prev = i+1 ;
132- }
133- else if (s.str [i+1 ] == _RYML_CHCONST (-0x7b ,0x85 ))
134- {
135- _dbg_dumper (s.range (prev, i)); _dbg_dumper (" \\ N" ); prev = i+1 ;
136- }
137- }
138- break ;
139- case _RYML_CHCONST (-0x1e , 0xe2 ):
140- if (i+2 < s.len && s.str [i+1 ] == _RYML_CHCONST (-0x80 ,0x80 ))
141- {
142- if (s.str [i+2 ] == _RYML_CHCONST (-0x58 ,0xa8 ))
143- {
144- _dbg_dumper (s.range (prev, i)); _dbg_dumper (" \\ L" ); prev = i+1 ;
145- }
146- else if (s.str [i+2 ] == _RYML_CHCONST (-0x57 ,0xa9 ))
147- {
148- _dbg_dumper (s.range (prev, i)); _dbg_dumper (" \\ P" ); prev = i+1 ;
149- }
150- }
151- break ;
152- }
153- }
154- if (s.len > prev)
155- _dbg_dumper (s.sub (prev));
110+ if (_dbg_enabled ())
111+ escape_scalar_fn (std::ref (_dbg_dumper), s, keep_newlines);
156112}
157113inline C4_NO_INLINE void __c4presc (const char *s, size_t len, bool keep_newlines=false )
158114{
159- __c4presc (csubstr (s, len), keep_newlines);
115+ if (_dbg_enabled ())
116+ escape_scalar_fn (std::ref (_dbg_dumper), csubstr (s, len), keep_newlines);
160117}
118+ } // namespace yml
161119} // namespace c4
162120
163121C4_SUPPRESS_WARNING_GCC_POP
0 commit comments