diff --git a/fxjs/cfx_v8.cpp b/fxjs/cfx_v8.cpp
index 41cd44f..3a01aa2 100644
--- a/fxjs/cfx_v8.cpp
+++ b/fxjs/cfx_v8.cpp
@@ -39,52 +39,43 @@
 }
 
 v8::Local<v8::Array> CFX_V8::NewArray() {
-  return v8::Array::New(GetIsolate());
+  return fxv8::NewArrayHelper(GetIsolate());
 }
 
 v8::Local<v8::Object> CFX_V8::NewObject() {
-  return v8::Object::New(GetIsolate());
+  return fxv8::NewObjectHelper(GetIsolate());
 }
 
 bool CFX_V8::PutArrayElement(v8::Local<v8::Array> pArray,
                              unsigned index,
                              v8::Local<v8::Value> pValue) {
-  ASSERT(!pValue.IsEmpty());
-  if (pArray.IsEmpty())
-    return false;
-  return pArray->Set(m_pIsolate->GetCurrentContext(), index, pValue).IsJust();
+  return fxv8::ReentrantPutArrayElementHelper(GetIsolate(), pArray, index,
+                                              pValue);
 }
 
 v8::Local<v8::Value> CFX_V8::GetArrayElement(v8::Local<v8::Array> pArray,
                                              unsigned index) {
-  if (pArray.IsEmpty())
-    return v8::Local<v8::Value>();
-  v8::Local<v8::Value> val;
-  if (!pArray->Get(m_pIsolate->GetCurrentContext(), index).ToLocal(&val))
-    return v8::Local<v8::Value>();
-  return val;
+  return fxv8::ReentrantGetArrayElementHelper(GetIsolate(), pArray, index);
 }
 
 unsigned CFX_V8::GetArrayLength(v8::Local<v8::Array> pArray) {
-  if (pArray.IsEmpty())
-    return 0;
-  return pArray->Length();
+  return fxv8::GetArrayLengthHelper(pArray);
 }
 
 v8::Local<v8::Number> CFX_V8::NewNumber(int number) {
-  return v8::Int32::New(GetIsolate(), number);
+  return fxv8::NewNumberHelper(GetIsolate(), number);
 }
 
 v8::Local<v8::Number> CFX_V8::NewNumber(double number) {
-  return v8::Number::New(GetIsolate(), number);
+  return fxv8::NewNumberHelper(GetIsolate(), number);
 }
 
 v8::Local<v8::Number> CFX_V8::NewNumber(float number) {
-  return v8::Number::New(GetIsolate(), number);
+  return fxv8::NewNumberHelper(GetIsolate(), number);
 }
 
 v8::Local<v8::Boolean> CFX_V8::NewBoolean(bool b) {
-  return v8::Boolean::New(GetIsolate(), b);
+  return fxv8::NewBooleanHelper(GetIsolate(), b);
 }
 
 v8::Local<v8::String> CFX_V8::NewString(ByteStringView str) {
@@ -100,17 +91,15 @@
 }
 
 v8::Local<v8::Value> CFX_V8::NewNull() {
-  return v8::Null(GetIsolate());
+  return fxv8::NewNullHelper(GetIsolate());
 }
 
 v8::Local<v8::Value> CFX_V8::NewUndefined() {
-  return v8::Undefined(GetIsolate());
+  return fxv8::NewUndefinedHelper(GetIsolate());
 }
 
 v8::Local<v8::Date> CFX_V8::NewDate(double d) {
-  return v8::Date::New(m_pIsolate->GetCurrentContext(), d)
-      .ToLocalChecked()
-      .As<v8::Date>();
+  return fxv8::NewDateHelper(GetIsolate(), d);
 }
 
 int CFX_V8::ToInt32(v8::Local<v8::Value> pValue) {
@@ -134,17 +123,11 @@
 }
 
 v8::Local<v8::Object> CFX_V8::ToObject(v8::Local<v8::Value> pValue) {
-  if (pValue.IsEmpty() || !pValue->IsObject())
-    return v8::Local<v8::Object>();
-  v8::Local<v8::Context> context = m_pIsolate->GetCurrentContext();
-  return pValue->ToObject(context).ToLocalChecked();
+  return fxv8::ReentrantToObjectHelper(GetIsolate(), pValue);
 }
 
 v8::Local<v8::Array> CFX_V8::ToArray(v8::Local<v8::Value> pValue) {
-  if (pValue.IsEmpty() || !pValue->IsArray())
-    return v8::Local<v8::Array>();
-  v8::Local<v8::Context> context = m_pIsolate->GetCurrentContext();
-  return v8::Local<v8::Array>::Cast(pValue->ToObject(context).ToLocalChecked());
+  return fxv8::ReentrantToArrayHelper(GetIsolate(), pValue);
 }
 
 void* CFX_V8ArrayBufferAllocator::Allocate(size_t length) {
diff --git a/fxjs/fxv8.cpp b/fxjs/fxv8.cpp
index 7b52d0b..1c7abd8 100644
--- a/fxjs/fxv8.cpp
+++ b/fxjs/fxv8.cpp
@@ -8,6 +8,30 @@
 
 namespace fxv8 {
 
+v8::Local<v8::Value> NewNullHelper(v8::Isolate* pIsolate) {
+  return v8::Null(pIsolate);
+}
+
+v8::Local<v8::Value> NewUndefinedHelper(v8::Isolate* pIsolate) {
+  return v8::Undefined(pIsolate);
+}
+
+v8::Local<v8::Number> NewNumberHelper(v8::Isolate* pIsolate, int number) {
+  return v8::Int32::New(pIsolate, number);
+}
+
+v8::Local<v8::Number> NewNumberHelper(v8::Isolate* pIsolate, double number) {
+  return v8::Number::New(pIsolate, number);
+}
+
+v8::Local<v8::Number> NewNumberHelper(v8::Isolate* pIsolate, float number) {
+  return v8::Number::New(pIsolate, number);
+}
+
+v8::Local<v8::Boolean> NewBooleanHelper(v8::Isolate* pIsolate, bool b) {
+  return v8::Boolean::New(pIsolate, b);
+}
+
 v8::Local<v8::String> NewStringHelper(v8::Isolate* pIsolate,
                                       ByteStringView str) {
   return v8::String::NewFromUtf8(pIsolate, str.unterminated_c_str(),
@@ -20,6 +44,20 @@
   return NewStringHelper(pIsolate, FX_UTF8Encode(str).AsStringView());
 }
 
+v8::Local<v8::Array> NewArrayHelper(v8::Isolate* pIsolate) {
+  return v8::Array::New(pIsolate);
+}
+
+v8::Local<v8::Object> NewObjectHelper(v8::Isolate* pIsolate) {
+  return v8::Object::New(pIsolate);
+}
+
+v8::Local<v8::Date> NewDateHelper(v8::Isolate* pIsolate, double d) {
+  return v8::Date::New(pIsolate->GetCurrentContext(), d)
+      .ToLocalChecked()
+      .As<v8::Date>();
+}
+
 int ReentrantToInt32Helper(v8::Isolate* pIsolate, v8::Local<v8::Value> pValue) {
   if (pValue.IsEmpty())
     return 0;
@@ -68,6 +106,22 @@
   return ByteString(*s);
 }
 
+v8::Local<v8::Object> ReentrantToObjectHelper(v8::Isolate* pIsolate,
+                                              v8::Local<v8::Value> pValue) {
+  if (pValue.IsEmpty() || !pValue->IsObject())
+    return v8::Local<v8::Object>();
+  v8::Local<v8::Context> context = pIsolate->GetCurrentContext();
+  return pValue->ToObject(context).ToLocalChecked();
+}
+
+v8::Local<v8::Array> ReentrantToArrayHelper(v8::Isolate* pIsolate,
+                                            v8::Local<v8::Value> pValue) {
+  if (pValue.IsEmpty() || !pValue->IsArray())
+    return v8::Local<v8::Array>();
+  v8::Local<v8::Context> context = pIsolate->GetCurrentContext();
+  return v8::Local<v8::Array>::Cast(pValue->ToObject(context).ToLocalChecked());
+}
+
 v8::Local<v8::Value> ReentrantGetObjectPropertyHelper(
     v8::Isolate* pIsolate,
     v8::Local<v8::Object> pObj,
@@ -115,6 +169,32 @@
   return pObj->Set(pIsolate->GetCurrentContext(), name, pPut).IsJust();
 }
 
+bool ReentrantPutArrayElementHelper(v8::Isolate* pIsolate,
+                                    v8::Local<v8::Array> pArray,
+                                    unsigned index,
+                                    v8::Local<v8::Value> pValue) {
+  if (pArray.IsEmpty())
+    return false;
+  return pArray->Set(pIsolate->GetCurrentContext(), index, pValue).IsJust();
+}
+
+v8::Local<v8::Value> ReentrantGetArrayElementHelper(v8::Isolate* pIsolate,
+                                                    v8::Local<v8::Array> pArray,
+                                                    unsigned index) {
+  if (pArray.IsEmpty())
+    return v8::Local<v8::Value>();
+  v8::Local<v8::Value> val;
+  if (!pArray->Get(pIsolate->GetCurrentContext(), index).ToLocal(&val))
+    return v8::Local<v8::Value>();
+  return val;
+}
+
+unsigned GetArrayLengthHelper(v8::Local<v8::Array> pArray) {
+  if (pArray.IsEmpty())
+    return 0;
+  return pArray->Length();
+}
+
 void ThrowExceptionHelper(v8::Isolate* pIsolate, ByteStringView str) {
   pIsolate->ThrowException(NewStringHelper(pIsolate, str));
 }
diff --git a/fxjs/fxv8.h b/fxjs/fxv8.h
index 6c05d76..f1f35ec 100644
--- a/fxjs/fxv8.h
+++ b/fxjs/fxv8.h
@@ -14,10 +14,19 @@
 
 namespace fxv8 {
 
+v8::Local<v8::Value> NewNullHelper(v8::Isolate* pIsolate);
+v8::Local<v8::Value> NewUndefinedHelper(v8::Isolate* pIsolate);
+v8::Local<v8::Number> NewNumberHelper(v8::Isolate* pIsolate, int number);
+v8::Local<v8::Number> NewNumberHelper(v8::Isolate* pIsolate, double number);
+v8::Local<v8::Number> NewNumberHelper(v8::Isolate* pIsolate, float number);
+v8::Local<v8::Boolean> NewBooleanHelper(v8::Isolate* pIsolate, bool b);
 v8::Local<v8::String> NewStringHelper(v8::Isolate* pIsolate,
                                       ByteStringView str);
 v8::Local<v8::String> NewStringHelper(v8::Isolate* pIsolate,
                                       WideStringView str);
+v8::Local<v8::Array> NewArrayHelper(v8::Isolate* pIsolate);
+v8::Local<v8::Object> NewObjectHelper(v8::Isolate* pIsolate);
+v8::Local<v8::Date> NewDateHelper(v8::Isolate* pIsolate, double d);
 
 int ReentrantToInt32Helper(v8::Isolate* pIsolate, v8::Local<v8::Value> pValue);
 bool ReentrantToBooleanHelper(v8::Isolate* pIsolate,
@@ -28,6 +37,10 @@
                                        v8::Local<v8::Value> pValue);
 ByteString ReentrantToByteStringHelper(v8::Isolate* pIsolate,
                                        v8::Local<v8::Value> pValue);
+v8::Local<v8::Object> ReentrantToObjectHelper(v8::Isolate* pIsolate,
+                                              v8::Local<v8::Value> pValue);
+v8::Local<v8::Array> ReentrantToArrayHelper(v8::Isolate* pIsolate,
+                                            v8::Local<v8::Value> pValue);
 
 v8::Local<v8::Value> ReentrantGetObjectPropertyHelper(
     v8::Isolate* pIsolate,
@@ -40,6 +53,15 @@
                                       v8::Local<v8::Object> pObj,
                                       ByteStringView bsUTF8PropertyName,
                                       v8::Local<v8::Value> pPut);
+bool ReentrantPutArrayElementHelper(v8::Isolate* pIsolate,
+                                    v8::Local<v8::Array> pArray,
+                                    unsigned index,
+                                    v8::Local<v8::Value> pValue);
+v8::Local<v8::Value> ReentrantGetArrayElementHelper(v8::Isolate* pIsolate,
+                                                    v8::Local<v8::Array> pArray,
+                                                    unsigned index);
+
+unsigned GetArrayLengthHelper(v8::Local<v8::Array> pArray);
 
 void ThrowExceptionHelper(v8::Isolate* pIsolate, ByteStringView str);
 void ThrowExceptionHelper(v8::Isolate* pIsolate, WideStringView str);
