[GSUB] Add GSUB::substitute_lookup()
diff --git a/src/hb-ot-layout-gsub-private.h b/src/hb-ot-layout-gsub-private.h
index 2bf1e9f..3980c6c 100644
--- a/src/hb-ot-layout-gsub-private.h
+++ b/src/hb-ot-layout-gsub-private.h
@@ -692,6 +692,7 @@
 };
 ASSERT_SIZE (ContextSubstFormat1, 6);
 
+
 struct SubClassRule {
   /* TODO */
 
@@ -1177,6 +1178,12 @@
     return *(SubstLookup*)&(((GSUBGPOS *)this)->get_lookup (i));
   }
 
+  inline bool substitute_lookup (hb_ot_layout_t *layout,
+				 hb_buffer_t    *buffer,
+			         unsigned int    lookup_index,
+				 hb_ot_layout_feature_mask_t  mask) const {
+    return get_lookup (lookup_index).substitute_string (layout, buffer, mask);
+  }
 
 };
 DEFINE_NULL_ALIAS (GSUB, GSUBGPOS);
diff --git a/src/hb-ot-layout.cc b/src/hb-ot-layout.cc
index 0cbc1bf..1d696c7 100644
--- a/src/hb-ot-layout.cc
+++ b/src/hb-ot-layout.cc
@@ -529,10 +529,7 @@
 			        unsigned int                 lookup_index,
 				hb_ot_layout_feature_mask_t  mask)
 {
-  const GSUB &gsub = *(layout->gsub);
-  const SubstLookup &l = gsub.get_lookup (lookup_index);
-
-  return l.substitute_string (layout, buffer, mask);
+  return layout->gsub->substitute_lookup (layout, buffer, lookup_index, mask);
 }