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.