Skip to content

Commit

Permalink
scripts/wrap/cpp.py: use new always-on internal_assert() in generated…
Browse files Browse the repository at this point in the history
… C++.
  • Loading branch information
julian-smith-artifex-com committed Oct 18, 2024
1 parent 0baa4c0 commit 400d0ef
Showing 1 changed file with 25 additions and 6 deletions.
31 changes: 25 additions & 6 deletions scripts/wrap/cpp.py
Original file line number Diff line number Diff line change
Expand Up @@ -1363,6 +1363,9 @@ def make_internal_functions( namespace, out_h, out_cpp, refcheck_if, trace_if):
out_h.write(
textwrap.dedent(
f'''
#define internal_assert(expression) (expression) ? (void) 0 : internal_assert_fail(__FILE__, __LINE__, __FUNCTION__, #expression)
FZ_FUNCTION void internal_assert_fail(const char* file, int line, const char* fn, const char* expression);
/** Internal use only. Looks at environmental variable <name>; returns 0 if unset else int value. */
FZ_FUNCTION int {rename.internal('env_flag')}(const char* name);
Expand Down Expand Up @@ -1395,6 +1398,14 @@ def make_internal_functions( namespace, out_h, out_cpp, refcheck_if, trace_if):

cpp_text = textwrap.dedent(
f'''
FZ_FUNCTION void internal_assert_fail(const char* file, int line, const char* fn, const char* expression)
{{
std::cerr << file << ":" << line << ":" << fn << "(): "
<< "MuPDF C++ internal assert failure: " << expression
<< "\\n";
abort();
}}
FZ_FUNCTION int {rename.internal('env_flag')}(const char* name)
{{
const char* s = getenv( name);
Expand All @@ -1417,6 +1428,8 @@ def make_internal_functions( namespace, out_h, out_cpp, refcheck_if, trace_if):
static const int s_trace = mupdf::internal_env_flag_check_unset("{trace_if}", "MUPDF_trace");
#endif
static bool s_state_valid = false;
struct {rename.internal("state")}
{{
/* Constructor. */
Expand All @@ -1430,6 +1443,7 @@ def make_internal_functions( namespace, out_h, out_cpp, refcheck_if, trace_if):
const char* s = getenv( "MUPDF_mt_ctx");
if ( s && !strcmp( s, "0")) multithreaded = false;
reinit( multithreaded);
s_state_valid = true;
}}
void reinit( bool multithreaded)
Expand Down Expand Up @@ -1457,13 +1471,13 @@ def make_internal_functions( namespace, out_h, out_cpp, refcheck_if, trace_if):
static void lock(void *user, int lock)
{{
{rename.internal("state")}* self = ({rename.internal("state")}*) user;
assert( self->m_multithreaded);
internal_assert( self->m_multithreaded);
self->m_mutexes[lock].lock();
}}
static void unlock(void *user, int lock)
{{
{rename.internal("state")}* self = ({rename.internal("state")}*) user;
assert( self->m_multithreaded);
internal_assert( self->m_multithreaded);
self->m_mutexes[lock].unlock();
}}
~{rename.internal("state")}()
Expand All @@ -1475,6 +1489,7 @@ def make_internal_functions( namespace, out_h, out_cpp, refcheck_if, trace_if):
}}
fz_drop_context(m_ctx);
m_ctx = nullptr;
s_state_valid = false;
}}
bool m_multithreaded;
Expand All @@ -1497,7 +1512,7 @@ def make_internal_functions( namespace, out_h, out_cpp, refcheck_if, trace_if):
{{}}
fz_context* get_context()
{{
assert( s_state.m_multithreaded);
internal_assert( s_state.m_multithreaded);
/* The following code checks that we are not being called after
we have been destructed. This can happen if global mupdf
Expand All @@ -1519,7 +1534,7 @@ def make_internal_functions( namespace, out_h, out_cpp, refcheck_if, trace_if):
<< "***\\n"
;
}}
assert( m_constructed);
internal_assert( m_constructed);
if (!m_ctx)
{{
/* Make a context for this thread by cloning the global
Expand All @@ -1531,6 +1546,7 @@ def make_internal_functions( namespace, out_h, out_cpp, refcheck_if, trace_if):
std::cerr << __FILE__ << ":" << __LINE__ << ":" << __FUNCTION__ << "(): "
<< " calling fz_clone_context()\\n";
}}
internal_assert(s_state_valid);
m_ctx = fz_clone_context(s_state.m_ctx);
}}
return m_ctx;
Expand All @@ -1539,7 +1555,7 @@ def make_internal_functions( namespace, out_h, out_cpp, refcheck_if, trace_if):
{{
if (m_ctx)
{{
assert( s_state.m_multithreaded);
internal_assert( s_state.m_multithreaded);
if (s_trace)
{{
std::cerr << __FILE__ << ":" << __LINE__ << ":" << __FUNCTION__ << "(): "
Expand Down Expand Up @@ -1576,7 +1592,10 @@ def make_internal_functions( namespace, out_h, out_cpp, refcheck_if, trace_if):
{{
/* This gives a small improvement in performance for
single-threaded use, e.g. from 552.4s to 548.1s. */
return s_state.m_ctx;
internal_assert(s_state_valid);
fz_context* ret = s_state.m_ctx;
internal_assert(ret);
return ret;
}}
}}
Expand Down

0 comments on commit 400d0ef

Please sign in to comment.