When converting Maybe and MaybeLocal values with a check, always check
authorjochen <jochen@chromium.org>
Wed, 15 Apr 2015 07:11:54 +0000 (00:11 -0700)
committerCommit bot <commit-bot@chromium.org>
Wed, 15 Apr 2015 07:11:50 +0000 (07:11 +0000)
An embedder that wants to avoid the check should use MaybeLocal::ToLocal.

BUG=none
R=dcarney@chromium.org
LOG=y

Review URL: https://codereview.chromium.org/1083943002

Cr-Commit-Position: refs/heads/master@{#27832}

include/v8.h
src/api.cc

index cdb23b4..d8ef81e 100644 (file)
@@ -439,7 +439,7 @@ class MaybeLocal {
     return !IsEmpty();
   }
 
-  // Will crash when checks are enabled if the MaybeLocal<> is empty.
+  // Will crash if the MaybeLocal<> is empty.
   V8_INLINE Local<T> ToLocalChecked();
 
   template <class S>
@@ -6074,7 +6074,7 @@ class V8_EXPORT V8 {
                          int* index);
   static Local<Value> GetEternal(Isolate* isolate, int index);
 
-  static void CheckIsJust(bool is_just);
+  static void FromJustIsNothing();
   static void ToLocalEmpty();
   static void InternalFieldOutOfBounds(int index);
 
@@ -6109,11 +6109,9 @@ class Maybe {
   V8_INLINE bool IsNothing() const { return !has_value; }
   V8_INLINE bool IsJust() const { return has_value; }
 
-  // Will crash when checks are enabled if the Maybe<> is nothing.
+  // Will crash if the Maybe<> is nothing.
   V8_INLINE T FromJust() const {
-#ifdef V8_ENABLE_CHECKS
-    V8::CheckIsJust(IsJust());
-#endif
+    if (V8_UNLIKELY(!IsJust())) V8::FromJustIsNothing();
     return value;
   }
 
@@ -6931,9 +6929,7 @@ Local<T> Eternal<T>::Get(Isolate* isolate) {
 
 template <class T>
 Local<T> MaybeLocal<T>::ToLocalChecked() {
-#ifdef V8_ENABLE_CHECKS
-  if (val_ == nullptr) V8::ToLocalEmpty();
-#endif
+  if (V8_UNLIKELY(val_ == nullptr)) V8::ToLocalEmpty();
   return Local<T>(val_);
 }
 
index 9d4356c..5be9daf 100644 (file)
@@ -584,8 +584,8 @@ Local<Value> V8::GetEternal(Isolate* v8_isolate, int index) {
 }
 
 
-void V8::CheckIsJust(bool is_just) {
-  Utils::ApiCheck(is_just, "v8::FromJust", "Maybe value is Nothing.");
+void V8::FromJustIsNothing() {
+  Utils::ApiCheck(false, "v8::FromJust", "Maybe value is Nothing.");
 }