Further simplify tracing
authorBehdad Esfahbod <behdad@behdad.org>
Thu, 29 Apr 2010 05:47:30 +0000 (01:47 -0400)
committerBehdad Esfahbod <behdad@behdad.org>
Thu, 29 Apr 2010 05:47:30 +0000 (01:47 -0400)
src/hb-open-type-private.hh
src/hb-ot-layout-gpos-private.hh
src/hb-ot-layout-gsub-private.hh
src/hb-ot-layout-gsubgpos-private.hh

index 1ee9c6f..1b33183 100644 (file)
@@ -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
index 777874b..fe6ac63 100644 (file)
@@ -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);
 }
 
 
index 77c27a8..9940eba 100644 (file)
@@ -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);
 }
 
 
index 88f3791..d27cd80 100644 (file)
        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);