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 fa7e98d5ec8178940dcb901c0f29f71115453f14..38b9624d6e165b508c2f7de0980a25c2f3e41acc 100644 |
--- a/test/cctest/compiler/test-run-jscalls.cc |
+++ b/test/cctest/compiler/test-run-jscalls.cc |
@@ -245,3 +245,45 @@ TEST(CallEval) { |
T.CheckCall(T.Val(42), T.Val("x"), T.undefined()); |
} |
+ |
+ |
+TEST(ContextLoadedFromActivation) { |
+ const char* script = |
+ "var x = 42;" |
+ "(function() {" |
+ " return function () { return x };" |
+ "})()"; |
+ |
+ // Disable context specialization. |
+ FunctionTester T(script, false); |
+ v8::Local<v8::Context> context = v8::Context::New(CcTest::isolate()); |
+ v8::Context::Scope scope(context); |
+ v8::Local<v8::Value> value = CompileRun(script); |
+ i::Handle<i::Object> ofun = v8::Utils::OpenHandle(*value); |
+ i::Handle<i::JSFunction> jsfun = Handle<JSFunction>::cast(ofun); |
+ jsfun->set_code(T.function->code()); |
+ context->Global()->Set(v8_str("foo"), v8::Utils::ToLocal(jsfun)); |
+ CompileRun("var x = 24;"); |
+ ExpectInt32("foo();", 24); |
+} |
+ |
+ |
+TEST(BuiltinLoadedFromActivation) { |
+ const char* script = |
+ "var x = 42;" |
+ "(function() {" |
+ " return function () { return this; };" |
+ "})()"; |
+ |
+ // Disable context specialization. |
+ FunctionTester T(script, false); |
+ v8::Local<v8::Context> context = v8::Context::New(CcTest::isolate()); |
+ v8::Context::Scope scope(context); |
+ v8::Local<v8::Value> value = CompileRun(script); |
+ i::Handle<i::Object> ofun = v8::Utils::OpenHandle(*value); |
+ i::Handle<i::JSFunction> jsfun = Handle<JSFunction>::cast(ofun); |
+ jsfun->set_code(T.function->code()); |
+ context->Global()->Set(v8_str("foo"), v8::Utils::ToLocal(jsfun)); |
+ CompileRun("var x = 24;"); |
+ ExpectObject("foo()", context->Global()); |
+} |