Make closure() return void
diff --git a/src/hb-ot-layout-gsub-table.hh b/src/hb-ot-layout-gsub-table.hh
index e4e631a..371672a 100644
--- a/src/hb-ot-layout-gsub-table.hh
+++ b/src/hb-ot-layout-gsub-table.hh
@@ -39,17 +39,15 @@
 
   private:
 
-  inline bool closure (hb_closure_context_t *c) const
+  inline void closure (hb_closure_context_t *c) const
   {
     TRACE_CLOSURE ();
-    bool ret = false;
     Coverage::Iter iter;
     for (iter.init (this+coverage); iter.more (); iter.next ()) {
       hb_codepoint_t glyph_id = iter.get_glyph ();
       if (c->glyphs->has (glyph_id))
-	ret = c->glyphs->add ((glyph_id + deltaGlyphID) & 0xFFFF) || ret;
+	c->glyphs->add ((glyph_id + deltaGlyphID) & 0xFFFF);
     }
-    return ret;
   }
 
   inline bool would_apply (hb_codepoint_t glyph_id) const
@@ -96,16 +94,14 @@
 
   private:
 
-  inline bool closure (hb_closure_context_t *c) const
+  inline void closure (hb_closure_context_t *c) const
   {
     TRACE_CLOSURE ();
-    bool ret = false;
     Coverage::Iter iter;
     for (iter.init (this+coverage); iter.more (); iter.next ()) {
       if (c->glyphs->has (iter.get_glyph ()))
-	ret = c->glyphs->add (substitute[iter.get_coverage ()]) || ret;
+	c->glyphs->add (substitute[iter.get_coverage ()]);
     }
-    return ret;
   }
 
   inline bool would_apply (hb_codepoint_t glyph_id) const
@@ -154,13 +150,13 @@
 
   private:
 
-  inline bool closure (hb_closure_context_t *c) const
+  inline void closure (hb_closure_context_t *c) const
   {
     TRACE_CLOSURE ();
     switch (u.format) {
-    case 1: return u.format1.closure (c);
-    case 2: return u.format2.closure (c);
-    default:return false;
+    case 1: u.format1.closure (c); break;
+    case 2: u.format2.closure (c); break;
+    default:                       break;
     }
   }
 
@@ -208,14 +204,12 @@
 
   private:
 
-  inline bool closure (hb_closure_context_t *c) const
+  inline void closure (hb_closure_context_t *c) const
   {
     TRACE_CLOSURE ();
     unsigned int count = substitute.len;
-    bool ret = false;
     for (unsigned int i = 0; i < count; i++)
-      ret = c->glyphs->add (substitute[i]) || ret;
-    return ret;
+      c->glyphs->add (substitute[i]);
   }
 
   inline bool apply (hb_apply_context_t *c) const
@@ -250,16 +244,14 @@
 
   private:
 
-  inline bool closure (hb_closure_context_t *c) const
+  inline void closure (hb_closure_context_t *c) const
   {
     TRACE_CLOSURE ();
-    bool ret = false;
     Coverage::Iter iter;
     for (iter.init (this+coverage); iter.more (); iter.next ()) {
       if (c->glyphs->has (iter.get_glyph ()))
-	ret = (this+sequence[iter.get_coverage ()]).closure (c) || ret;
+	(this+sequence[iter.get_coverage ()]).closure (c);
     }
-    return ret;
   }
 
   inline bool would_apply (hb_codepoint_t glyph_id) const
@@ -302,12 +294,12 @@
 
   private:
 
-  inline bool closure (hb_closure_context_t *c) const
+  inline void closure (hb_closure_context_t *c) const
   {
     TRACE_CLOSURE ();
     switch (u.format) {
-    case 1: return u.format1.closure (c);
-    default:return false;
+    case 1: u.format1.closure (c); break;
+    default:                       break;
     }
   }
 
@@ -354,20 +346,18 @@
 
   private:
 
-  inline bool closure (hb_closure_context_t *c) const
+  inline void closure (hb_closure_context_t *c) const
   {
     TRACE_CLOSURE ();
-    bool ret = false;
     Coverage::Iter iter;
     for (iter.init (this+coverage); iter.more (); iter.next ()) {
       if (c->glyphs->has (iter.get_glyph ())) {
 	const AlternateSet &alt_set = this+alternateSet[iter.get_coverage ()];
 	unsigned int count = alt_set.len;
 	for (unsigned int i = 0; i < count; i++)
-	  ret = c->glyphs->add (alt_set[i]) || ret;
+	  c->glyphs->add (alt_set[i]);
       }
     }
-    return ret;
   }
 
   inline bool would_apply (hb_codepoint_t glyph_id) const
@@ -430,12 +420,12 @@
 
   private:
 
-  inline bool closure (hb_closure_context_t *c) const
+  inline void closure (hb_closure_context_t *c) const
   {
     TRACE_CLOSURE ();
     switch (u.format) {
-    case 1: return u.format1.closure (c);
-    default:return false;
+    case 1: u.format1.closure (c); break;
+    default:                       break;
     }
   }
 
@@ -479,14 +469,14 @@
 
   private:
 
-  inline bool closure (hb_closure_context_t *c) const
+  inline void closure (hb_closure_context_t *c) const
   {
     TRACE_CLOSURE ();
     unsigned int count = component.len;
     for (unsigned int i = 1; i < count; i++)
       if (!c->glyphs->has (component[i]))
-        return false;
-    return c->glyphs->add (ligGlyph);
+        return;
+    c->glyphs->add (ligGlyph);
   }
 
   inline bool would_apply (hb_codepoint_t second) const
@@ -584,17 +574,12 @@
 
   private:
 
-  inline bool closure (hb_closure_context_t *c) const
+  inline void closure (hb_closure_context_t *c) const
   {
     TRACE_CLOSURE ();
-    bool ret = false;
     unsigned int num_ligs = ligature.len;
     for (unsigned int i = 0; i < num_ligs; i++)
-    {
-      const Ligature &lig = this+ligature[i];
-      ret = lig.closure (c) || ret;
-    }
-    return ret;
+      (this+ligature[i]).closure (c);
   }
 
   inline bool would_apply (hb_codepoint_t second) const
@@ -643,17 +628,14 @@
 
   private:
 
-  inline bool closure (hb_closure_context_t *c) const
+  inline void closure (hb_closure_context_t *c) const
   {
     TRACE_CLOSURE ();
-    bool ret = false;
     Coverage::Iter iter;
     for (iter.init (this+coverage); iter.more (); iter.next ()) {
       if (c->glyphs->has (iter.get_glyph ()))
-	ret = (this+ligatureSet[iter.get_coverage ()]).closure (c) || ret;
+	(this+ligatureSet[iter.get_coverage ()]).closure (c);
     }
-    return ret;
-    return false;
   }
 
   inline bool would_apply (hb_codepoint_t first, hb_codepoint_t second) const
@@ -700,12 +682,12 @@
 
   private:
 
-  inline bool closure (hb_closure_context_t *c) const
+  inline void closure (hb_closure_context_t *c) const
   {
     TRACE_CLOSURE ();
     switch (u.format) {
-    case 1: return u.format1.closure (c);
-    default:return false;
+    case 1: u.format1.closure (c); break;
+    default:                       break;
     }
   }
 
@@ -744,7 +726,7 @@
 
 
 static inline bool substitute_lookup (hb_apply_context_t *c, unsigned int lookup_index);
-static inline bool closure_lookup (hb_closure_context_t *c, unsigned int lookup_index);
+static inline void closure_lookup (hb_closure_context_t *c, unsigned int lookup_index);
 
 struct ContextSubst : Context
 {
@@ -752,7 +734,7 @@
 
   private:
 
-  inline bool closure (hb_closure_context_t *c) const
+  inline void closure (hb_closure_context_t *c) const
   {
     TRACE_CLOSURE ();
     return Context::closure (c, closure_lookup);
@@ -771,7 +753,7 @@
 
   private:
 
-  inline bool closure (hb_closure_context_t *c) const
+  inline void closure (hb_closure_context_t *c) const
   {
     TRACE_CLOSURE ();
     return ChainContext::closure (c, closure_lookup);
@@ -798,7 +780,7 @@
     return StructAtOffset<SubstLookupSubTable> (this, offset);
   }
 
-  inline bool closure (hb_closure_context_t *c) const;
+  inline void closure (hb_closure_context_t *c) const;
   inline bool would_apply (hb_codepoint_t glyph_id) const;
   inline bool would_apply (hb_codepoint_t first, hb_codepoint_t second) const;
 
@@ -816,7 +798,7 @@
 
   private:
 
-  inline bool closure (hb_closure_context_t *c) const
+  inline void closure (hb_closure_context_t *c) const
   {
     TRACE_CLOSURE ();
     const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage> > (backtrack);
@@ -826,21 +808,19 @@
     count = backtrack.len;
     for (unsigned int i = 0; i < count; i++)
       if (!(this+backtrack[i]).intersects (c->glyphs))
-        return false;
+        return;
 
     count = lookahead.len;
     for (unsigned int i = 0; i < count; i++)
       if (!(this+lookahead[i]).intersects (c->glyphs))
-        return false;
+        return;
 
     const ArrayOf<GlyphID> &substitute = StructAfter<ArrayOf<GlyphID> > (lookahead);
-    bool ret = false;
     Coverage::Iter iter;
     for (iter.init (this+coverage); iter.more (); iter.next ()) {
       if (c->glyphs->has (iter.get_glyph ()))
-	ret = c->glyphs->add (substitute[iter.get_coverage ()]) || ret;
+	c->glyphs->add (substitute[iter.get_coverage ()]);
     }
-    return false;
   }
 
   inline bool apply (hb_apply_context_t *c) const
@@ -910,12 +890,12 @@
 
   private:
 
-  inline bool closure (hb_closure_context_t *c) const
+  inline void closure (hb_closure_context_t *c) const
   {
     TRACE_CLOSURE ();
     switch (u.format) {
-    case 1: return u.format1.closure (c);
-    default:return false;
+    case 1: u.format1.closure (c); break;
+    default:                       break;
     }
   }
 
@@ -965,20 +945,20 @@
     ReverseChainSingle	= 8
   };
 
-  inline bool closure (hb_closure_context_t *c,
+  inline void closure (hb_closure_context_t *c,
 		       unsigned int    lookup_type) const
   {
     TRACE_CLOSURE ();
     switch (lookup_type) {
-    case Single:		return u.single.closure (c);
-    case Multiple:		return u.multiple.closure (c);
-    case Alternate:		return u.alternate.closure (c);
-    case Ligature:		return u.ligature.closure (c);
-    case Context:		return u.c.closure (c);
-    case ChainContext:		return u.chainContext.closure (c);
-    case Extension:		return u.extension.closure (c);
-    case ReverseChainSingle:	return u.reverseChainContextSingle.closure (c);
-    default:return false;
+    case Single:		u.single.closure (c); break;
+    case Multiple:		u.multiple.closure (c); break;
+    case Alternate:		u.alternate.closure (c); break;
+    case Ligature:		u.ligature.closure (c); break;
+    case Context:		u.c.closure (c); break;
+    case ChainContext:		u.chainContext.closure (c); break;
+    case Extension:		u.extension.closure (c); break;
+    case ReverseChainSingle:	u.reverseChainContextSingle.closure (c); break;
+    default:                    break;
     }
   }
 
@@ -1068,14 +1048,12 @@
     return lookup_type_is_reverse (type);
   }
 
-  inline bool closure (hb_closure_context_t *c) const
+  inline void closure (hb_closure_context_t *c) const
   {
     unsigned int lookup_type = get_type ();
-    bool ret = false;
     unsigned int count = get_subtable_count ();
     for (unsigned int i = 0; i < count; i++)
-      ret = get_subtable (i).closure (c, lookup_type) || ret;
-    return ret;
+      get_subtable (i).closure (c, lookup_type);
   }
 
   inline bool would_apply (hb_codepoint_t glyph_id) const
@@ -1196,7 +1174,7 @@
   static inline void substitute_start (hb_buffer_t *buffer);
   static inline void substitute_finish (hb_buffer_t *buffer);
 
-  inline bool closure_lookup (hb_closure_context_t *c,
+  inline void closure_lookup (hb_closure_context_t *c,
 			      unsigned int          lookup_index) const
   { return get_lookup (lookup_index).closure (c); }
 
@@ -1231,9 +1209,9 @@
 
 /* Out-of-class implementation for methods recursing */
 
-inline bool ExtensionSubst::closure (hb_closure_context_t *c) const
+inline void ExtensionSubst::closure (hb_closure_context_t *c) const
 {
-  return get_subtable ().closure (c, get_type ());
+  get_subtable ().closure (c, get_type ());
 }
 
 inline bool ExtensionSubst::would_apply (hb_codepoint_t glyph_id) const
@@ -1269,19 +1247,17 @@
   return SubstLookup::lookup_type_is_reverse (type);
 }
 
-static inline bool closure_lookup (hb_closure_context_t *c, unsigned int lookup_index)
+static inline void closure_lookup (hb_closure_context_t *c, unsigned int lookup_index)
 {
   const GSUB &gsub = *(c->face->ot_layout->gsub);
   const SubstLookup &l = gsub.get_lookup (lookup_index);
 
   if (unlikely (c->nesting_level_left == 0))
-    return false;
+    return;
 
   c->nesting_level_left--;
-  bool ret = l.closure (c);
+  l.closure (c);
   c->nesting_level_left++;
-
-  return ret;
 }
 
 static inline bool substitute_lookup (hb_apply_context_t *c, unsigned int lookup_index)