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 \
|
||||
context, \
|
||||
(HB_DEBUG_SANITIZE ? sanitize_depth + 1 : 0)
|
||||
#define SANITIZE_ARG_INIT \
|
||||
&context, \
|
||||
1
|
||||
|
||||
|
||||
typedef struct _hb_sanitize_context_t hb_sanitize_context_t;
|
||||
struct _hb_sanitize_context_t
|
||||
|
@ -266,7 +264,8 @@ template <typename Type>
|
|||
struct Sanitizer
|
||||
{
|
||||
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;
|
||||
|
||||
/* TODO is_sane() stuff */
|
||||
|
@ -276,33 +275,33 @@ struct Sanitizer
|
|||
fprintf (stderr, "Sanitizer %p start %s\n", blob, __PRETTY_FUNCTION__);
|
||||
#endif
|
||||
|
||||
_hb_sanitize_init (&context, blob);
|
||||
_hb_sanitize_init (context, blob);
|
||||
|
||||
/* 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 (context.edit_count) {
|
||||
if (context->edit_count) {
|
||||
#if HB_DEBUG_SANITIZE
|
||||
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
|
||||
/* sanitize again to ensure no toe-stepping */
|
||||
context.edit_count = 0;
|
||||
sane = t->sanitize (SANITIZE_ARG_INIT);
|
||||
if (context.edit_count) {
|
||||
context->edit_count = 0;
|
||||
sane = t->sanitize (SANITIZE_ARG);
|
||||
if (context->edit_count) {
|
||||
#if HB_DEBUG_SANITIZE
|
||||
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
|
||||
sane = false;
|
||||
}
|
||||
}
|
||||
_hb_sanitize_fini (&context, blob);
|
||||
_hb_sanitize_fini (context, blob);
|
||||
} else {
|
||||
unsigned int edit_count = context.edit_count;
|
||||
_hb_sanitize_fini (&context, blob);
|
||||
unsigned int edit_count = context->edit_count;
|
||||
_hb_sanitize_fini (context, blob);
|
||||
if (edit_count && !hb_blob_is_writable (blob) && hb_blob_try_writable (blob)) {
|
||||
/* ok, we made it writable by relocating. try again */
|
||||
#if HB_DEBUG_SANITIZE
|
||||
|
|
|
@ -1450,7 +1450,8 @@ struct PosLookup : Lookup
|
|||
inline bool apply_once (hb_ot_layout_context_t *context,
|
||||
hb_buffer_t *buffer,
|
||||
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_flag = get_flag ();
|
||||
|
@ -1460,7 +1461,7 @@ struct PosLookup : Lookup
|
|||
return false;
|
||||
|
||||
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 false;
|
||||
|
@ -1483,7 +1484,7 @@ struct PosLookup : Lookup
|
|||
bool done;
|
||||
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;
|
||||
}
|
||||
else
|
||||
|
@ -1568,7 +1569,7 @@ static inline bool position_lookup (APPLY_ARG_DEF, unsigned int lookup_index)
|
|||
if (HB_UNLIKELY (context_length < 1))
|
||||
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,
|
||||
hb_buffer_t *buffer,
|
||||
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_flag = get_flag ();
|
||||
|
@ -785,7 +786,7 @@ struct SubstLookup : Lookup
|
|||
|
||||
unsigned int count = get_subtable_count ();
|
||||
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 false;
|
||||
|
@ -808,7 +809,7 @@ struct SubstLookup : Lookup
|
|||
while (buffer->in_pos < buffer->in_length)
|
||||
{
|
||||
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;
|
||||
else
|
||||
_hb_buffer_next_glyph (buffer);
|
||||
|
@ -824,7 +825,7 @@ struct SubstLookup : Lookup
|
|||
do
|
||||
{
|
||||
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;
|
||||
else
|
||||
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))
|
||||
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, \
|
||||
property, \
|
||||
(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);
|
||||
|
|
Loading…
Reference in New Issue