From 173fde7087c0db3e99409f1119530477c14072f5 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Thu, 29 Apr 2010 01:47:30 -0400 Subject: Further simplify tracing --- src/hb-open-type-private.hh | 31 +++++++++++++++---------------- src/hb-ot-layout-gpos-private.hh | 9 +++++---- src/hb-ot-layout-gsub-private.hh | 11 ++++++----- src/hb-ot-layout-gsubgpos-private.hh | 8 -------- 4 files changed, 26 insertions(+), 33 deletions(-) diff --git a/src/hb-open-type-private.hh b/src/hb-open-type-private.hh index 1ee9c6f..1b33183 100644 --- a/src/hb-open-type-private.hh +++ b/src/hb-open-type-private.hh @@ -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 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 ((void *) context.start); + Type *t = CastP ((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 diff --git a/src/hb-ot-layout-gpos-private.hh b/src/hb-ot-layout-gpos-private.hh index 777874b..fe6ac63 100644 --- a/src/hb-ot-layout-gpos-private.hh +++ b/src/hb-ot-layout-gpos-private.hh @@ -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); } diff --git a/src/hb-ot-layout-gsub-private.hh b/src/hb-ot-layout-gsub-private.hh index 77c27a8..9940eba 100644 --- a/src/hb-ot-layout-gsub-private.hh +++ b/src/hb-ot-layout-gsub-private.hh @@ -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); } diff --git a/src/hb-ot-layout-gsubgpos-private.hh b/src/hb-ot-layout-gsubgpos-private.hh index 88f3791..d27cd80 100644 --- a/src/hb-ot-layout-gsubgpos-private.hh +++ b/src/hb-ot-layout-gsubgpos-private.hh @@ -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); -- cgit v1.2.3