| Index: test/cctest/compiler/test-run-jscalls.cc
|
| diff --git a/test/cctest/compiler/test-run-jscalls.cc b/test/cctest/compiler/test-run-jscalls.cc
|
| index 2ad7e50467edcf87a4a773675d326772207af5a4..179e11835ad9faa0cd68593fdd851bd1f912f57f 100644
|
| --- a/test/cctest/compiler/test-run-jscalls.cc
|
| +++ b/test/cctest/compiler/test-run-jscalls.cc
|
| @@ -233,3 +233,85 @@ TEST(ReceiverPatching) {
|
| Handle<JSObject> g(T.function->context()->global_object()->global_proxy());
|
| T.CheckCall(g, T.undefined());
|
| }
|
| +
|
| +
|
| +THREADED_TEST(ContextLoadedFromActivation) {
|
| + i::FLAG_turbo_filter = "*";
|
| + i::FLAG_always_opt = true;
|
| + i::FLAG_context_specialization = false;
|
| +
|
| + const char* script =
|
| + "var x = 42;"
|
| + "(function() {"
|
| + " return function () { return x };"
|
| + "})()";
|
| +
|
| + v8::Isolate* isolate = CcTest::isolate();
|
| + v8::HandleScope outer(isolate);
|
| + v8::Local<v8::Value> fun;
|
| + {
|
| + v8::Local<v8::Context> env = v8::Context::New(isolate);
|
| + env->Enter();
|
| + CompileRun("var x = 42;");
|
| + fun = CompileRun(script);
|
| + env->Global()->Set(v8_str("foo"), fun);
|
| + ExpectInt32("foo();", 42);
|
| + env->Exit();
|
| + }
|
| +
|
| + {
|
| + v8::Local<v8::Context> env = v8::Context::New(isolate);
|
| + env->Enter();
|
| + v8::Local<v8::Value> fun2 = CompileRun(script);
|
| + i::Handle<i::Object> oifun = v8::Utils::OpenHandle(*fun);
|
| + i::Handle<i::JSFunction> ifun = Handle<JSFunction>::cast(oifun);
|
| + i::Handle<i::Object> oifun2 = v8::Utils::OpenHandle(*fun2);
|
| + i::Handle<i::JSFunction> ifun2 = Handle<JSFunction>::cast(oifun2);
|
| + ifun2->set_code(ifun->code());
|
| + env->Global()->Set(v8_str("foo"), fun2);
|
| + CompileRun("var x = 24;");
|
| + ExpectInt32("foo();", 24);
|
| + env->Exit();
|
| + }
|
| +}
|
| +
|
| +
|
| +THREADED_TEST(BuiltinLoadedFromActivation) {
|
| + i::FLAG_turbo_filter = "*";
|
| + i::FLAG_always_opt = true;
|
| + i::FLAG_context_specialization = false;
|
| +
|
| + const char* script =
|
| + "var x = 42;"
|
| + "(function() {"
|
| + " return function () { return this; };"
|
| + "})()";
|
| +
|
| + v8::Isolate* isolate = CcTest::isolate();
|
| + v8::HandleScope outer(isolate);
|
| + v8::Local<v8::Value> fun;
|
| + {
|
| + v8::Local<v8::Context> env = v8::Context::New(isolate);
|
| + env->Enter();
|
| + CompileRun("var x = 42;");
|
| + fun = CompileRun(script);
|
| + env->Global()->Set(v8_str("foo"), fun);
|
| + ExpectObject("foo()", env->Global());
|
| + env->Exit();
|
| + }
|
| +
|
| + {
|
| + v8::Local<v8::Context> env = v8::Context::New(isolate);
|
| + env->Enter();
|
| + v8::Local<v8::Value> fun2 = CompileRun(script);
|
| + i::Handle<i::Object> oifun = v8::Utils::OpenHandle(*fun);
|
| + i::Handle<i::JSFunction> ifun = Handle<JSFunction>::cast(oifun);
|
| + i::Handle<i::Object> oifun2 = v8::Utils::OpenHandle(*fun2);
|
| + i::Handle<i::JSFunction> ifun2 = Handle<JSFunction>::cast(oifun2);
|
| + ifun2->set_code(ifun->code());
|
| + env->Global()->Set(v8_str("foo"), fun2);
|
| + CompileRun("var x = 24;");
|
| + ExpectObject("foo()", env->Global());
|
| + env->Exit();
|
| + }
|
| +}
|
|
|