OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 10645 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10656 v8::TryCatch try_catch; | 10656 v8::TryCatch try_catch; |
10657 | 10657 |
10658 Local<String> source = String::New(script); | 10658 Local<String> source = String::New(script); |
10659 Local<Script> compiled_script = Script::New(source, NULL, sd); | 10659 Local<Script> compiled_script = Script::New(source, NULL, sd); |
10660 CHECK(try_catch.HasCaught()); | 10660 CHECK(try_catch.HasCaught()); |
10661 String::AsciiValue exception_value(try_catch.Message()->Get()); | 10661 String::AsciiValue exception_value(try_catch.Message()->Get()); |
10662 CHECK_EQ("Uncaught SyntaxError: Invalid preparser data for function bar", | 10662 CHECK_EQ("Uncaught SyntaxError: Invalid preparser data for function bar", |
10663 *exception_value); | 10663 *exception_value); |
10664 | 10664 |
10665 try_catch.Reset(); | 10665 try_catch.Reset(); |
| 10666 |
10666 // Overwrite function bar's start position with 200. The function entry | 10667 // Overwrite function bar's start position with 200. The function entry |
10667 // will not be found when searching for it by position. | 10668 // will not be found when searching for it by position and we should fall |
| 10669 // back on eager compilation. |
10668 sd = v8::ScriptData::PreCompile(script, i::StrLength(script)); | 10670 sd = v8::ScriptData::PreCompile(script, i::StrLength(script)); |
10669 sd_data = reinterpret_cast<unsigned*>(const_cast<char*>(sd->Data())); | 10671 sd_data = reinterpret_cast<unsigned*>(const_cast<char*>(sd->Data())); |
10670 sd_data[kHeaderSize + 1 * kFunctionEntrySize + kFunctionEntryStartOffset] = | 10672 sd_data[kHeaderSize + 1 * kFunctionEntrySize + kFunctionEntryStartOffset] = |
10671 200; | 10673 200; |
10672 compiled_script = Script::New(source, NULL, sd); | 10674 compiled_script = Script::New(source, NULL, sd); |
10673 CHECK(try_catch.HasCaught()); | 10675 CHECK(!try_catch.HasCaught()); |
10674 String::AsciiValue second_exception_value(try_catch.Message()->Get()); | |
10675 CHECK_EQ("Uncaught SyntaxError: Invalid preparser data for function bar", | |
10676 *second_exception_value); | |
10677 | 10676 |
10678 delete sd; | 10677 delete sd; |
10679 } | 10678 } |
10680 | 10679 |
10681 | 10680 |
10682 // Verifies that the Handle<String> and const char* versions of the API produce | 10681 // Verifies that the Handle<String> and const char* versions of the API produce |
10683 // the same results (at least for one trivial case). | 10682 // the same results (at least for one trivial case). |
10684 TEST(PreCompileAPIVariationsAreSame) { | 10683 TEST(PreCompileAPIVariationsAreSame) { |
10685 v8::V8::Initialize(); | 10684 v8::V8::Initialize(); |
10686 v8::HandleScope scope; | 10685 v8::HandleScope scope; |
(...skipping 4143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
14830 } | 14829 } |
14831 | 14830 |
14832 i::Isolate::Current()->heap()->CollectAllGarbage(true); | 14831 i::Isolate::Current()->heap()->CollectAllGarbage(true); |
14833 { i::Object* raw_map_cache = i::Isolate::Current()->context()->map_cache(); | 14832 { i::Object* raw_map_cache = i::Isolate::Current()->context()->map_cache(); |
14834 if (raw_map_cache != i::Isolate::Current()->heap()->undefined_value()) { | 14833 if (raw_map_cache != i::Isolate::Current()->heap()->undefined_value()) { |
14835 i::MapCache* map_cache = i::MapCache::cast(raw_map_cache); | 14834 i::MapCache* map_cache = i::MapCache::cast(raw_map_cache); |
14836 CHECK_GT(elements, map_cache->NumberOfElements()); | 14835 CHECK_GT(elements, map_cache->NumberOfElements()); |
14837 } | 14836 } |
14838 } | 14837 } |
14839 } | 14838 } |
OLD | NEW |