OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 11531 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11542 | 11542 |
11543 // Check that you cannot use 'eval.call' with another object than the | 11543 // Check that you cannot use 'eval.call' with another object than the |
11544 // current global object. | 11544 // current global object. |
11545 script = v8_compile("other.y = 1; eval.call(other, 'y')"); | 11545 script = v8_compile("other.y = 1; eval.call(other, 'y')"); |
11546 result = script->Run(); | 11546 result = script->Run(); |
11547 CHECK(try_catch.HasCaught()); | 11547 CHECK(try_catch.HasCaught()); |
11548 } | 11548 } |
11549 | 11549 |
11550 | 11550 |
11551 // Test that calling eval in a context which has been detached from | 11551 // Test that calling eval in a context which has been detached from |
11552 // its global throws an exception. This behavior is consistent with | 11552 // its global proxy works. |
11553 // other JavaScript implementations. | |
11554 THREADED_TEST(EvalInDetachedGlobal) { | 11553 THREADED_TEST(EvalInDetachedGlobal) { |
11555 v8::Isolate* isolate = CcTest::isolate(); | 11554 v8::Isolate* isolate = CcTest::isolate(); |
11556 v8::HandleScope scope(isolate); | 11555 v8::HandleScope scope(isolate); |
11557 | 11556 |
11558 v8::Local<Context> context0 = Context::New(isolate); | 11557 v8::Local<Context> context0 = Context::New(isolate); |
11559 v8::Local<Context> context1 = Context::New(isolate); | 11558 v8::Local<Context> context1 = Context::New(isolate); |
11560 | 11559 |
11561 // Set up function in context0 that uses eval from context0. | 11560 // Set up function in context0 that uses eval from context0. |
11562 context0->Enter(); | 11561 context0->Enter(); |
11563 v8::Handle<v8::Value> fun = | 11562 v8::Handle<v8::Value> fun = |
11564 CompileRun("var x = 42;" | 11563 CompileRun("var x = 42;" |
11565 "(function() {" | 11564 "(function() {" |
11566 " var e = eval;" | 11565 " var e = eval;" |
11567 " return function(s) { return e(s); }" | 11566 " return function(s) { return e(s); }" |
11568 "})()"); | 11567 "})()"); |
11569 context0->Exit(); | 11568 context0->Exit(); |
11570 | 11569 |
11571 // Put the function into context1 and call it before and after | 11570 // Put the function into context1 and call it before and after |
11572 // detaching the global. Before detaching, the call succeeds and | 11571 // detaching the global. Before detaching, the call succeeds and |
11573 // after detaching and exception is thrown. | 11572 // after detaching and exception is thrown. |
11574 context1->Enter(); | 11573 context1->Enter(); |
11575 context1->Global()->Set(v8_str("fun"), fun); | 11574 context1->Global()->Set(v8_str("fun"), fun); |
11576 v8::Handle<v8::Value> x_value = CompileRun("fun('x')"); | 11575 v8::Handle<v8::Value> x_value = CompileRun("fun('x')"); |
11577 CHECK_EQ(42, x_value->Int32Value()); | 11576 CHECK_EQ(42, x_value->Int32Value()); |
11578 context0->DetachGlobal(); | 11577 context0->DetachGlobal(); |
11579 v8::TryCatch catcher; | 11578 v8::TryCatch catcher; |
11580 x_value = CompileRun("fun('x')"); | 11579 x_value = CompileRun("fun('x')"); |
11581 CHECK(x_value.IsEmpty()); | 11580 CHECK_EQ(42, x_value->Int32Value()); |
11582 CHECK(catcher.HasCaught()); | |
11583 context1->Exit(); | 11581 context1->Exit(); |
11584 } | 11582 } |
11585 | 11583 |
11586 | 11584 |
11587 THREADED_TEST(CrossLazyLoad) { | 11585 THREADED_TEST(CrossLazyLoad) { |
11588 v8::HandleScope scope(CcTest::isolate()); | 11586 v8::HandleScope scope(CcTest::isolate()); |
11589 LocalContext other; | 11587 LocalContext other; |
11590 LocalContext current; | 11588 LocalContext current; |
11591 | 11589 |
11592 Local<String> token = v8_str("<security token>"); | 11590 Local<String> token = v8_str("<security token>"); |
(...skipping 12877 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
24470 v8::HandleScope scope(CcTest::isolate()); | 24468 v8::HandleScope scope(CcTest::isolate()); |
24471 RandomLengthOneByteResource* r = | 24469 RandomLengthOneByteResource* r = |
24472 new RandomLengthOneByteResource(i::String::kMaxLength); | 24470 new RandomLengthOneByteResource(i::String::kMaxLength); |
24473 v8::Local<v8::String> str = v8::String::NewExternal(CcTest::isolate(), r); | 24471 v8::Local<v8::String> str = v8::String::NewExternal(CcTest::isolate(), r); |
24474 CHECK(!str.IsEmpty()); | 24472 CHECK(!str.IsEmpty()); |
24475 v8::TryCatch try_catch; | 24473 v8::TryCatch try_catch; |
24476 v8::Local<v8::String> result = v8::String::Concat(str, str); | 24474 v8::Local<v8::String> result = v8::String::Concat(str, str); |
24477 CHECK(result.IsEmpty()); | 24475 CHECK(result.IsEmpty()); |
24478 CHECK(!try_catch.HasCaught()); | 24476 CHECK(!try_catch.HasCaught()); |
24479 } | 24477 } |
OLD | NEW |