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 -~----------~----~----~----~------~----~------~--~---
