summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBehdad Esfahbod <behdad@behdad.org>2010-04-29 01:47:30 -0400
committerBehdad Esfahbod <behdad@behdad.org>2010-04-29 01:47:30 -0400
commit173fde7087c0db3e99409f1119530477c14072f5 (patch)
treece53d02659d49e327313bdff74ed98208d5064f0
parentbc200457430c083914a64bf4b056153506749610 (diff)
Further simplify tracing
-rw-r--r--src/hb-open-type-private.hh31
-rw-r--r--src/hb-ot-layout-gpos-private.hh9
-rw-r--r--src/hb-ot-layout-gsub-private.hh11
-rw-r--r--src/hb-ot-layout-gsubgpos-private.hh8
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 <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
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);