Add code to lua paths to get the fill path and get lists of verbs and
points

BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2199823002

Review-Url: https://codereview.chromium.org/2199823002
diff --git a/src/utils/SkLua.cpp b/src/utils/SkLua.cpp
index a3a1685..3a335ad 100644
--- a/src/utils/SkLua.cpp
+++ b/src/utils/SkLua.cpp
@@ -221,6 +221,11 @@
     setarray_number(L, index, SkScalarToLua(value));
 }
 
+static void setarray_string(lua_State* L, int index, const char str[]) {
+    lua_pushstring(L, str);
+    lua_rawseti(L, -2, index);
+}
+
 void SkLua::pushBool(bool value, const char key[]) {
     lua_pushboolean(fL, value);
     CHECK_SETFIELD(key);
@@ -1159,6 +1164,19 @@
     return 0;
 }
 
+static int lpaint_getFillPath(lua_State* L) {
+    const SkPaint* paint = get_obj<SkPaint>(L, 1);
+    const SkPath* path = get_obj<SkPath>(L, 2);
+
+    SkPath fillpath;
+    paint->getFillPath(*path, &fillpath);
+
+    SkLua lua(L);
+    lua.pushPath(fillpath);
+
+    return 1;
+}
+
 static int lpaint_gc(lua_State* L) {
     get_obj<SkPaint>(L, 1)->~SkPaint();
     return 0;
@@ -1217,6 +1235,7 @@
     { "getShader", lpaint_getShader },
     { "setShader", lpaint_setShader },
     { "getPathEffect", lpaint_getPathEffect },
+    { "getFillPath", lpaint_getFillPath },
     { "__gc", lpaint_gc },
     { nullptr, nullptr }
 };
@@ -1586,6 +1605,45 @@
     return 1;
 }
 
+static int lpath_getVerbs(lua_State* L) {
+    const SkPath* path = get_obj<SkPath>(L, 1);
+    SkPath::Iter iter(*path, false);
+    SkPoint pts[4];
+
+    lua_newtable(L);
+
+    bool done = false;
+    int i = 0;
+    do {
+        switch (iter.next(pts, true)) {
+            case SkPath::kMove_Verb:
+                setarray_string(L, ++i, "move");
+                break;
+            case SkPath::kClose_Verb:
+                setarray_string(L, ++i, "close");
+                break;
+            case SkPath::kLine_Verb:
+                setarray_string(L, ++i, "line");
+                break;
+            case SkPath::kQuad_Verb:
+                setarray_string(L, ++i, "quad");
+                break;
+            case SkPath::kConic_Verb:
+                setarray_string(L, ++i, "conic");
+                break;
+            case SkPath::kCubic_Verb:
+                setarray_string(L, ++i, "cubic");
+                break;
+            case SkPath::kDone_Verb:
+                setarray_string(L, ++i, "done");
+                done = true;
+                break;
+        }
+    } while (!done);
+
+    return 1;
+}
+
 static int lpath_reset(lua_State* L) {
     get_obj<SkPath>(L, 1)->reset();
     return 0;
@@ -1628,6 +1686,7 @@
     { "getBounds", lpath_getBounds },
     { "getFillType", lpath_getFillType },
     { "getSegmentTypes", lpath_getSegmentTypes },
+    { "getVerbs", lpath_getVerbs },
     { "isConvex", lpath_isConvex },
     { "isEmpty", lpath_isEmpty },
     { "isRect", lpath_isRect },