Reviewers: Dmitry Lomov (chromium),

Message:
PTAL

Description:
Add tests and extension verifying CHECK and ASSERT.

The new native functions can also be used in blink tests to ensure that V8
asserts are turned on where they should be.

BUG=

Please review this at https://codereview.chromium.org/105953005/

SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge

Affected files (+70, -24 lines):
  M src/bootstrapper.cc
  A + src/extensions/trigger-failure-extension.h
  A + src/extensions/trigger-failure-extension.cc
  M src/flag-definitions.h
  M test/mjsunit/mjsunit.status
  A + test/mjsunit/verify-assert-false.js
  A + test/mjsunit/verify-check-false.js
  M tools/gyp/v8.gyp


Index: src/bootstrapper.cc
diff --git a/src/bootstrapper.cc b/src/bootstrapper.cc
index 4d69f8407f4fb4e9bff20bd174b8cb848d824fe6..1d2fb8663379ebab158c6abf2c6733bd86529417 100644
--- a/src/bootstrapper.cc
+++ b/src/bootstrapper.cc
@@ -41,10 +41,11 @@
 #include "platform.h"
 #include "snapshot.h"
 #include "trig-table.h"
-#include "extensions/free-buffer-extension.h"
 #include "extensions/externalize-string-extension.h"
+#include "extensions/free-buffer-extension.h"
 #include "extensions/gc-extension.h"
 #include "extensions/statistics-extension.h"
+#include "extensions/trigger-failure-extension.h"
 #include "code-stubs.h"

 namespace v8 {
@@ -107,6 +108,7 @@ void Bootstrapper::InitializeOncePerProcess() {
   GCExtension::Register();
   ExternalizeStringExtension::Register();
   StatisticsExtension::Register();
+  TriggerFailureExtension::Register();
 }


@@ -2266,6 +2268,9 @@ bool Genesis::InstallExtensions(Handle<Context> native_context,
   if (FLAG_track_gc_object_stats) {
     InstallExtension(isolate, "v8/statistics", &extension_states);
   }
+  if (FLAG_expose_trigger_failure) {
+    InstallExtension(isolate, "v8/trigger-failure", &extension_states);
+  }

   if (extensions == NULL) return true;
   // Install required extensions
Index: src/extensions/trigger-failure-extension.cc
diff --git a/src/extensions/free-buffer-extension.cc b/src/extensions/trigger-failure-extension.cc
similarity index 57%
copy from src/extensions/free-buffer-extension.cc
copy to src/extensions/trigger-failure-extension.cc
index 5cf2b68146c9d325096b6f94172bca55d498c2fa..5fe6bbbf477a57696421f35dc41ad218bda1910e 100644
--- a/src/extensions/free-buffer-extension.cc
+++ b/src/extensions/trigger-failure-extension.cc
@@ -25,36 +25,58 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

-#include "free-buffer-extension.h"
-#include "platform.h"
+#include "trigger-failure-extension.h"
 #include "v8.h"

 namespace v8 {
 namespace internal {


-v8::Handle<v8::FunctionTemplate> FreeBufferExtension::GetNativeFunctionTemplate(
+const char* const TriggerFailureExtension::kSource =
+    "native function triggerCheckFalse();"
+    "native function triggerAssertFalse();"
+    "native function triggerSlowAssertFalse();";
+
+
+v8::Handle<v8::FunctionTemplate>
+TriggerFailureExtension::GetNativeFunctionTemplate(
     v8::Isolate* isolate,
     v8::Handle<v8::String> str) {
-  return v8::FunctionTemplate::New(FreeBufferExtension::FreeBuffer);
+  if (strcmp(*v8::String::Utf8Value(str), "triggerCheckFalse") == 0) {
+    return v8::FunctionTemplate::New(
+        TriggerFailureExtension::TriggerCheckFalse);
+ } else if (strcmp(*v8::String::Utf8Value(str), "triggerAssertFalse") == 0) {
+    return v8::FunctionTemplate::New(
+        TriggerFailureExtension::TriggerAssertFalse);
+  } else {
+ CHECK_EQ(0, strcmp(*v8::String::Utf8Value(str), "triggerSlowAssertFalse"));
+    return v8::FunctionTemplate::New(
+        TriggerFailureExtension::TriggerSlowAssertFalse);
+  }
 }


-void FreeBufferExtension::FreeBuffer(
+void TriggerFailureExtension::TriggerCheckFalse(
     const v8::FunctionCallbackInfo<v8::Value>& args) {
-  v8::Handle<v8::ArrayBuffer> arrayBuffer = args[0].As<v8::ArrayBuffer>();
-  v8::ArrayBuffer::Contents contents = arrayBuffer->Externalize();
-  V8::ArrayBufferAllocator()->Free(contents.Data(), contents.ByteLength());
+  CHECK(false);
 }


-void FreeBufferExtension::Register() {
-  static char buffer[100];
-  Vector<char> temp_vector(buffer, sizeof(buffer));
-  OS::SNPrintF(temp_vector, "native function freeBuffer();");
+void TriggerFailureExtension::TriggerAssertFalse(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  ASSERT(false);
+}
+
+
+void TriggerFailureExtension::TriggerSlowAssertFalse(
+    const v8::FunctionCallbackInfo<v8::Value>& args) {
+  SLOW_ASSERT(false);
+}
+

-  static FreeBufferExtension buffer_free_extension(buffer);
-  static v8::DeclareExtension declaration(&buffer_free_extension);
+void TriggerFailureExtension::Register() {
+  static TriggerFailureExtension trigger_failure_extension;
+  static v8::DeclareExtension declaration(&trigger_failure_extension);
 }

 } }  // namespace v8::internal
Index: src/extensions/trigger-failure-extension.h
diff --git a/src/extensions/free-buffer-extension.h b/src/extensions/trigger-failure-extension.h
similarity index 74%
copy from src/extensions/free-buffer-extension.h
copy to src/extensions/trigger-failure-extension.h
index 22d466f61e02b4e8367dfc9d06f00095aa5efe02..0659c200495718e0fba3d4fdbbff221a683ceac9 100644
--- a/src/extensions/free-buffer-extension.h
+++ b/src/extensions/trigger-failure-extension.h
@@ -25,25 +25,32 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

-#ifndef V8_EXTENSIONS_FREE_BUFFER_EXTENSION_H_
-#define V8_EXTENSIONS_FREE_BUFFER_EXTENSION_H_
+#ifndef V8_EXTENSIONS_TRIGGER_FAILURE_EXTENSION_H_
+#define V8_EXTENSIONS_TRIGGER_FAILURE_EXTENSION_H_

 #include "v8.h"

 namespace v8 {
 namespace internal {

-class FreeBufferExtension : public v8::Extension {
+class TriggerFailureExtension : public v8::Extension {
  public:
-  explicit FreeBufferExtension(const char* source)
-      : v8::Extension("v8/free-buffer", source) {}
+  explicit TriggerFailureExtension()
+      : v8::Extension("v8/trigger-failure", kSource) {}
   virtual v8::Handle<v8::FunctionTemplate> GetNativeFunctionTemplate(
       v8::Isolate* isolate,
       v8::Handle<v8::String> name);
-  static void FreeBuffer(const v8::FunctionCallbackInfo<v8::Value>& args);
+  static void TriggerCheckFalse(
+      const v8::FunctionCallbackInfo<v8::Value>& args);
+  static void TriggerAssertFalse(
+      const v8::FunctionCallbackInfo<v8::Value>& args);
+  static void TriggerSlowAssertFalse(
+      const v8::FunctionCallbackInfo<v8::Value>& args);
   static void Register();
+ private:
+  static const char* const kSource;
 };

 } }  // namespace v8::internal

-#endif  // V8_EXTENSIONS_FREE_BUFFER_EXTENSION_H_
+#endif  // V8_EXTENSIONS_TRIGGER_FAILURE_EXTENSION_H_
Index: src/flag-definitions.h
diff --git a/src/flag-definitions.h b/src/flag-definitions.h
index b304ce5f001a20032c354aa9bc8fa78f6b31f820..916206f033af5a7d074654d6e5cf91b052663020 100644
--- a/src/flag-definitions.h
+++ b/src/flag-definitions.h
@@ -421,6 +421,7 @@ DEFINE_string(expose_gc_as, NULL,
 DEFINE_implication(expose_gc_as, expose_gc)
 DEFINE_bool(expose_externalize_string, false,
             "expose externalize string extension")
+DEFINE_bool(expose_trigger_failure, false, "expose trigger-failure extension")
 DEFINE_int(stack_trace_limit, 10, "number of stack frames to capture")
 DEFINE_bool(builtins_in_stack_traces, false,
             "show built-in functions in stack traces")
Index: test/mjsunit/mjsunit.status
diff --git a/test/mjsunit/mjsunit.status b/test/mjsunit/mjsunit.status
index a0b45a0f133dfd4f0cff1718f624fcab47f9b71e..4997753a9dc5cf49aab8a3af14dc3a3cc805a1fe 100644
--- a/test/mjsunit/mjsunit.status
+++ b/test/mjsunit/mjsunit.status
@@ -99,6 +99,11 @@
############################################################################## # Long running test that reproduces memory leak and should be run manually.
   'regress/regress-2073': [SKIP],
+
+ ##############################################################################
+  # Tests verifying CHECK and ASSERT.
+  'verify-check-false': [FAIL, NO_VARIANTS],
+ 'verify-assert-false': [NO_VARIANTS, ['mode == release', PASS], ['mode == debug', FAIL]],
 }],  # ALWAYS

##############################################################################
Index: test/mjsunit/verify-assert-false.js
diff --git a/test/mjsunit/regress/regress-2690.js b/test/mjsunit/verify-assert-false.js
similarity index 96%
copy from test/mjsunit/regress/regress-2690.js
copy to test/mjsunit/verify-assert-false.js
index 0ed4c5c679a61e0fdb91cd0758b1246aa8f36565..8bea7df3999bfea7c38ff7e521a8b7a32a0899d7 100644
--- a/test/mjsunit/regress/regress-2690.js
+++ b/test/mjsunit/verify-assert-false.js
@@ -25,4 +25,6 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

-assertTrue(/\1[a]/.test("\1a"));
+// Flags: --expose-trigger-failure
+
+triggerAssertFalse();
Index: test/mjsunit/verify-check-false.js
diff --git a/test/mjsunit/regress/regress-2690.js b/test/mjsunit/verify-check-false.js
similarity index 96%
copy from test/mjsunit/regress/regress-2690.js
copy to test/mjsunit/verify-check-false.js
index 0ed4c5c679a61e0fdb91cd0758b1246aa8f36565..426bf846a68855291e577764bf9de8fccfb2b70d 100644
--- a/test/mjsunit/regress/regress-2690.js
+++ b/test/mjsunit/verify-check-false.js
@@ -25,4 +25,6 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

-assertTrue(/\1[a]/.test("\1a"));
+// Flags: --expose-trigger-failure
+
+triggerCheckFalse();
Index: tools/gyp/v8.gyp
diff --git a/tools/gyp/v8.gyp b/tools/gyp/v8.gyp
index 2164b74a85e39061ecf2bf307e212fe6ebbe6899..a1134f0411826ee11ea1de3cde00a376bc4cb135 100644
--- a/tools/gyp/v8.gyp
+++ b/tools/gyp/v8.gyp
@@ -340,6 +340,8 @@
         '../../src/extensions/gc-extension.h',
         '../../src/extensions/statistics-extension.cc',
         '../../src/extensions/statistics-extension.h',
+        '../../src/extensions/trigger-failure-extension.cc',
+        '../../src/extensions/trigger-failure-extension.h',
         '../../src/factory.cc',
         '../../src/factory.h',
         '../../src/fast-dtoa.cc',


--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to