Reviewers: Mads Ager,

Description:
Allow using with and eval in JS extensions in debug mode by
getting rid of bogus assertion error.

Please review this at http://codereview.chromium.org/73072

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

Affected files:
   M     src/parser.cc
   M     test/cctest/test-api.cc


Index: test/cctest/test-api.cc
===================================================================
--- test/cctest/test-api.cc     (revision 1700)
+++ test/cctest/test-api.cc     (working copy)
@@ -2495,6 +2495,44 @@
  }


+static const char* kEvalExtensionSource =
+  "function UseEval() {"
+  "  var x = 42;"
+  "  return eval('x');"
+  "}";
+
+
+THREADED_TEST(UseEvalFromExtension) {
+  v8::HandleScope handle_scope;
+  v8::RegisterExtension(new Extension("evaltest", kEvalExtensionSource));
+  const char* extension_names[] = { "evaltest" };
+  v8::ExtensionConfiguration extensions(1, extension_names);
+  v8::Handle<Context> context = Context::New(&extensions);
+  Context::Scope lock(context);
+  v8::Handle<Value> result = Script::Compile(v8_str("UseEval()"))->Run();
+  CHECK_EQ(result, v8::Integer::New(42));
+}
+
+
+static const char* kWithExtensionSource =
+  "function UseWith() {"
+  "  var x = 42;"
+  "  with({x:87}) { return x; }"
+  "}";
+
+
+THREADED_TEST(UseWithFromExtension) {
+  v8::HandleScope handle_scope;
+  v8::RegisterExtension(new Extension("withtest", kWithExtensionSource));
+  const char* extension_names[] = { "withtest" };
+  v8::ExtensionConfiguration extensions(1, extension_names);
+  v8::Handle<Context> context = Context::New(&extensions);
+  Context::Scope lock(context);
+  v8::Handle<Value> result = Script::Compile(v8_str("UseWith()"))->Run();
+  CHECK_EQ(result, v8::Integer::New(87));
+}
+
+
  THREADED_TEST(AutoExtensions) {
    v8::HandleScope handle_scope;
    Extension* extension = new Extension("autotest", kSimpleExtensionSource);
Index: src/parser.cc
===================================================================
--- src/parser.cc       (revision 1700)
+++ src/parser.cc       (working copy)
@@ -2092,7 +2092,7 @@
    // code. If 'with' statements were allowed, the simplified setup of
    // the runtime context chain would allow access to properties in the
    // global object from within a 'with' statement.
-  ASSERT(!Bootstrapper::IsActive());
+  ASSERT(extension_ != NULL || !Bootstrapper::IsActive());

    Expect(Token::WITH, CHECK_OK);
    Expect(Token::LPAREN, CHECK_OK);
@@ -2761,7 +2761,7 @@
              if (var == NULL) {
                // We do not allow direct calls to 'eval' in our internal
                // JS files. Use builtin functions instead.
-              ASSERT(!Bootstrapper::IsActive());
+              ASSERT(extension_ != NULL || !Bootstrapper::IsActive());
                top_scope_->RecordEvalCall();
                is_potentially_direct_eval = true;
              }



--~--~---------~--~----~------------~-------~--~----~
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
-~----------~----~----~----~------~----~------~--~---

Reply via email to