diff --git a/fxjs/cjs_annot.cpp b/fxjs/cjs_annot.cpp
index 62fdfb8..69eccef 100644
--- a/fxjs/cjs_annot.cpp
+++ b/fxjs/cjs_annot.cpp
@@ -22,8 +22,7 @@
 const JSPropertySpec CJS_Annot::PropertySpecs[] = {
     {"hidden", get_hidden_static, set_hidden_static},
     {"name", get_name_static, set_name_static},
-    {"type", get_type_static, set_type_static},
-    {0, 0, 0}};
+    {"type", get_type_static, set_type_static}};
 
 int CJS_Annot::ObjDefnID = -1;
 
@@ -37,7 +36,7 @@
   ObjDefnID = pEngine->DefineObj("Annot", FXJSOBJTYPE_DYNAMIC,
                                  JSConstructor<CJS_Annot, Annot>,
                                  JSDestructor<CJS_Annot>);
-  DefineProps(pEngine, ObjDefnID, PropertySpecs);
+  DefineProps(pEngine, ObjDefnID, PropertySpecs, FX_ArraySize(PropertySpecs));
 }
 
 Annot::Annot(CJS_Object* pJSObject) : CJS_EmbedObj(pJSObject) {}
diff --git a/fxjs/cjs_app.cpp b/fxjs/cjs_app.cpp
index e89fb2a..32cac22 100644
--- a/fxjs/cjs_app.cpp
+++ b/fxjs/cjs_app.cpp
@@ -48,8 +48,7 @@
     {"viewerType", get_viewer_type_static, set_viewer_type_static},
     {"viewerVariation", get_viewer_variation_static,
      set_viewer_variation_static},
-    {"viewerVersion", get_viewer_version_static, set_viewer_version_static},
-    {0, 0, 0}};
+    {"viewerVersion", get_viewer_version_static, set_viewer_version_static}};
 
 const JSMethodSpec CJS_App::MethodSpecs[] = {
     {"alert", alert_static},
@@ -72,8 +71,7 @@
     {"popUpMenu", popUpMenu_static},
     {"response", response_static},
     {"setInterval", setInterval_static},
-    {"setTimeOut", setTimeOut_static},
-    {0, 0}};
+    {"setTimeOut", setTimeOut_static}};
 
 int CJS_App::ObjDefnID = -1;
 
@@ -82,8 +80,8 @@
   ObjDefnID =
       pEngine->DefineObj("app", FXJSOBJTYPE_STATIC, JSConstructor<CJS_App, app>,
                          JSDestructor<CJS_App>);
-  DefineProps(pEngine, ObjDefnID, PropertySpecs);
-  DefineMethods(pEngine, ObjDefnID, MethodSpecs);
+  DefineProps(pEngine, ObjDefnID, PropertySpecs, FX_ArraySize(PropertySpecs));
+  DefineMethods(pEngine, ObjDefnID, MethodSpecs, FX_ArraySize(MethodSpecs));
 }
 
 app::app(CJS_Object* pJSObject)
diff --git a/fxjs/cjs_border.cpp b/fxjs/cjs_border.cpp
index 24d50ff..95693f4 100644
--- a/fxjs/cjs_border.cpp
+++ b/fxjs/cjs_border.cpp
@@ -11,8 +11,7 @@
     {"b", JSConstSpec::String, 0, "beveled"},
     {"d", JSConstSpec::String, 0, "dashed"},
     {"i", JSConstSpec::String, 0, "inset"},
-    {"u", JSConstSpec::String, 0, "underline"},
-    {0, JSConstSpec::Number, 0, 0}};
+    {"u", JSConstSpec::String, 0, "underline"}};
 
 int CJS_Border::ObjDefnID = -1;
 
@@ -20,5 +19,5 @@
 void CJS_Border::DefineJSObjects(CFXJS_Engine* pEngine) {
   ObjDefnID =
       pEngine->DefineObj("border", FXJSOBJTYPE_STATIC, nullptr, nullptr);
-  DefineConsts(pEngine, ObjDefnID, ConstSpecs);
+  DefineConsts(pEngine, ObjDefnID, ConstSpecs, FX_ArraySize(ConstSpecs));
 }
diff --git a/fxjs/cjs_color.cpp b/fxjs/cjs_color.cpp
index 1bebf79..58a98dd 100644
--- a/fxjs/cjs_color.cpp
+++ b/fxjs/cjs_color.cpp
@@ -26,12 +26,10 @@
     {"red", get_red_static, set_red_static},
     {"transparent", get_transparent_static, set_transparent_static},
     {"white", get_white_static, set_white_static},
-    {"yellow", get_yellow_static, set_yellow_static},
-    {0, 0, 0}};
+    {"yellow", get_yellow_static, set_yellow_static}};
 
 const JSMethodSpec CJS_Color::MethodSpecs[] = {{"convert", convert_static},
-                                               {"equal", equal_static},
-                                               {0, 0}};
+                                               {"equal", equal_static}};
 
 int CJS_Color::ObjDefnID = -1;
 
@@ -40,8 +38,8 @@
   ObjDefnID = pEngine->DefineObj("color", FXJSOBJTYPE_STATIC,
                                  JSConstructor<CJS_Color, color>,
                                  JSDestructor<CJS_Color>);
-  DefineProps(pEngine, ObjDefnID, PropertySpecs);
-  DefineMethods(pEngine, ObjDefnID, MethodSpecs);
+  DefineProps(pEngine, ObjDefnID, PropertySpecs, FX_ArraySize(PropertySpecs));
+  DefineMethods(pEngine, ObjDefnID, MethodSpecs, FX_ArraySize(MethodSpecs));
 }
 
 // static
diff --git a/fxjs/cjs_console.cpp b/fxjs/cjs_console.cpp
index c5e23a3..1921cd2 100644
--- a/fxjs/cjs_console.cpp
+++ b/fxjs/cjs_console.cpp
@@ -16,8 +16,7 @@
 const JSMethodSpec CJS_Console::MethodSpecs[] = {{"clear", clear_static},
                                                  {"hide", hide_static},
                                                  {"println", println_static},
-                                                 {"show", show_static},
-                                                 {0, 0}};
+                                                 {"show", show_static}};
 
 int CJS_Console::ObjDefnID = -1;
 
@@ -26,7 +25,7 @@
   ObjDefnID = pEngine->DefineObj("console", FXJSOBJTYPE_STATIC,
                                  JSConstructor<CJS_Console, console>,
                                  JSDestructor<CJS_Console>);
-  DefineMethods(pEngine, ObjDefnID, MethodSpecs);
+  DefineMethods(pEngine, ObjDefnID, MethodSpecs, FX_ArraySize(MethodSpecs));
 }
 
 console::console(CJS_Object* pJSObject) : CJS_EmbedObj(pJSObject) {}
diff --git a/fxjs/cjs_display.cpp b/fxjs/cjs_display.cpp
index a52b51d..6970bfc 100644
--- a/fxjs/cjs_display.cpp
+++ b/fxjs/cjs_display.cpp
@@ -10,8 +10,7 @@
     {"visible", JSConstSpec::Number, 0, 0},
     {"hidden", JSConstSpec::Number, 1, 0},
     {"noPrint", JSConstSpec::Number, 2, 0},
-    {"noView", JSConstSpec::Number, 3, 0},
-    {0, JSConstSpec::Number, 0, 0}};
+    {"noView", JSConstSpec::Number, 3, 0}};
 
 int CJS_Display::ObjDefnID = -1;
 
@@ -19,5 +18,5 @@
 void CJS_Display::DefineJSObjects(CFXJS_Engine* pEngine) {
   ObjDefnID =
       pEngine->DefineObj("display", FXJSOBJTYPE_STATIC, nullptr, nullptr);
-  DefineConsts(pEngine, ObjDefnID, ConstSpecs);
+  DefineConsts(pEngine, ObjDefnID, ConstSpecs, FX_ArraySize(ConstSpecs));
 }
diff --git a/fxjs/cjs_document.cpp b/fxjs/cjs_document.cpp
index 46ece17..d4eca2f 100644
--- a/fxjs/cjs_document.cpp
+++ b/fxjs/cjs_document.cpp
@@ -61,8 +61,7 @@
     {"title", get_title_static, set_title_static},
     {"URL", get_URL_static, set_URL_static},
     {"zoom", get_zoom_static, set_zoom_static},
-    {"zoomType", get_zoom_type_static, set_zoom_type_static},
-    {0, 0, 0}};
+    {"zoomType", get_zoom_type_static, set_zoom_type_static}};
 
 const JSMethodSpec CJS_Document::MethodSpecs[] = {
     {"addAnnot", addAnnot_static},
@@ -106,8 +105,7 @@
     {"saveAs", saveAs_static},
     {"submitForm", submitForm_static},
     {"syncAnnotScan", syncAnnotScan_static},
-    {"mailDoc", mailDoc_static},
-    {0, 0}};
+    {"mailDoc", mailDoc_static}};
 
 int CJS_Document::ObjDefnID = -1;
 
@@ -121,8 +119,8 @@
   ObjDefnID = pEngine->DefineObj("Document", FXJSOBJTYPE_GLOBAL,
                                  JSConstructor<CJS_Document, Document>,
                                  JSDestructor<CJS_Document>);
-  DefineProps(pEngine, ObjDefnID, PropertySpecs);
-  DefineMethods(pEngine, ObjDefnID, MethodSpecs);
+  DefineProps(pEngine, ObjDefnID, PropertySpecs, FX_ArraySize(PropertySpecs));
+  DefineMethods(pEngine, ObjDefnID, MethodSpecs, FX_ArraySize(MethodSpecs));
 }
 
 void CJS_Document::InitInstance(IJS_Runtime* pIRuntime) {
diff --git a/fxjs/cjs_event.cpp b/fxjs/cjs_event.cpp
index 2d4508a..4fb988f 100644
--- a/fxjs/cjs_event.cpp
+++ b/fxjs/cjs_event.cpp
@@ -32,8 +32,7 @@
     {"targetName", get_target_name_static, set_target_name_static},
     {"type", get_type_static, set_type_static},
     {"value", get_value_static, set_value_static},
-    {"willCommit", get_will_commit_static, set_will_commit_static},
-    {0, 0, 0}};
+    {"willCommit", get_will_commit_static, set_will_commit_static}};
 
 int CJS_Event::ObjDefnID = -1;
 
@@ -42,7 +41,7 @@
   ObjDefnID = pEngine->DefineObj("event", FXJSOBJTYPE_STATIC,
                                  JSConstructor<CJS_Event, event>,
                                  JSDestructor<CJS_Event>);
-  DefineProps(pEngine, ObjDefnID, PropertySpecs);
+  DefineProps(pEngine, ObjDefnID, PropertySpecs, FX_ArraySize(PropertySpecs));
 }
 
 event::event(CJS_Object* pJsObject) : CJS_EmbedObj(pJsObject) {}
diff --git a/fxjs/cjs_field.cpp b/fxjs/cjs_field.cpp
index cb8eb6b..f2e27f2 100644
--- a/fxjs/cjs_field.cpp
+++ b/fxjs/cjs_field.cpp
@@ -124,8 +124,7 @@
     {"userName", get_user_name_static, set_user_name_static},
     {"value", get_value_static, set_value_static},
     {"valueAsString", get_value_as_string_static, set_value_as_string_static},
-    {"source", get_source_static, set_source_static},
-    {0, 0, 0}};
+    {"source", get_source_static, set_source_static}};
 
 const JSMethodSpec CJS_Field::MethodSpecs[] = {
     {"browseForFileToSubmit", browseForFileToSubmit_static},
@@ -153,8 +152,7 @@
     {"signatureInfo", signatureInfo_static},
     {"signatureSetSeedValue", signatureSetSeedValue_static},
     {"signatureSign", signatureSign_static},
-    {"signatureValidate", signatureValidate_static},
-    {0, 0}};
+    {"signatureValidate", signatureValidate_static}};
 
 int CJS_Field::ObjDefnID = -1;
 
@@ -168,8 +166,8 @@
   ObjDefnID = pEngine->DefineObj("Field", FXJSOBJTYPE_DYNAMIC,
                                  JSConstructor<CJS_Field, Field>,
                                  JSDestructor<CJS_Field>);
-  DefineProps(pEngine, ObjDefnID, PropertySpecs);
-  DefineMethods(pEngine, ObjDefnID, MethodSpecs);
+  DefineProps(pEngine, ObjDefnID, PropertySpecs, FX_ArraySize(PropertySpecs));
+  DefineMethods(pEngine, ObjDefnID, MethodSpecs, FX_ArraySize(MethodSpecs));
 }
 
 void CJS_Field::InitInstance(IJS_Runtime* pIRuntime) {}
diff --git a/fxjs/cjs_font.cpp b/fxjs/cjs_font.cpp
index b4ef66b..54b392f 100644
--- a/fxjs/cjs_font.cpp
+++ b/fxjs/cjs_font.cpp
@@ -20,13 +20,12 @@
     {"CourI", JSConstSpec::String, 0, "Courier-Oblique"},
     {"CourBI", JSConstSpec::String, 0, "Courier-BoldOblique"},
     {"Symbol", JSConstSpec::String, 0, "Symbol"},
-    {"ZapfD", JSConstSpec::String, 0, "ZapfDingbats"},
-    {0, JSConstSpec::Number, 0, 0}};
+    {"ZapfD", JSConstSpec::String, 0, "ZapfDingbats"}};
 
 int CJS_Font::ObjDefnID = -1;
 
 // static
 void CJS_Font::DefineJSObjects(CFXJS_Engine* pEngine) {
   ObjDefnID = pEngine->DefineObj("font", FXJSOBJTYPE_STATIC, nullptr, nullptr);
-  DefineConsts(pEngine, ObjDefnID, ConstSpecs);
+  DefineConsts(pEngine, ObjDefnID, ConstSpecs, FX_ArraySize(ConstSpecs));
 }
diff --git a/fxjs/cjs_global.cpp b/fxjs/cjs_global.cpp
index 95124ff..2376354 100644
--- a/fxjs/cjs_global.cpp
+++ b/fxjs/cjs_global.cpp
@@ -174,8 +174,7 @@
 }  // namespace
 
 const JSMethodSpec CJS_Global::MethodSpecs[] = {
-    {"setPersistent", setPersistent_static},
-    {0, 0}};
+    {"setPersistent", setPersistent_static}};
 
 int CJS_Global::ObjDefnID = -1;
 
@@ -227,7 +226,7 @@
   ObjDefnID = pEngine->DefineObj("global", FXJSOBJTYPE_STATIC,
                                  JSConstructor<CJS_Global, JSGlobalAlternate>,
                                  JSDestructor<CJS_Global>);
-  DefineMethods(pEngine, ObjDefnID, MethodSpecs);
+  DefineMethods(pEngine, ObjDefnID, MethodSpecs, FX_ArraySize(MethodSpecs));
   DefineAllProperties(pEngine);
 }
 
diff --git a/fxjs/cjs_highlight.cpp b/fxjs/cjs_highlight.cpp
index 453a266..e60a5a8 100644
--- a/fxjs/cjs_highlight.cpp
+++ b/fxjs/cjs_highlight.cpp
@@ -10,8 +10,7 @@
     {"n", JSConstSpec::String, 0, "none"},
     {"i", JSConstSpec::String, 0, "invert"},
     {"p", JSConstSpec::String, 0, "push"},
-    {"o", JSConstSpec::String, 0, "outline"},
-    {0, JSConstSpec::Number, 0, 0}};
+    {"o", JSConstSpec::String, 0, "outline"}};
 
 int CJS_Highlight::ObjDefnID = -1;
 
@@ -19,5 +18,5 @@
 void CJS_Highlight::DefineJSObjects(CFXJS_Engine* pEngine) {
   ObjDefnID =
       pEngine->DefineObj("highlight", FXJSOBJTYPE_STATIC, nullptr, nullptr);
-  DefineConsts(pEngine, ObjDefnID, ConstSpecs);
+  DefineConsts(pEngine, ObjDefnID, ConstSpecs, FX_ArraySize(ConstSpecs));
 }
diff --git a/fxjs/cjs_icon.cpp b/fxjs/cjs_icon.cpp
index c4ef8e1..2b56f70 100644
--- a/fxjs/cjs_icon.cpp
+++ b/fxjs/cjs_icon.cpp
@@ -7,8 +7,7 @@
 #include "fxjs/cjs_icon.h"
 
 const JSPropertySpec CJS_Icon::PropertySpecs[] = {
-    {"name", get_name_static, set_name_static},
-    {0, 0, 0}};
+    {"name", get_name_static, set_name_static}};
 
 int CJS_Icon::ObjDefnID = -1;
 
@@ -22,7 +21,7 @@
   ObjDefnID =
       pEngine->DefineObj("Icon", FXJSOBJTYPE_DYNAMIC,
                          JSConstructor<CJS_Icon, Icon>, JSDestructor<CJS_Icon>);
-  DefineProps(pEngine, ObjDefnID, PropertySpecs);
+  DefineProps(pEngine, ObjDefnID, PropertySpecs, FX_ArraySize(PropertySpecs));
 }
 
 Icon::Icon(CJS_Object* pJSObject)
diff --git a/fxjs/cjs_object.cpp b/fxjs/cjs_object.cpp
index ccddc7f..a1e5ce1 100644
--- a/fxjs/cjs_object.cpp
+++ b/fxjs/cjs_object.cpp
@@ -9,8 +9,9 @@
 // static
 void CJS_Object::DefineConsts(CFXJS_Engine* pEngine,
                               int objId,
-                              const JSConstSpec consts[]) {
-  for (size_t i = 0; consts[i].pName != 0; ++i) {
+                              const JSConstSpec consts[],
+                              size_t count) {
+  for (size_t i = 0; i < count; ++i) {
     pEngine->DefineObjConst(
         objId, consts[i].pName,
         consts[i].eType == JSConstSpec::Number
@@ -22,8 +23,9 @@
 // static
 void CJS_Object::DefineProps(CFXJS_Engine* pEngine,
                              int objId,
-                             const JSPropertySpec props[]) {
-  for (size_t i = 0; props[i].pName != 0; ++i) {
+                             const JSPropertySpec props[],
+                             size_t count) {
+  for (size_t i = 0; i < count; ++i) {
     pEngine->DefineObjProperty(objId, props[i].pName, props[i].pPropGet,
                                props[i].pPropPut);
   }
@@ -32,8 +34,9 @@
 // static
 void CJS_Object::DefineMethods(CFXJS_Engine* pEngine,
                                int objId,
-                               const JSMethodSpec methods[]) {
-  for (size_t i = 0; methods[i].pName != 0; ++i)
+                               const JSMethodSpec methods[],
+                               size_t count) {
+  for (size_t i = 0; i < count; ++i)
     pEngine->DefineObjMethod(objId, methods[i].pName, methods[i].pMethodCall);
 }
 
diff --git a/fxjs/cjs_object.h b/fxjs/cjs_object.h
index bed5088..d929a01 100644
--- a/fxjs/cjs_object.h
+++ b/fxjs/cjs_object.h
@@ -38,13 +38,16 @@
  public:
   static void DefineConsts(CFXJS_Engine* pEngine,
                            int objId,
-                           const JSConstSpec consts[]);
+                           const JSConstSpec consts[],
+                           size_t count);
   static void DefineProps(CFXJS_Engine* pEngine,
                           int objId,
-                          const JSPropertySpec props[]);
+                          const JSPropertySpec props[],
+                          size_t count);
   static void DefineMethods(CFXJS_Engine* pEngine,
                             int objId,
-                            const JSMethodSpec methods[]);
+                            const JSMethodSpec methods[],
+                            size_t count);
 
   explicit CJS_Object(v8::Local<v8::Object> pObject);
   virtual ~CJS_Object();
diff --git a/fxjs/cjs_position.cpp b/fxjs/cjs_position.cpp
index ba1f3d9..16e4ab0 100644
--- a/fxjs/cjs_position.cpp
+++ b/fxjs/cjs_position.cpp
@@ -13,8 +13,7 @@
     {"textIconV", JSConstSpec::Number, 3, 0},
     {"iconTextH", JSConstSpec::Number, 4, 0},
     {"textIconH", JSConstSpec::Number, 5, 0},
-    {"overlay", JSConstSpec::Number, 6, 0},
-    {0, JSConstSpec::Number, 0, 0}};
+    {"overlay", JSConstSpec::Number, 6, 0}};
 
 int CJS_Position::ObjDefnID = -1;
 
@@ -22,5 +21,5 @@
 void CJS_Position::DefineJSObjects(CFXJS_Engine* pEngine) {
   ObjDefnID =
       pEngine->DefineObj("position", FXJSOBJTYPE_STATIC, nullptr, nullptr);
-  DefineConsts(pEngine, ObjDefnID, ConstSpecs);
+  DefineConsts(pEngine, ObjDefnID, ConstSpecs, FX_ArraySize(ConstSpecs));
 }
diff --git a/fxjs/cjs_report.cpp b/fxjs/cjs_report.cpp
index 2aa3f49..0788a90 100644
--- a/fxjs/cjs_report.cpp
+++ b/fxjs/cjs_report.cpp
@@ -11,9 +11,9 @@
 #include "fxjs/JS_Define.h"
 #include "fxjs/cjs_object.h"
 
-const JSMethodSpec CJS_Report::MethodSpecs[] = {{"save", save_static},
-                                                {"writeText", writeText_static},
-                                                {0, 0}};
+const JSMethodSpec CJS_Report::MethodSpecs[] = {
+    {"save", save_static},
+    {"writeText", writeText_static}};
 
 int CJS_Report::ObjDefnID = -1;
 
@@ -22,7 +22,7 @@
   ObjDefnID =
       pEngine->DefineObj("Report", eObjType, JSConstructor<CJS_Report, Report>,
                          JSDestructor<CJS_Report>);
-  DefineMethods(pEngine, ObjDefnID, MethodSpecs);
+  DefineMethods(pEngine, ObjDefnID, MethodSpecs, FX_ArraySize(MethodSpecs));
 }
 
 Report::Report(CJS_Object* pJSObject) : CJS_EmbedObj(pJSObject) {}
diff --git a/fxjs/cjs_scalehow.cpp b/fxjs/cjs_scalehow.cpp
index 35c5ec2..762863b 100644
--- a/fxjs/cjs_scalehow.cpp
+++ b/fxjs/cjs_scalehow.cpp
@@ -8,8 +8,7 @@
 
 const JSConstSpec CJS_ScaleHow::ConstSpecs[] = {
     {"proportional", JSConstSpec::Number, 0, 0},
-    {"anamorphic", JSConstSpec::Number, 1, 0},
-    {0, JSConstSpec::Number, 0, 0}};
+    {"anamorphic", JSConstSpec::Number, 1, 0}};
 
 int CJS_ScaleHow::ObjDefnID = -1;
 
@@ -17,5 +16,5 @@
 void CJS_ScaleHow::DefineJSObjects(CFXJS_Engine* pEngine) {
   ObjDefnID =
       pEngine->DefineObj("scaleHow", FXJSOBJTYPE_STATIC, nullptr, nullptr);
-  DefineConsts(pEngine, ObjDefnID, ConstSpecs);
+  DefineConsts(pEngine, ObjDefnID, ConstSpecs, FX_ArraySize(ConstSpecs));
 }
diff --git a/fxjs/cjs_scalewhen.cpp b/fxjs/cjs_scalewhen.cpp
index b13e7ed..59f0487 100644
--- a/fxjs/cjs_scalewhen.cpp
+++ b/fxjs/cjs_scalewhen.cpp
@@ -10,8 +10,7 @@
     {"always", JSConstSpec::Number, 0, 0},
     {"never", JSConstSpec::Number, 1, 0},
     {"tooBig", JSConstSpec::Number, 2, 0},
-    {"tooSmall", JSConstSpec::Number, 3, 0},
-    {0, JSConstSpec::Number, 0, 0}};
+    {"tooSmall", JSConstSpec::Number, 3, 0}};
 
 int CJS_ScaleWhen::ObjDefnID = -1;
 
@@ -19,5 +18,5 @@
 void CJS_ScaleWhen::DefineJSObjects(CFXJS_Engine* pEngine) {
   ObjDefnID =
       pEngine->DefineObj("scaleWhen", FXJSOBJTYPE_STATIC, nullptr, nullptr);
-  DefineConsts(pEngine, ObjDefnID, ConstSpecs);
+  DefineConsts(pEngine, ObjDefnID, ConstSpecs, FX_ArraySize(ConstSpecs));
 }
diff --git a/fxjs/cjs_style.cpp b/fxjs/cjs_style.cpp
index 7458b2a..be95e9a 100644
--- a/fxjs/cjs_style.cpp
+++ b/fxjs/cjs_style.cpp
@@ -12,13 +12,12 @@
     {"di", JSConstSpec::String, 0, "diamond"},
     {"ci", JSConstSpec::String, 0, "circle"},
     {"st", JSConstSpec::String, 0, "star"},
-    {"sq", JSConstSpec::String, 0, "square"},
-    {0, JSConstSpec::Number, 0, 0}};
+    {"sq", JSConstSpec::String, 0, "square"}};
 
 int CJS_Style::ObjDefnID = -1;
 
 // static
 void CJS_Style::DefineJSObjects(CFXJS_Engine* pEngine) {
   ObjDefnID = pEngine->DefineObj("style", FXJSOBJTYPE_STATIC, nullptr, nullptr);
-  DefineConsts(pEngine, ObjDefnID, ConstSpecs);
+  DefineConsts(pEngine, ObjDefnID, ConstSpecs, FX_ArraySize(ConstSpecs));
 }
diff --git a/fxjs/cjs_util.cpp b/fxjs/cjs_util.cpp
index c7bf027..57267ad 100644
--- a/fxjs/cjs_util.cpp
+++ b/fxjs/cjs_util.cpp
@@ -58,9 +58,11 @@
 }  // namespace
 
 const JSMethodSpec CJS_Util::MethodSpecs[] = {
-    {"printd", printd_static},         {"printf", printf_static},
-    {"printx", printx_static},         {"scand", scand_static},
-    {"byteToChar", byteToChar_static}, {0, 0}};
+    {"printd", printd_static},
+    {"printf", printf_static},
+    {"printx", printx_static},
+    {"scand", scand_static},
+    {"byteToChar", byteToChar_static}};
 
 int CJS_Util::ObjDefnID = -1;
 
@@ -69,7 +71,7 @@
   ObjDefnID =
       pEngine->DefineObj("util", FXJSOBJTYPE_STATIC,
                          JSConstructor<CJS_Util, util>, JSDestructor<CJS_Util>);
-  DefineMethods(pEngine, ObjDefnID, MethodSpecs);
+  DefineMethods(pEngine, ObjDefnID, MethodSpecs, FX_ArraySize(MethodSpecs));
 }
 
 util::util(CJS_Object* pJSObject) : CJS_EmbedObj(pJSObject) {}
diff --git a/fxjs/cjs_zoomtype.cpp b/fxjs/cjs_zoomtype.cpp
index 1cca58e..528bba0 100644
--- a/fxjs/cjs_zoomtype.cpp
+++ b/fxjs/cjs_zoomtype.cpp
@@ -13,8 +13,7 @@
     {"fitH", JSConstSpec::String, 0, "FitHeight"},
     {"fitV", JSConstSpec::String, 0, "FitVisibleWidth"},
     {"pref", JSConstSpec::String, 0, "Preferred"},
-    {"refW", JSConstSpec::String, 0, "ReflowWidth"},
-    {0, JSConstSpec::Number, 0, 0}};
+    {"refW", JSConstSpec::String, 0, "ReflowWidth"}};
 
 int CJS_Zoomtype::ObjDefnID = -1;
 
@@ -22,5 +21,5 @@
 void CJS_Zoomtype::DefineJSObjects(CFXJS_Engine* pEngine) {
   ObjDefnID =
       pEngine->DefineObj("zoomtype", FXJSOBJTYPE_STATIC, nullptr, nullptr);
-  DefineConsts(pEngine, ObjDefnID, ConstSpecs);
+  DefineConsts(pEngine, ObjDefnID, ConstSpecs, FX_ArraySize(ConstSpecs));
 }
diff --git a/fxjs/xfa/cjx_container.cpp b/fxjs/xfa/cjx_container.cpp
index a5d7921..cf0aca0 100644
--- a/fxjs/xfa/cjx_container.cpp
+++ b/fxjs/xfa/cjx_container.cpp
@@ -16,11 +16,10 @@
 
 const CJX_MethodSpec CJX_Container::MethodSpecs[] = {
     {"getDelta", getDelta_static},
-    {"getDeltas", getDeltas_static},
-    {"", nullptr}};
+    {"getDeltas", getDeltas_static}};
 
 CJX_Container::CJX_Container(CXFA_Node* node) : CJX_Node(node) {
-  DefineMethods(MethodSpecs);
+  DefineMethods(MethodSpecs, FX_ArraySize(MethodSpecs));
 }
 
 CJX_Container::~CJX_Container() {}
diff --git a/fxjs/xfa/cjx_datawindow.cpp b/fxjs/xfa/cjx_datawindow.cpp
index 54f3204..47c743f 100644
--- a/fxjs/xfa/cjx_datawindow.cpp
+++ b/fxjs/xfa/cjx_datawindow.cpp
@@ -15,12 +15,11 @@
     {"gotoRecord", gotoRecord_static},
     {"isRecordGroup", isRecordGroup_static},
     {"moveCurrentRecord", moveCurrentRecord_static},
-    {"record", record_static},
-    {"", nullptr}};
+    {"record", record_static}};
 
 CJX_DataWindow::CJX_DataWindow(CScript_DataWindow* window)
     : CJX_Object(window) {
-  DefineMethods(MethodSpecs);
+  DefineMethods(MethodSpecs, FX_ArraySize(MethodSpecs));
 }
 
 CJX_DataWindow::~CJX_DataWindow() {}
diff --git a/fxjs/xfa/cjx_delta.cpp b/fxjs/xfa/cjx_delta.cpp
index 1dfad24..c361bbb 100644
--- a/fxjs/xfa/cjx_delta.cpp
+++ b/fxjs/xfa/cjx_delta.cpp
@@ -12,11 +12,10 @@
 #include "fxjs/js_resources.h"
 #include "xfa/fxfa/parser/cxfa_delta.h"
 
-const CJX_MethodSpec CJX_Delta::MethodSpecs[] = {{"restore", restore_static},
-                                                 {"", nullptr}};
+const CJX_MethodSpec CJX_Delta::MethodSpecs[] = {{"restore", restore_static}};
 
 CJX_Delta::CJX_Delta(CXFA_Delta* delta) : CJX_Object(delta) {
-  DefineMethods(MethodSpecs);
+  DefineMethods(MethodSpecs, FX_ArraySize(MethodSpecs));
 }
 
 CJX_Delta::~CJX_Delta() {}
diff --git a/fxjs/xfa/cjx_desc.cpp b/fxjs/xfa/cjx_desc.cpp
index 7ff58a7..03ab8f8 100644
--- a/fxjs/xfa/cjx_desc.cpp
+++ b/fxjs/xfa/cjx_desc.cpp
@@ -12,11 +12,10 @@
 #include "fxjs/js_resources.h"
 #include "xfa/fxfa/parser/cxfa_desc.h"
 
-const CJX_MethodSpec CJX_Desc::MethodSpecs[] = {{"metadata", metadata_static},
-                                                {"", nullptr}};
+const CJX_MethodSpec CJX_Desc::MethodSpecs[] = {{"metadata", metadata_static}};
 
 CJX_Desc::CJX_Desc(CXFA_Desc* desc) : CJX_Node(desc) {
-  DefineMethods(MethodSpecs);
+  DefineMethods(MethodSpecs, FX_ArraySize(MethodSpecs));
 }
 
 CJX_Desc::~CJX_Desc() {}
diff --git a/fxjs/xfa/cjx_eventpseudomodel.cpp b/fxjs/xfa/cjx_eventpseudomodel.cpp
index a109d1c..449153c 100644
--- a/fxjs/xfa/cjx_eventpseudomodel.cpp
+++ b/fxjs/xfa/cjx_eventpseudomodel.cpp
@@ -45,12 +45,11 @@
 
 const CJX_MethodSpec CJX_EventPseudoModel::MethodSpecs[] = {
     {"emit", emit_static},
-    {"reset", reset_static},
-    {"", nullptr}};
+    {"reset", reset_static}};
 
 CJX_EventPseudoModel::CJX_EventPseudoModel(CScript_EventPseudoModel* model)
     : CJX_Object(model) {
-  DefineMethods(MethodSpecs);
+  DefineMethods(MethodSpecs, FX_ArraySize(MethodSpecs));
 }
 
 CJX_EventPseudoModel::~CJX_EventPseudoModel() {}
diff --git a/fxjs/xfa/cjx_exclgroup.cpp b/fxjs/xfa/cjx_exclgroup.cpp
index 6317736..e24be80 100644
--- a/fxjs/xfa/cjx_exclgroup.cpp
+++ b/fxjs/xfa/cjx_exclgroup.cpp
@@ -23,11 +23,10 @@
     {"execEvent", execEvent_static},
     {"execInitialize", execInitialize_static},
     {"execValidate", execValidate_static},
-    {"selectedMember", selectedMember_static},
-    {"", nullptr}};
+    {"selectedMember", selectedMember_static}};
 
 CJX_ExclGroup::CJX_ExclGroup(CXFA_ExclGroup* group) : CJX_Node(group) {
-  DefineMethods(MethodSpecs);
+  DefineMethods(MethodSpecs, FX_ArraySize(MethodSpecs));
 }
 
 CJX_ExclGroup::~CJX_ExclGroup() {}
diff --git a/fxjs/xfa/cjx_field.cpp b/fxjs/xfa/cjx_field.cpp
index d2cffbc..4b5f840 100644
--- a/fxjs/xfa/cjx_field.cpp
+++ b/fxjs/xfa/cjx_field.cpp
@@ -29,11 +29,10 @@
     {"getDisplayItem", getDisplayItem_static},
     {"getItemState", getItemState_static},
     {"getSaveItem", getSaveItem_static},
-    {"setItemState", setItemState_static},
-    {"", nullptr}};
+    {"setItemState", setItemState_static}};
 
 CJX_Field::CJX_Field(CXFA_Field* field) : CJX_Container(field) {
-  DefineMethods(MethodSpecs);
+  DefineMethods(MethodSpecs, FX_ArraySize(MethodSpecs));
 }
 
 CJX_Field::~CJX_Field() {}
diff --git a/fxjs/xfa/cjx_form.cpp b/fxjs/xfa/cjx_form.cpp
index 22a7db2..54f06fe 100644
--- a/fxjs/xfa/cjx_form.cpp
+++ b/fxjs/xfa/cjx_form.cpp
@@ -23,11 +23,10 @@
     {"execValidate", execValidate_static},
     {"formNodes", formNodes_static},
     {"recalculate", recalculate_static},
-    {"remerge", remerge_static},
-    {"", nullptr}};
+    {"remerge", remerge_static}};
 
 CJX_Form::CJX_Form(CXFA_Form* form) : CJX_Model(form) {
-  DefineMethods(MethodSpecs);
+  DefineMethods(MethodSpecs, FX_ArraySize(MethodSpecs));
 }
 
 CJX_Form::~CJX_Form() {}
diff --git a/fxjs/xfa/cjx_hostpseudomodel.cpp b/fxjs/xfa/cjx_hostpseudomodel.cpp
index 20e3bfe..555381f 100644
--- a/fxjs/xfa/cjx_hostpseudomodel.cpp
+++ b/fxjs/xfa/cjx_hostpseudomodel.cpp
@@ -61,12 +61,11 @@
     {"print", print_static},
     {"resetData", resetData_static},
     {"response", response_static},
-    {"setFocus", setFocus_static},
-    {"", nullptr}};
+    {"setFocus", setFocus_static}};
 
 CJX_HostPseudoModel::CJX_HostPseudoModel(CScript_HostPseudoModel* model)
     : CJX_Object(model) {
-  DefineMethods(MethodSpecs);
+  DefineMethods(MethodSpecs, FX_ArraySize(MethodSpecs));
 }
 
 CJX_HostPseudoModel::~CJX_HostPseudoModel() {}
diff --git a/fxjs/xfa/cjx_instancemanager.cpp b/fxjs/xfa/cjx_instancemanager.cpp
index 19c6d72..23048f9 100644
--- a/fxjs/xfa/cjx_instancemanager.cpp
+++ b/fxjs/xfa/cjx_instancemanager.cpp
@@ -22,12 +22,11 @@
     {"insertInstance", insertInstance_static},
     {"moveInstance", moveInstance_static},
     {"removeInstance", removeInstance_static},
-    {"setInstances", setInstances_static},
-    {"", nullptr}};
+    {"setInstances", setInstances_static}};
 
 CJX_InstanceManager::CJX_InstanceManager(CXFA_InstanceManager* mgr)
     : CJX_Node(mgr) {
-  DefineMethods(MethodSpecs);
+  DefineMethods(MethodSpecs, FX_ArraySize(MethodSpecs));
 }
 
 CJX_InstanceManager::~CJX_InstanceManager() {}
diff --git a/fxjs/xfa/cjx_layoutpseudomodel.cpp b/fxjs/xfa/cjx_layoutpseudomodel.cpp
index b80000a..4165a36 100644
--- a/fxjs/xfa/cjx_layoutpseudomodel.cpp
+++ b/fxjs/xfa/cjx_layoutpseudomodel.cpp
@@ -43,12 +43,11 @@
     {"sheetInBatch", sheetInBatch_static},
     {"w", w_static},
     {"x", x_static},
-    {"y", y_static},
-    {"", nullptr}};
+    {"y", y_static}};
 
 CJX_LayoutPseudoModel::CJX_LayoutPseudoModel(CScript_LayoutPseudoModel* model)
     : CJX_Object(model) {
-  DefineMethods(MethodSpecs);
+  DefineMethods(MethodSpecs, FX_ArraySize(MethodSpecs));
 }
 
 CJX_LayoutPseudoModel::~CJX_LayoutPseudoModel() {}
diff --git a/fxjs/xfa/cjx_list.cpp b/fxjs/xfa/cjx_list.cpp
index 84bdf7b..198804d 100644
--- a/fxjs/xfa/cjx_list.cpp
+++ b/fxjs/xfa/cjx_list.cpp
@@ -18,11 +18,10 @@
 const CJX_MethodSpec CJX_List::MethodSpecs[] = {{"append", append_static},
                                                 {"insert", insert_static},
                                                 {"item", item_static},
-                                                {"remove", remove_static},
-                                                {"", nullptr}};
+                                                {"remove", remove_static}};
 
 CJX_List::CJX_List(CXFA_List* list) : CJX_Object(list) {
-  DefineMethods(MethodSpecs);
+  DefineMethods(MethodSpecs, FX_ArraySize(MethodSpecs));
 }
 
 CJX_List::~CJX_List() {}
diff --git a/fxjs/xfa/cjx_logpseudomodel.cpp b/fxjs/xfa/cjx_logpseudomodel.cpp
index e0ed05d..810ddfa 100644
--- a/fxjs/xfa/cjx_logpseudomodel.cpp
+++ b/fxjs/xfa/cjx_logpseudomodel.cpp
@@ -16,12 +16,11 @@
     {"traceEnabled", traceEnabled_static},
     {"traceActivate", traceActivate_static},
     {"traceDeactivate", traceDeactivate_static},
-    {"trace", trace_static},
-    {"", nullptr}};
+    {"trace", trace_static}};
 
 CJX_LogPseudoModel::CJX_LogPseudoModel(CScript_LogPseudoModel* model)
     : CJX_Object(model) {
-  DefineMethods(MethodSpecs);
+  DefineMethods(MethodSpecs, FX_ArraySize(MethodSpecs));
 }
 
 CJX_LogPseudoModel::~CJX_LogPseudoModel() {}
diff --git a/fxjs/xfa/cjx_manifest.cpp b/fxjs/xfa/cjx_manifest.cpp
index 6d5da2c..0f48b1d 100644
--- a/fxjs/xfa/cjx_manifest.cpp
+++ b/fxjs/xfa/cjx_manifest.cpp
@@ -13,11 +13,10 @@
 #include "xfa/fxfa/parser/cxfa_manifest.h"
 
 const CJX_MethodSpec CJX_Manifest::MethodSpecs[] = {
-    {"evaluate", evaluate_static},
-    {"", nullptr}};
+    {"evaluate", evaluate_static}};
 
 CJX_Manifest::CJX_Manifest(CXFA_Manifest* manifest) : CJX_Node(manifest) {
-  DefineMethods(MethodSpecs);
+  DefineMethods(MethodSpecs, FX_ArraySize(MethodSpecs));
 }
 
 CJX_Manifest::~CJX_Manifest() {}
diff --git a/fxjs/xfa/cjx_model.cpp b/fxjs/xfa/cjx_model.cpp
index 6508416..7ab90e2 100644
--- a/fxjs/xfa/cjx_model.cpp
+++ b/fxjs/xfa/cjx_model.cpp
@@ -17,11 +17,10 @@
 const CJX_MethodSpec CJX_Model::MethodSpecs[] = {
     {"clearErrorList", clearErrorList_static},
     {"createNode", createNode_static},
-    {"isCompatibleNS", isCompatibleNS_static},
-    {"", nullptr}};
+    {"isCompatibleNS", isCompatibleNS_static}};
 
 CJX_Model::CJX_Model(CXFA_Node* node) : CJX_Node(node) {
-  DefineMethods(MethodSpecs);
+  DefineMethods(MethodSpecs, FX_ArraySize(MethodSpecs));
 }
 
 CJX_Model::~CJX_Model() {}
diff --git a/fxjs/xfa/cjx_node.cpp b/fxjs/xfa/cjx_node.cpp
index dd22fb4..d8a3b1c 100644
--- a/fxjs/xfa/cjx_node.cpp
+++ b/fxjs/xfa/cjx_node.cpp
@@ -135,11 +135,10 @@
     {"saveFilteredXML", saveFilteredXML_static},
     {"saveXML", saveXML_static},
     {"setAttribute", setAttribute_static},
-    {"setElement", setElement_static},
-    {"", nullptr}};
+    {"setElement", setElement_static}};
 
 CJX_Node::CJX_Node(CXFA_Node* node) : CJX_Tree(node) {
-  DefineMethods(MethodSpecs);
+  DefineMethods(MethodSpecs, FX_ArraySize(MethodSpecs));
 }
 
 CJX_Node::~CJX_Node() = default;
diff --git a/fxjs/xfa/cjx_object.cpp b/fxjs/xfa/cjx_object.cpp
index 81ba1ac..d66483d 100644
--- a/fxjs/xfa/cjx_object.cpp
+++ b/fxjs/xfa/cjx_object.cpp
@@ -80,8 +80,9 @@
   ClearMapModuleBuffer();
 }
 
-void CJX_Object::DefineMethods(const CJX_MethodSpec method_specs[]) {
-  for (size_t i = 0; method_specs[i].pMethodCall != nullptr; ++i)
+void CJX_Object::DefineMethods(const CJX_MethodSpec method_specs[],
+                               size_t count) {
+  for (size_t i = 0; i < count; ++i)
     method_specs_[method_specs[i].pName] = method_specs[i].pMethodCall;
 }
 
diff --git a/fxjs/xfa/cjx_object.h b/fxjs/xfa/cjx_object.h
index cb8350d..3b9867e 100644
--- a/fxjs/xfa/cjx_object.h
+++ b/fxjs/xfa/cjx_object.h
@@ -116,7 +116,7 @@
   void ThrowParamCountMismatchException(const WideString& method) const;
 
  protected:
-  void DefineMethods(const CJX_MethodSpec method_specs[]);
+  void DefineMethods(const CJX_MethodSpec method_specs[], size_t count);
 
   void MoveBufferMapData(CXFA_Object* pSrcModule, CXFA_Object* pDstModule);
   void SetMapModuleString(void* pKey, const WideStringView& wsValue);
diff --git a/fxjs/xfa/cjx_packet.cpp b/fxjs/xfa/cjx_packet.cpp
index 0040951..2203d9b 100644
--- a/fxjs/xfa/cjx_packet.cpp
+++ b/fxjs/xfa/cjx_packet.cpp
@@ -15,11 +15,10 @@
 const CJX_MethodSpec CJX_Packet::MethodSpecs[] = {
     {"getAttribute", getAttribute_static},
     {"removeAttribute", removeAttribute_static},
-    {"setAttribute", setAttribute_static},
-    {"", nullptr}};
+    {"setAttribute", setAttribute_static}};
 
 CJX_Packet::CJX_Packet(CXFA_Packet* packet) : CJX_Node(packet) {
-  DefineMethods(MethodSpecs);
+  DefineMethods(MethodSpecs, FX_ArraySize(MethodSpecs));
 }
 
 CJX_Packet::~CJX_Packet() {}
diff --git a/fxjs/xfa/cjx_signaturepseudomodel.cpp b/fxjs/xfa/cjx_signaturepseudomodel.cpp
index 6b39ac2..202532c 100644
--- a/fxjs/xfa/cjx_signaturepseudomodel.cpp
+++ b/fxjs/xfa/cjx_signaturepseudomodel.cpp
@@ -16,13 +16,12 @@
     {"verify", verifySignature_static},
     {"sign", sign_static},
     {"enumerate", enumerate_static},
-    {"clear", clear_static},
-    {"", nullptr}};
+    {"clear", clear_static}};
 
 CJX_SignaturePseudoModel::CJX_SignaturePseudoModel(
     CScript_SignaturePseudoModel* model)
     : CJX_Object(model) {
-  DefineMethods(MethodSpecs);
+  DefineMethods(MethodSpecs, FX_ArraySize(MethodSpecs));
 }
 
 CJX_SignaturePseudoModel::~CJX_SignaturePseudoModel() {}
diff --git a/fxjs/xfa/cjx_source.cpp b/fxjs/xfa/cjx_source.cpp
index 17512b3..85742fe 100644
--- a/fxjs/xfa/cjx_source.cpp
+++ b/fxjs/xfa/cjx_source.cpp
@@ -29,11 +29,10 @@
     {"requery", requery_static},
     {"resync", resync_static},
     {"update", update_static},
-    {"updateBatch", updateBatch_static},
-    {"", nullptr}};
+    {"updateBatch", updateBatch_static}};
 
 CJX_Source::CJX_Source(CXFA_Source* src) : CJX_Node(src) {
-  DefineMethods(MethodSpecs);
+  DefineMethods(MethodSpecs, FX_ArraySize(MethodSpecs));
 }
 
 CJX_Source::~CJX_Source() {}
diff --git a/fxjs/xfa/cjx_subform.cpp b/fxjs/xfa/cjx_subform.cpp
index a7e1d2a..fcf4cff 100644
--- a/fxjs/xfa/cjx_subform.cpp
+++ b/fxjs/xfa/cjx_subform.cpp
@@ -20,11 +20,10 @@
     {"execCalculate", execCalculate_static},
     {"execEvent", execEvent_static},
     {"execInitialize", execInitialize_static},
-    {"execValidate", execValidate_static},
-    {"", nullptr}};
+    {"execValidate", execValidate_static}};
 
 CJX_Subform::CJX_Subform(CXFA_Node* node) : CJX_Container(node) {
-  DefineMethods(MethodSpecs);
+  DefineMethods(MethodSpecs, FX_ArraySize(MethodSpecs));
 }
 
 CJX_Subform::~CJX_Subform() {}
diff --git a/fxjs/xfa/cjx_template.cpp b/fxjs/xfa/cjx_template.cpp
index 48507c3..8ba2bca 100644
--- a/fxjs/xfa/cjx_template.cpp
+++ b/fxjs/xfa/cjx_template.cpp
@@ -19,11 +19,10 @@
     {"execValidate", execValidate_static},
     {"formNodes", formNodes_static},
     {"recalculate", recalculate_static},
-    {"remerge", remerge_static},
-    {"", nullptr}};
+    {"remerge", remerge_static}};
 
 CJX_Template::CJX_Template(CXFA_Template* tmpl) : CJX_Model(tmpl) {
-  DefineMethods(MethodSpecs);
+  DefineMethods(MethodSpecs, FX_ArraySize(MethodSpecs));
 }
 
 CJX_Template::~CJX_Template() {}
diff --git a/fxjs/xfa/cjx_tree.cpp b/fxjs/xfa/cjx_tree.cpp
index 6c5e5ab..8e3143e 100644
--- a/fxjs/xfa/cjx_tree.cpp
+++ b/fxjs/xfa/cjx_tree.cpp
@@ -21,11 +21,10 @@
 
 const CJX_MethodSpec CJX_Tree::MethodSpecs[] = {
     {"resolveNode", resolveNode_static},
-    {"resolveNodes", resolveNodes_static},
-    {"", nullptr}};
+    {"resolveNodes", resolveNodes_static}};
 
 CJX_Tree::CJX_Tree(CXFA_Object* obj) : CJX_Object(obj) {
-  DefineMethods(MethodSpecs);
+  DefineMethods(MethodSpecs, FX_ArraySize(MethodSpecs));
 }
 
 CJX_Tree::~CJX_Tree() {}
diff --git a/fxjs/xfa/cjx_treelist.cpp b/fxjs/xfa/cjx_treelist.cpp
index bb9e416..b91a0b7 100644
--- a/fxjs/xfa/cjx_treelist.cpp
+++ b/fxjs/xfa/cjx_treelist.cpp
@@ -16,11 +16,10 @@
 #include "xfa/fxfa/parser/cxfa_treelist.h"
 
 const CJX_MethodSpec CJX_TreeList::MethodSpecs[] = {
-    {"namedItem", namedItem_static},
-    {"", nullptr}};
+    {"namedItem", namedItem_static}};
 
 CJX_TreeList::CJX_TreeList(CXFA_TreeList* list) : CJX_List(list) {
-  DefineMethods(MethodSpecs);
+  DefineMethods(MethodSpecs, FX_ArraySize(MethodSpecs));
 }
 
 CJX_TreeList::~CJX_TreeList() {}
diff --git a/fxjs/xfa/cjx_wsdlconnection.cpp b/fxjs/xfa/cjx_wsdlconnection.cpp
index a1d673f..1d0c306 100644
--- a/fxjs/xfa/cjx_wsdlconnection.cpp
+++ b/fxjs/xfa/cjx_wsdlconnection.cpp
@@ -13,12 +13,11 @@
 #include "xfa/fxfa/parser/cxfa_wsdlconnection.h"
 
 const CJX_MethodSpec CJX_WsdlConnection::MethodSpecs[] = {
-    {"execute", execute_static},
-    {"", nullptr}};
+    {"execute", execute_static}};
 
 CJX_WsdlConnection::CJX_WsdlConnection(CXFA_WsdlConnection* connection)
     : CJX_Node(connection) {
-  DefineMethods(MethodSpecs);
+  DefineMethods(MethodSpecs, FX_ArraySize(MethodSpecs));
 }
 
 CJX_WsdlConnection::~CJX_WsdlConnection() {}
