[layout] More prep work to memoize collect_features() work
diff --git a/src/hb-ot-layout.cc b/src/hb-ot-layout.cc
index d4bb280..787ef13 100644
--- a/src/hb-ot-layout.cc
+++ b/src/hb-ot-layout.cc
@@ -718,29 +718,24 @@
 }
 
 static void
-_hb_ot_layout_collect_features_languages (hb_face_t      *face,
-                                          hb_tag_t        table_tag,
-                                          unsigned int    script_index,
-                                          const hb_tag_t *languages,
-                                          const hb_tag_t *features,
-                                          hb_set_t       *feature_indexes /* OUT */)
+script_collect_features (const OT::GSUBGPOS &g,
+			 const OT::Script   &s,
+			 const hb_tag_t *languages,
+			 const hb_tag_t *features,
+			 hb_set_t       *feature_indexes /* OUT */)
 {
-  const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
   if (!languages)
   {
     /* All languages. */
     langsys_collect_features (g,
-			      g.get_script (script_index).get_default_lang_sys (),
+			      s.get_default_lang_sys (),
 			      features,
 			      feature_indexes);
 
-    unsigned int count = hb_ot_layout_script_get_language_tags (face,
-								table_tag,
-								script_index,
-								0, nullptr, nullptr);
+    unsigned int count = s.get_lang_sys_count ();
     for (unsigned int language_index = 0; language_index < count; language_index++)
       langsys_collect_features (g,
-				g.get_script (script_index).get_lang_sys (language_index),
+				s.get_lang_sys (language_index),
 				features,
 				feature_indexes);
   }
@@ -749,14 +744,9 @@
     for (; *languages; languages++)
     {
       unsigned int language_index;
-      if (hb_ot_layout_script_select_language (face,
-					       table_tag,
-					       script_index,
-					       1,
-					       languages,
-					       &language_index))
+      if (s.find_lang_sys_index (*languages, &language_index))
 	langsys_collect_features (g,
-				  g.get_script (script_index).get_lang_sys (language_index),
+				  s.get_lang_sys (language_index),
 				  features,
 				  feature_indexes);
     }
@@ -776,35 +766,29 @@
                                const hb_tag_t *features,
                                hb_set_t       *feature_indexes /* OUT */)
 {
+  const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
   if (!scripts)
   {
     /* All scripts. */
-    unsigned int count = hb_ot_layout_table_get_script_tags (face,
-							     table_tag,
-							     0, nullptr, nullptr);
+    unsigned int count = g.get_script_count ();
     for (unsigned int script_index = 0; script_index < count; script_index++)
-      _hb_ot_layout_collect_features_languages (face,
-                                                table_tag,
-                                                script_index,
-                                                languages,
-                                                features,
-                                                feature_indexes);
+      script_collect_features (g,
+			       g.get_script (script_index),
+			       languages,
+			       features,
+			       feature_indexes);
   }
   else
   {
     for (; *scripts; scripts++)
     {
       unsigned int script_index;
-      if (hb_ot_layout_table_find_script (face,
-					  table_tag,
-					  *scripts,
-					  &script_index))
-        _hb_ot_layout_collect_features_languages (face,
-                                                  table_tag,
-                                                  script_index,
-                                                  languages,
-                                                  features,
-                                                  feature_indexes);
+      if (g.find_script_index (*scripts, &script_index))
+	script_collect_features (g,
+				 g.get_script (script_index),
+				 languages,
+				 features,
+				 feature_indexes);
     }
   }
 }