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