Further simplify tracing
This commit is contained in:
parent
bc20045743
commit
173fde7087
|
@ -137,9 +137,7 @@ ASSERT_STATIC (sizeof (Type) + 1 <= sizeof (_Null##Type))
|
||||||
#define SANITIZE_ARG \
|
#define SANITIZE_ARG \
|
||||||
context, \
|
context, \
|
||||||
(HB_DEBUG_SANITIZE ? sanitize_depth + 1 : 0)
|
(HB_DEBUG_SANITIZE ? sanitize_depth + 1 : 0)
|
||||||
#define SANITIZE_ARG_INIT \
|
|
||||||
&context, \
|
|
||||||
1
|
|
||||||
|
|
||||||
typedef struct _hb_sanitize_context_t hb_sanitize_context_t;
|
typedef struct _hb_sanitize_context_t hb_sanitize_context_t;
|
||||||
struct _hb_sanitize_context_t
|
struct _hb_sanitize_context_t
|
||||||
|
@ -266,7 +264,8 @@ template <typename Type>
|
||||||
struct Sanitizer
|
struct Sanitizer
|
||||||
{
|
{
|
||||||
static hb_blob_t *sanitize (hb_blob_t *blob) {
|
static hb_blob_t *sanitize (hb_blob_t *blob) {
|
||||||
hb_sanitize_context_t context;
|
hb_sanitize_context_t context[1];
|
||||||
|
unsigned int sanitize_depth = 0;
|
||||||
bool sane;
|
bool sane;
|
||||||
|
|
||||||
/* TODO is_sane() stuff */
|
/* TODO is_sane() stuff */
|
||||||
|
@ -276,33 +275,33 @@ struct Sanitizer
|
||||||
fprintf (stderr, "Sanitizer %p start %s\n", blob, __PRETTY_FUNCTION__);
|
fprintf (stderr, "Sanitizer %p start %s\n", blob, __PRETTY_FUNCTION__);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
_hb_sanitize_init (&context, blob);
|
_hb_sanitize_init (context, blob);
|
||||||
|
|
||||||
/* Note: We drop const here */
|
/* Note: We drop const here */
|
||||||
Type *t = CastP<Type> ((void *) context.start);
|
Type *t = CastP<Type> ((void *) context->start);
|
||||||
|
|
||||||
sane = t->sanitize (SANITIZE_ARG_INIT);
|
sane = t->sanitize (SANITIZE_ARG);
|
||||||
if (sane) {
|
if (sane) {
|
||||||
if (context.edit_count) {
|
if (context->edit_count) {
|
||||||
#if HB_DEBUG_SANITIZE
|
#if HB_DEBUG_SANITIZE
|
||||||
fprintf (stderr, "Sanitizer %p passed first round with %d edits; doing a second round %s\n",
|
fprintf (stderr, "Sanitizer %p passed first round with %d edits; doing a second round %s\n",
|
||||||
blob, context.edit_count, __PRETTY_FUNCTION__);
|
blob, context->edit_count, __PRETTY_FUNCTION__);
|
||||||
#endif
|
#endif
|
||||||
/* sanitize again to ensure no toe-stepping */
|
/* sanitize again to ensure no toe-stepping */
|
||||||
context.edit_count = 0;
|
context->edit_count = 0;
|
||||||
sane = t->sanitize (SANITIZE_ARG_INIT);
|
sane = t->sanitize (SANITIZE_ARG);
|
||||||
if (context.edit_count) {
|
if (context->edit_count) {
|
||||||
#if HB_DEBUG_SANITIZE
|
#if HB_DEBUG_SANITIZE
|
||||||
fprintf (stderr, "Sanitizer %p requested %d edits in second round; FAILLING %s\n",
|
fprintf (stderr, "Sanitizer %p requested %d edits in second round; FAILLING %s\n",
|
||||||
blob, context.edit_count, __PRETTY_FUNCTION__);
|
blob, context->edit_count, __PRETTY_FUNCTION__);
|
||||||
#endif
|
#endif
|
||||||
sane = false;
|
sane = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_hb_sanitize_fini (&context, blob);
|
_hb_sanitize_fini (context, blob);
|
||||||
} else {
|
} else {
|
||||||
unsigned int edit_count = context.edit_count;
|
unsigned int edit_count = context->edit_count;
|
||||||
_hb_sanitize_fini (&context, blob);
|
_hb_sanitize_fini (context, blob);
|
||||||
if (edit_count && !hb_blob_is_writable (blob) && hb_blob_try_writable (blob)) {
|
if (edit_count && !hb_blob_is_writable (blob) && hb_blob_try_writable (blob)) {
|
||||||
/* ok, we made it writable by relocating. try again */
|
/* ok, we made it writable by relocating. try again */
|
||||||
#if HB_DEBUG_SANITIZE
|
#if HB_DEBUG_SANITIZE
|
||||||
|
|
|
@ -1450,7 +1450,8 @@ struct PosLookup : Lookup
|
||||||
inline bool apply_once (hb_ot_layout_context_t *context,
|
inline bool apply_once (hb_ot_layout_context_t *context,
|
||||||
hb_buffer_t *buffer,
|
hb_buffer_t *buffer,
|
||||||
unsigned int context_length,
|
unsigned int context_length,
|
||||||
unsigned int nesting_level_left) const
|
unsigned int nesting_level_left,
|
||||||
|
unsigned int apply_depth) const
|
||||||
{
|
{
|
||||||
unsigned int lookup_type = get_type ();
|
unsigned int lookup_type = get_type ();
|
||||||
unsigned int lookup_flag = get_flag ();
|
unsigned int lookup_flag = get_flag ();
|
||||||
|
@ -1460,7 +1461,7 @@ struct PosLookup : Lookup
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
for (unsigned int i = 0; i < get_subtable_count (); i++)
|
for (unsigned int i = 0; i < get_subtable_count (); i++)
|
||||||
if (get_subtable (i).apply (APPLY_ARG_INIT, lookup_type))
|
if (get_subtable (i).apply (APPLY_ARG, lookup_type))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
@ -1483,7 +1484,7 @@ struct PosLookup : Lookup
|
||||||
bool done;
|
bool done;
|
||||||
if (~IN_MASK (buffer->in_pos) & mask)
|
if (~IN_MASK (buffer->in_pos) & mask)
|
||||||
{
|
{
|
||||||
done = apply_once (context, buffer, NO_CONTEXT, MAX_NESTING_LEVEL);
|
done = apply_once (context, buffer, NO_CONTEXT, MAX_NESTING_LEVEL, 0);
|
||||||
ret |= done;
|
ret |= done;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1568,7 +1569,7 @@ static inline bool position_lookup (APPLY_ARG_DEF, unsigned int lookup_index)
|
||||||
if (HB_UNLIKELY (context_length < 1))
|
if (HB_UNLIKELY (context_length < 1))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return l.apply_once (context, buffer, context_length, nesting_level_left);
|
return l.apply_once (context, buffer, context_length, nesting_level_left, apply_depth);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -760,7 +760,8 @@ struct SubstLookup : Lookup
|
||||||
inline bool apply_once (hb_ot_layout_context_t *context,
|
inline bool apply_once (hb_ot_layout_context_t *context,
|
||||||
hb_buffer_t *buffer,
|
hb_buffer_t *buffer,
|
||||||
unsigned int context_length,
|
unsigned int context_length,
|
||||||
unsigned int nesting_level_left) const
|
unsigned int nesting_level_left,
|
||||||
|
unsigned int apply_depth) const
|
||||||
{
|
{
|
||||||
unsigned int lookup_type = get_type ();
|
unsigned int lookup_type = get_type ();
|
||||||
unsigned int lookup_flag = get_flag ();
|
unsigned int lookup_flag = get_flag ();
|
||||||
|
@ -785,7 +786,7 @@ struct SubstLookup : Lookup
|
||||||
|
|
||||||
unsigned int count = get_subtable_count ();
|
unsigned int count = get_subtable_count ();
|
||||||
for (unsigned int i = 0; i < count; i++)
|
for (unsigned int i = 0; i < count; i++)
|
||||||
if (get_subtable (i).apply (APPLY_ARG_INIT, lookup_type))
|
if (get_subtable (i).apply (APPLY_ARG, lookup_type))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
@ -808,7 +809,7 @@ struct SubstLookup : Lookup
|
||||||
while (buffer->in_pos < buffer->in_length)
|
while (buffer->in_pos < buffer->in_length)
|
||||||
{
|
{
|
||||||
if ((~IN_MASK (buffer->in_pos) & mask) &&
|
if ((~IN_MASK (buffer->in_pos) & mask) &&
|
||||||
apply_once (context, buffer, NO_CONTEXT, MAX_NESTING_LEVEL))
|
apply_once (context, buffer, NO_CONTEXT, MAX_NESTING_LEVEL, 0))
|
||||||
ret = true;
|
ret = true;
|
||||||
else
|
else
|
||||||
_hb_buffer_next_glyph (buffer);
|
_hb_buffer_next_glyph (buffer);
|
||||||
|
@ -824,7 +825,7 @@ struct SubstLookup : Lookup
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
if ((~IN_MASK (buffer->in_pos) & mask) &&
|
if ((~IN_MASK (buffer->in_pos) & mask) &&
|
||||||
apply_once (context, buffer, NO_CONTEXT, MAX_NESTING_LEVEL))
|
apply_once (context, buffer, NO_CONTEXT, MAX_NESTING_LEVEL, 0))
|
||||||
ret = true;
|
ret = true;
|
||||||
else
|
else
|
||||||
buffer->in_pos--;
|
buffer->in_pos--;
|
||||||
|
@ -912,7 +913,7 @@ static inline bool substitute_lookup (APPLY_ARG_DEF, unsigned int lookup_index)
|
||||||
if (HB_UNLIKELY (context_length < 1))
|
if (HB_UNLIKELY (context_length < 1))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return l.apply_once (context, buffer, context_length, nesting_level_left);
|
return l.apply_once (context, buffer, context_length, nesting_level_left, apply_depth);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -58,14 +58,6 @@
|
||||||
lookup_flag, \
|
lookup_flag, \
|
||||||
property, \
|
property, \
|
||||||
(HB_DEBUG_APPLY ? apply_depth + 1 : 0)
|
(HB_DEBUG_APPLY ? apply_depth + 1 : 0)
|
||||||
#define APPLY_ARG_INIT \
|
|
||||||
context, \
|
|
||||||
buffer, \
|
|
||||||
context_length, \
|
|
||||||
nesting_level_left, \
|
|
||||||
lookup_flag, \
|
|
||||||
property, \
|
|
||||||
1
|
|
||||||
|
|
||||||
|
|
||||||
typedef bool (*match_func_t) (hb_codepoint_t glyph_id, const USHORT &value, const char *data);
|
typedef bool (*match_func_t) (hb_codepoint_t glyph_id, const USHORT &value, const char *data);
|
||||||
|
|
Loading…
Reference in New Issue