Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(778)

Side by Side Diff: test/cctest/test-parsing.cc

Issue 1371363006: Continuing removing deprecated function from cctest (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fixed a bug in test-serialize.cc. Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « test/cctest/test-object-observe.cc ('k') | test/cctest/test-platform.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
11 // with the distribution. 11 // with the distribution.
12 // * Neither the name of Google Inc. nor the names of its 12 // * Neither the name of Google Inc. nor the names of its
13 // contributors may be used to endorse or promote products derived 13 // contributors may be used to endorse or promote products derived
14 // from this software without specific prior written permission. 14 // from this software without specific prior written permission.
15 // 15 //
16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 27
28 // TODO(mythria): Remove this define after this flag is turned on globally
29 #define V8_IMMINENT_DEPRECATION_WARNINGS
30
28 #include <stdio.h> 31 #include <stdio.h>
29 #include <stdlib.h> 32 #include <stdlib.h>
30 #include <string.h> 33 #include <string.h>
31 34
32 #include "src/v8.h" 35 #include "src/v8.h"
33 36
34 #include "src/ast.h" 37 #include "src/ast.h"
35 #include "src/ast-numbering.h" 38 #include "src/ast-numbering.h"
36 #include "src/ast-value-factory.h" 39 #include "src/ast-value-factory.h"
37 #include "src/compiler.h" 40 #include "src/compiler.h"
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 " f\\u006fr: 'keyword propertyname with escape'};" 221 " f\\u006fr: 'keyword propertyname with escape'};"
219 "var v = /RegExp Literal/;" 222 "var v = /RegExp Literal/;"
220 "var w = /RegExp Literal\\u0020With Escape/gin;" 223 "var w = /RegExp Literal\\u0020With Escape/gin;"
221 "var y = { get getter() { return 42; }, " 224 "var y = { get getter() { return 42; }, "
222 " set setter(v) { this.value = v; }};" 225 " set setter(v) { this.value = v; }};"
223 "var f = a => function (b) { return a + b; };" 226 "var f = a => function (b) { return a + b; };"
224 "var g = a => b => a + b;"; 227 "var g = a => b => a + b;";
225 int source_length = i::StrLength(source); 228 int source_length = i::StrLength(source);
226 229
227 // ScriptResource will be deleted when the corresponding String is GCd. 230 // ScriptResource will be deleted when the corresponding String is GCd.
228 v8::ScriptCompiler::Source script_source(v8::String::NewExternal( 231 v8::ScriptCompiler::Source script_source(
229 isolate, new ScriptResource(source, source_length))); 232 v8::String::NewExternalOneByte(isolate,
233 new ScriptResource(source, source_length))
234 .ToLocalChecked());
230 i::FLAG_min_preparse_length = 0; 235 i::FLAG_min_preparse_length = 0;
231 v8::ScriptCompiler::Compile(isolate, &script_source, 236 v8::ScriptCompiler::Compile(isolate->GetCurrentContext(), &script_source,
232 v8::ScriptCompiler::kProduceParserCache); 237 v8::ScriptCompiler::kProduceParserCache)
238 .ToLocalChecked();
233 CHECK(script_source.GetCachedData()); 239 CHECK(script_source.GetCachedData());
234 240
235 // Compile the script again, using the cached data. 241 // Compile the script again, using the cached data.
236 bool lazy_flag = i::FLAG_lazy; 242 bool lazy_flag = i::FLAG_lazy;
237 i::FLAG_lazy = true; 243 i::FLAG_lazy = true;
238 v8::ScriptCompiler::Compile(isolate, &script_source, 244 v8::ScriptCompiler::Compile(isolate->GetCurrentContext(), &script_source,
239 v8::ScriptCompiler::kConsumeParserCache); 245 v8::ScriptCompiler::kConsumeParserCache)
246 .ToLocalChecked();
240 i::FLAG_lazy = false; 247 i::FLAG_lazy = false;
241 v8::ScriptCompiler::CompileUnbound(isolate, &script_source, 248 v8::ScriptCompiler::CompileUnboundScript(
242 v8::ScriptCompiler::kConsumeParserCache); 249 isolate, &script_source, v8::ScriptCompiler::kConsumeParserCache)
250 .ToLocalChecked();
243 i::FLAG_lazy = lazy_flag; 251 i::FLAG_lazy = lazy_flag;
244 } 252 }
245 253
246 254
247 TEST(PreparseFunctionDataIsUsed) { 255 TEST(PreparseFunctionDataIsUsed) {
248 // This tests that we actually do use the function data generated by the 256 // This tests that we actually do use the function data generated by the
249 // preparser. 257 // preparser.
250 258
251 // Make preparsing work for short scripts. 259 // Make preparsing work for short scripts.
252 i::FLAG_min_preparse_length = 0; 260 i::FLAG_min_preparse_length = 0;
(...skipping 11 matching lines...) Expand all
264 }; 272 };
265 273
266 // Insert a syntax error inside the lazy function. 274 // Insert a syntax error inside the lazy function.
267 const char* bad_code[] = { 275 const char* bad_code[] = {
268 "function this_is_lazy() { if ( } function foo() { return 25; } foo();", 276 "function this_is_lazy() { if ( } function foo() { return 25; } foo();",
269 "var this_is_lazy = () => { if ( }; var foo = () => 25; foo();", 277 "var this_is_lazy = () => { if ( }; var foo = () => 25; foo();",
270 }; 278 };
271 279
272 for (unsigned i = 0; i < arraysize(good_code); i++) { 280 for (unsigned i = 0; i < arraysize(good_code); i++) {
273 v8::ScriptCompiler::Source good_source(v8_str(good_code[i])); 281 v8::ScriptCompiler::Source good_source(v8_str(good_code[i]));
274 v8::ScriptCompiler::Compile(isolate, &good_source, 282 v8::ScriptCompiler::Compile(isolate->GetCurrentContext(), &good_source,
275 v8::ScriptCompiler::kProduceParserCache); 283 v8::ScriptCompiler::kProduceParserCache)
284 .ToLocalChecked();
276 285
277 const v8::ScriptCompiler::CachedData* cached_data = 286 const v8::ScriptCompiler::CachedData* cached_data =
278 good_source.GetCachedData(); 287 good_source.GetCachedData();
279 CHECK(cached_data->data != NULL); 288 CHECK(cached_data->data != NULL);
280 CHECK_GT(cached_data->length, 0); 289 CHECK_GT(cached_data->length, 0);
281 290
282 // Now compile the erroneous code with the good preparse data. If the 291 // Now compile the erroneous code with the good preparse data. If the
283 // preparse data is used, the lazy function is skipped and it should 292 // preparse data is used, the lazy function is skipped and it should
284 // compile fine. 293 // compile fine.
285 v8::ScriptCompiler::Source bad_source( 294 v8::ScriptCompiler::Source bad_source(
286 v8_str(bad_code[i]), new v8::ScriptCompiler::CachedData( 295 v8_str(bad_code[i]), new v8::ScriptCompiler::CachedData(
287 cached_data->data, cached_data->length)); 296 cached_data->data, cached_data->length));
288 v8::Local<v8::Value> result = 297 v8::Local<v8::Value> result =
289 v8::ScriptCompiler::Compile(isolate, &bad_source, 298 CompileRun(isolate->GetCurrentContext(), &bad_source,
290 v8::ScriptCompiler::kConsumeParserCache) 299 v8::ScriptCompiler::kConsumeParserCache);
291 ->Run();
292 CHECK(result->IsInt32()); 300 CHECK(result->IsInt32());
293 CHECK_EQ(25, result->Int32Value()); 301 CHECK_EQ(25, result->Int32Value(isolate->GetCurrentContext()).FromJust());
294 } 302 }
295 } 303 }
296 304
297 305
298 TEST(StandAlonePreParser) { 306 TEST(StandAlonePreParser) {
299 v8::V8::Initialize(); 307 v8::V8::Initialize();
300 308
301 CcTest::i_isolate()->stack_guard()->SetStackLimit( 309 CcTest::i_isolate()->stack_guard()->SetStackLimit(
302 i::GetCurrentStackPosition() - 128 * 1024); 310 i::GetCurrentStackPosition() - 128 * 1024);
303 311
(...skipping 723 matching lines...) Expand 10 before | Expand all | Expand 10 after
1027 {"eval('super.x')", EVAL}, 1035 {"eval('super.x')", EVAL},
1028 {"eval('this.x')", EVAL}, 1036 {"eval('this.x')", EVAL},
1029 {"eval('arguments')", EVAL}, 1037 {"eval('arguments')", EVAL},
1030 }; 1038 };
1031 // clang-format on 1039 // clang-format on
1032 1040
1033 i::Isolate* isolate = CcTest::i_isolate(); 1041 i::Isolate* isolate = CcTest::i_isolate();
1034 i::Factory* factory = isolate->factory(); 1042 i::Factory* factory = isolate->factory();
1035 1043
1036 v8::HandleScope handles(CcTest::isolate()); 1044 v8::HandleScope handles(CcTest::isolate());
1037 v8::Handle<v8::Context> context = v8::Context::New(CcTest::isolate()); 1045 v8::Local<v8::Context> context = v8::Context::New(CcTest::isolate());
1038 v8::Context::Scope context_scope(context); 1046 v8::Context::Scope context_scope(context);
1039 1047
1040 isolate->stack_guard()->SetStackLimit(i::GetCurrentStackPosition() - 1048 isolate->stack_guard()->SetStackLimit(i::GetCurrentStackPosition() -
1041 128 * 1024); 1049 128 * 1024);
1042 1050
1043 for (unsigned j = 0; j < arraysize(surroundings); ++j) { 1051 for (unsigned j = 0; j < arraysize(surroundings); ++j) {
1044 for (unsigned i = 0; i < arraysize(source_data); ++i) { 1052 for (unsigned i = 0; i < arraysize(source_data); ++i) {
1045 // Super property is only allowed in constructor and method. 1053 // Super property is only allowed in constructor and method.
1046 if (((source_data[i].expected & SUPER_PROPERTY) || 1054 if (((source_data[i].expected & SUPER_PROPERTY) ||
1047 (source_data[i].expected == NONE)) && j != 2) { 1055 (source_data[i].expected == NONE)) && j != 2) {
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after
1332 { " 'foo';\n" 1340 { " 'foo';\n"
1333 " (function fun", "(a,b) { 'bar\360\220\220\214'; }", ")();", 1341 " (function fun", "(a,b) { 'bar\360\220\220\214'; }", ")();",
1334 i::FUNCTION_SCOPE, i::SLOPPY }, 1342 i::FUNCTION_SCOPE, i::SLOPPY },
1335 { NULL, NULL, NULL, i::EVAL_SCOPE, i::SLOPPY } 1343 { NULL, NULL, NULL, i::EVAL_SCOPE, i::SLOPPY }
1336 }; 1344 };
1337 1345
1338 i::Isolate* isolate = CcTest::i_isolate(); 1346 i::Isolate* isolate = CcTest::i_isolate();
1339 i::Factory* factory = isolate->factory(); 1347 i::Factory* factory = isolate->factory();
1340 1348
1341 v8::HandleScope handles(CcTest::isolate()); 1349 v8::HandleScope handles(CcTest::isolate());
1342 v8::Handle<v8::Context> context = v8::Context::New(CcTest::isolate()); 1350 v8::Local<v8::Context> context = v8::Context::New(CcTest::isolate());
1343 v8::Context::Scope context_scope(context); 1351 v8::Context::Scope context_scope(context);
1344 1352
1345 isolate->stack_guard()->SetStackLimit(i::GetCurrentStackPosition() - 1353 isolate->stack_guard()->SetStackLimit(i::GetCurrentStackPosition() -
1346 128 * 1024); 1354 128 * 1024);
1347 1355
1348 for (int i = 0; source_data[i].outer_prefix; i++) { 1356 for (int i = 0; source_data[i].outer_prefix; i++) {
1349 int kPrefixLen = Utf8LengthHelper(source_data[i].outer_prefix); 1357 int kPrefixLen = Utf8LengthHelper(source_data[i].outer_prefix);
1350 int kInnerLen = Utf8LengthHelper(source_data[i].inner_source); 1358 int kInnerLen = Utf8LengthHelper(source_data[i].inner_source);
1351 int kSuffixLen = Utf8LengthHelper(source_data[i].outer_suffix); 1359 int kSuffixLen = Utf8LengthHelper(source_data[i].outer_suffix);
1352 int kPrefixByteLen = i::StrLength(source_data[i].outer_prefix); 1360 int kPrefixByteLen = i::StrLength(source_data[i].outer_prefix);
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
1467 i::Handle<i::String> FormatMessage(i::Vector<unsigned> data) { 1475 i::Handle<i::String> FormatMessage(i::Vector<unsigned> data) {
1468 i::Isolate* isolate = CcTest::i_isolate(); 1476 i::Isolate* isolate = CcTest::i_isolate();
1469 int message = data[i::PreparseDataConstants::kMessageTemplatePos]; 1477 int message = data[i::PreparseDataConstants::kMessageTemplatePos];
1470 int arg_count = data[i::PreparseDataConstants::kMessageArgCountPos]; 1478 int arg_count = data[i::PreparseDataConstants::kMessageArgCountPos];
1471 i::Handle<i::Object> arg_object; 1479 i::Handle<i::Object> arg_object;
1472 if (arg_count == 1) { 1480 if (arg_count == 1) {
1473 // Position after text found by skipping past length field and 1481 // Position after text found by skipping past length field and
1474 // length field content words. 1482 // length field content words.
1475 const char* arg = 1483 const char* arg =
1476 ReadString(&data[i::PreparseDataConstants::kMessageArgPos]); 1484 ReadString(&data[i::PreparseDataConstants::kMessageArgPos]);
1477 arg_object = 1485 arg_object = v8::Utils::OpenHandle(*v8_str(arg));
1478 v8::Utils::OpenHandle(*v8::String::NewFromUtf8(CcTest::isolate(), arg));
1479 i::DeleteArray(arg); 1486 i::DeleteArray(arg);
1480 } else { 1487 } else {
1481 CHECK_EQ(0, arg_count); 1488 CHECK_EQ(0, arg_count);
1482 arg_object = isolate->factory()->undefined_value(); 1489 arg_object = isolate->factory()->undefined_value();
1483 } 1490 }
1484 1491
1485 data.Dispose(); 1492 data.Dispose();
1486 return i::MessageTemplate::FormatMessage(isolate, message, arg_object); 1493 return i::MessageTemplate::FormatMessage(isolate, message, arg_object);
1487 } 1494 }
1488 1495
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
1746 const char* termination_data[] = { 1753 const char* termination_data[] = {
1747 "", 1754 "",
1748 ";", 1755 ";",
1749 "\n", 1756 "\n",
1750 ";\n", 1757 ";\n",
1751 "\n;", 1758 "\n;",
1752 NULL 1759 NULL
1753 }; 1760 };
1754 1761
1755 v8::HandleScope handles(CcTest::isolate()); 1762 v8::HandleScope handles(CcTest::isolate());
1756 v8::Handle<v8::Context> context = v8::Context::New(CcTest::isolate()); 1763 v8::Local<v8::Context> context = v8::Context::New(CcTest::isolate());
1757 v8::Context::Scope context_scope(context); 1764 v8::Context::Scope context_scope(context);
1758 1765
1759 CcTest::i_isolate()->stack_guard()->SetStackLimit( 1766 CcTest::i_isolate()->stack_guard()->SetStackLimit(
1760 i::GetCurrentStackPosition() - 128 * 1024); 1767 i::GetCurrentStackPosition() - 128 * 1024);
1761 1768
1762 for (int i = 0; context_data[i][0] != NULL; ++i) { 1769 for (int i = 0; context_data[i][0] != NULL; ++i) {
1763 for (int j = 0; statement_data[j] != NULL; ++j) { 1770 for (int j = 0; statement_data[j] != NULL; ++j) {
1764 for (int k = 0; termination_data[k] != NULL; ++k) { 1771 for (int k = 0; termination_data[k] != NULL; ++k) {
1765 int kPrefixLen = i::StrLength(context_data[i][0]); 1772 int kPrefixLen = i::StrLength(context_data[i][0]);
1766 int kStatementLen = i::StrLength(statement_data[j]); 1773 int kStatementLen = i::StrLength(statement_data[j]);
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
1802 v8::Context::Scope context_scope( 1809 v8::Context::Scope context_scope(
1803 v8::Context::New(CcTest::isolate())); 1810 v8::Context::New(CcTest::isolate()));
1804 v8::TryCatch try_catch(CcTest::isolate()); 1811 v8::TryCatch try_catch(CcTest::isolate());
1805 const char* script = 1812 const char* script =
1806 "\"use strict\"; \n" 1813 "\"use strict\"; \n"
1807 "a = function() { \n" 1814 "a = function() { \n"
1808 " b = function() { \n" 1815 " b = function() { \n"
1809 " 01; \n" 1816 " 01; \n"
1810 " }; \n" 1817 " }; \n"
1811 "}; \n"; 1818 "}; \n";
1812 v8::Script::Compile(v8::String::NewFromUtf8(CcTest::isolate(), script)); 1819 v8_compile(v8_str(script));
1813 CHECK(try_catch.HasCaught()); 1820 CHECK(try_catch.HasCaught());
1814 v8::String::Utf8Value exception(try_catch.Exception()); 1821 v8::String::Utf8Value exception(try_catch.Exception());
1815 CHECK_EQ(0, 1822 CHECK_EQ(0,
1816 strcmp("SyntaxError: Octal literals are not allowed in strict mode.", 1823 strcmp("SyntaxError: Octal literals are not allowed in strict mode.",
1817 *exception)); 1824 *exception));
1818 } 1825 }
1819 1826
1820 1827
1821 void RunParserSyncTest(const char* context_data[][2], 1828 void RunParserSyncTest(const char* context_data[][2],
1822 const char* statement_data[], 1829 const char* statement_data[],
1823 ParserSyncTestResult result, 1830 ParserSyncTestResult result,
1824 const ParserFlag* flags = NULL, 1831 const ParserFlag* flags = NULL,
1825 int flags_len = 0, 1832 int flags_len = 0,
1826 const ParserFlag* always_true_flags = NULL, 1833 const ParserFlag* always_true_flags = NULL,
1827 int always_true_len = 0, 1834 int always_true_len = 0,
1828 const ParserFlag* always_false_flags = NULL, 1835 const ParserFlag* always_false_flags = NULL,
1829 int always_false_len = 0) { 1836 int always_false_len = 0) {
1830 v8::HandleScope handles(CcTest::isolate()); 1837 v8::HandleScope handles(CcTest::isolate());
1831 v8::Handle<v8::Context> context = v8::Context::New(CcTest::isolate()); 1838 v8::Local<v8::Context> context = v8::Context::New(CcTest::isolate());
1832 v8::Context::Scope context_scope(context); 1839 v8::Context::Scope context_scope(context);
1833 1840
1834 CcTest::i_isolate()->stack_guard()->SetStackLimit( 1841 CcTest::i_isolate()->stack_guard()->SetStackLimit(
1835 i::GetCurrentStackPosition() - 128 * 1024); 1842 i::GetCurrentStackPosition() - 128 * 1024);
1836 1843
1837 // Experimental feature flags should not go here; pass the flags as 1844 // Experimental feature flags should not go here; pass the flags as
1838 // always_true_flags if the test needs them. 1845 // always_true_flags if the test needs them.
1839 static const ParserFlag default_flags[] = { 1846 static const ParserFlag default_flags[] = {
1840 kAllowLazy, 1847 kAllowLazy,
1841 kAllowNatives, 1848 kAllowNatives,
(...skipping 1348 matching lines...) Expand 10 before | Expand all | Expand 10 after
3190 v8::Isolate* isolate = CcTest::isolate(); 3197 v8::Isolate* isolate = CcTest::isolate();
3191 v8::HandleScope scope(isolate); 3198 v8::HandleScope scope(isolate);
3192 LocalContext env; 3199 LocalContext env;
3193 uint16_t* two_byte_source = AsciiToTwoByteString( 3200 uint16_t* two_byte_source = AsciiToTwoByteString(
3194 "var obj1 = { oXj2 : { foo1: function() {} } }; " 3201 "var obj1 = { oXj2 : { foo1: function() {} } }; "
3195 "%FunctionGetInferredName(obj1.oXj2.foo1)"); 3202 "%FunctionGetInferredName(obj1.oXj2.foo1)");
3196 uint16_t* two_byte_name = AsciiToTwoByteString("obj1.oXj2.foo1"); 3203 uint16_t* two_byte_name = AsciiToTwoByteString("obj1.oXj2.foo1");
3197 // Make it really non-Latin1 (replace the Xs with a non-Latin1 character). 3204 // Make it really non-Latin1 (replace the Xs with a non-Latin1 character).
3198 two_byte_source[14] = two_byte_source[78] = two_byte_name[6] = 0x010d; 3205 two_byte_source[14] = two_byte_source[78] = two_byte_name[6] = 0x010d;
3199 v8::Local<v8::String> source = 3206 v8::Local<v8::String> source =
3200 v8::String::NewFromTwoByte(isolate, two_byte_source); 3207 v8::String::NewFromTwoByte(isolate, two_byte_source,
3208 v8::NewStringType::kNormal)
3209 .ToLocalChecked();
3201 v8::Local<v8::Value> result = CompileRun(source); 3210 v8::Local<v8::Value> result = CompileRun(source);
3202 CHECK(result->IsString()); 3211 CHECK(result->IsString());
3203 v8::Local<v8::String> expected_name = 3212 v8::Local<v8::String> expected_name =
3204 v8::String::NewFromTwoByte(isolate, two_byte_name); 3213 v8::String::NewFromTwoByte(isolate, two_byte_name,
3205 CHECK(result->Equals(expected_name)); 3214 v8::NewStringType::kNormal)
3215 .ToLocalChecked();
3216 CHECK(result->Equals(isolate->GetCurrentContext(), expected_name).FromJust());
3206 i::DeleteArray(two_byte_source); 3217 i::DeleteArray(two_byte_source);
3207 i::DeleteArray(two_byte_name); 3218 i::DeleteArray(two_byte_name);
3208 } 3219 }
3209 3220
3210 3221
3211 TEST(FuncNameInferrerEscaped) { 3222 TEST(FuncNameInferrerEscaped) {
3212 // The same as FuncNameInferrerTwoByte, except that we express the two-byte 3223 // The same as FuncNameInferrerTwoByte, except that we express the two-byte
3213 // character as a unicode escape. 3224 // character as a unicode escape.
3214 i::FLAG_allow_natives_syntax = true; 3225 i::FLAG_allow_natives_syntax = true;
3215 v8::Isolate* isolate = CcTest::isolate(); 3226 v8::Isolate* isolate = CcTest::isolate();
3216 v8::HandleScope scope(isolate); 3227 v8::HandleScope scope(isolate);
3217 LocalContext env; 3228 LocalContext env;
3218 uint16_t* two_byte_source = AsciiToTwoByteString( 3229 uint16_t* two_byte_source = AsciiToTwoByteString(
3219 "var obj1 = { o\\u010dj2 : { foo1: function() {} } }; " 3230 "var obj1 = { o\\u010dj2 : { foo1: function() {} } }; "
3220 "%FunctionGetInferredName(obj1.o\\u010dj2.foo1)"); 3231 "%FunctionGetInferredName(obj1.o\\u010dj2.foo1)");
3221 uint16_t* two_byte_name = AsciiToTwoByteString("obj1.oXj2.foo1"); 3232 uint16_t* two_byte_name = AsciiToTwoByteString("obj1.oXj2.foo1");
3222 // Fix to correspond to the non-ASCII name in two_byte_source. 3233 // Fix to correspond to the non-ASCII name in two_byte_source.
3223 two_byte_name[6] = 0x010d; 3234 two_byte_name[6] = 0x010d;
3224 v8::Local<v8::String> source = 3235 v8::Local<v8::String> source =
3225 v8::String::NewFromTwoByte(isolate, two_byte_source); 3236 v8::String::NewFromTwoByte(isolate, two_byte_source,
3237 v8::NewStringType::kNormal)
3238 .ToLocalChecked();
3226 v8::Local<v8::Value> result = CompileRun(source); 3239 v8::Local<v8::Value> result = CompileRun(source);
3227 CHECK(result->IsString()); 3240 CHECK(result->IsString());
3228 v8::Local<v8::String> expected_name = 3241 v8::Local<v8::String> expected_name =
3229 v8::String::NewFromTwoByte(isolate, two_byte_name); 3242 v8::String::NewFromTwoByte(isolate, two_byte_name,
3230 CHECK(result->Equals(expected_name)); 3243 v8::NewStringType::kNormal)
3244 .ToLocalChecked();
3245 CHECK(result->Equals(isolate->GetCurrentContext(), expected_name).FromJust());
3231 i::DeleteArray(two_byte_source); 3246 i::DeleteArray(two_byte_source);
3232 i::DeleteArray(two_byte_name); 3247 i::DeleteArray(two_byte_name);
3233 } 3248 }
3234 3249
3235 3250
3236 TEST(RegressionLazyFunctionWithErrorWithArg) { 3251 TEST(RegressionLazyFunctionWithErrorWithArg) {
3237 // The bug occurred when a lazy function had an error which requires a 3252 // The bug occurred when a lazy function had an error which requires a
3238 // parameter (such as "unknown label" here). The error message was processed 3253 // parameter (such as "unknown label" here). The error message was processed
3239 // before the AstValueFactory containing the error message string was 3254 // before the AstValueFactory containing the error message string was
3240 // internalized. 3255 // internalized.
(...skipping 2243 matching lines...) Expand 10 before | Expand all | Expand 10 after
5484 "import { for as f } from 'm.js';", 5499 "import { for as f } from 'm.js';",
5485 "import { yield as y } from 'm.js';", 5500 "import { yield as y } from 'm.js';",
5486 "import { static as s } from 'm.js';", 5501 "import { static as s } from 'm.js';",
5487 "import { let as l } from 'm.js';", 5502 "import { let as l } from 'm.js';",
5488 }; 5503 };
5489 5504
5490 i::Isolate* isolate = CcTest::i_isolate(); 5505 i::Isolate* isolate = CcTest::i_isolate();
5491 i::Factory* factory = isolate->factory(); 5506 i::Factory* factory = isolate->factory();
5492 5507
5493 v8::HandleScope handles(CcTest::isolate()); 5508 v8::HandleScope handles(CcTest::isolate());
5494 v8::Handle<v8::Context> context = v8::Context::New(CcTest::isolate()); 5509 v8::Local<v8::Context> context = v8::Context::New(CcTest::isolate());
5495 v8::Context::Scope context_scope(context); 5510 v8::Context::Scope context_scope(context);
5496 5511
5497 isolate->stack_guard()->SetStackLimit(i::GetCurrentStackPosition() - 5512 isolate->stack_guard()->SetStackLimit(i::GetCurrentStackPosition() -
5498 128 * 1024); 5513 128 * 1024);
5499 5514
5500 for (unsigned i = 0; i < arraysize(kSources); ++i) { 5515 for (unsigned i = 0; i < arraysize(kSources); ++i) {
5501 i::Handle<i::String> source = 5516 i::Handle<i::String> source =
5502 factory->NewStringFromAsciiChecked(kSources[i]); 5517 factory->NewStringFromAsciiChecked(kSources[i]);
5503 5518
5504 // Show that parsing as a module works 5519 // Show that parsing as a module works
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
5601 5616
5602 // TODO(ES6): These two forms should be supported 5617 // TODO(ES6): These two forms should be supported
5603 "export default function() {};", 5618 "export default function() {};",
5604 "export default class {};" 5619 "export default class {};"
5605 }; 5620 };
5606 5621
5607 i::Isolate* isolate = CcTest::i_isolate(); 5622 i::Isolate* isolate = CcTest::i_isolate();
5608 i::Factory* factory = isolate->factory(); 5623 i::Factory* factory = isolate->factory();
5609 5624
5610 v8::HandleScope handles(CcTest::isolate()); 5625 v8::HandleScope handles(CcTest::isolate());
5611 v8::Handle<v8::Context> context = v8::Context::New(CcTest::isolate()); 5626 v8::Local<v8::Context> context = v8::Context::New(CcTest::isolate());
5612 v8::Context::Scope context_scope(context); 5627 v8::Context::Scope context_scope(context);
5613 5628
5614 isolate->stack_guard()->SetStackLimit(i::GetCurrentStackPosition() - 5629 isolate->stack_guard()->SetStackLimit(i::GetCurrentStackPosition() -
5615 128 * 1024); 5630 128 * 1024);
5616 5631
5617 for (unsigned i = 0; i < arraysize(kErrorSources); ++i) { 5632 for (unsigned i = 0; i < arraysize(kErrorSources); ++i) {
5618 i::Handle<i::String> source = 5633 i::Handle<i::String> source =
5619 factory->NewStringFromAsciiChecked(kErrorSources[i]); 5634 factory->NewStringFromAsciiChecked(kErrorSources[i]);
5620 5635
5621 i::Handle<i::Script> script = factory->NewScript(source); 5636 i::Handle<i::Script> script = factory->NewScript(source);
5622 i::Zone zone; 5637 i::Zone zone;
5623 i::ParseInfo info(&zone, script); 5638 i::ParseInfo info(&zone, script);
5624 i::Parser parser(&info); 5639 i::Parser parser(&info);
5625 info.set_module(); 5640 info.set_module();
5626 CHECK(!parser.Parse(&info)); 5641 CHECK(!parser.Parse(&info));
5627 } 5642 }
5628 } 5643 }
5629 5644
5630 5645
5631 TEST(ModuleParsingInternals) { 5646 TEST(ModuleParsingInternals) {
5632 i::FLAG_harmony_modules = true; 5647 i::FLAG_harmony_modules = true;
5633 5648
5634 i::Isolate* isolate = CcTest::i_isolate(); 5649 i::Isolate* isolate = CcTest::i_isolate();
5635 i::Factory* factory = isolate->factory(); 5650 i::Factory* factory = isolate->factory();
5636 v8::HandleScope handles(CcTest::isolate()); 5651 v8::HandleScope handles(CcTest::isolate());
5637 v8::Handle<v8::Context> context = v8::Context::New(CcTest::isolate()); 5652 v8::Local<v8::Context> context = v8::Context::New(CcTest::isolate());
5638 v8::Context::Scope context_scope(context); 5653 v8::Context::Scope context_scope(context);
5639 isolate->stack_guard()->SetStackLimit(i::GetCurrentStackPosition() - 5654 isolate->stack_guard()->SetStackLimit(i::GetCurrentStackPosition() -
5640 128 * 1024); 5655 128 * 1024);
5641 5656
5642 static const char kSource[] = 5657 static const char kSource[] =
5643 "let x = 5;" 5658 "let x = 5;"
5644 "export { x as y };" 5659 "export { x as y };"
5645 "import { q as z } from 'm.js';" 5660 "import { q as z } from 'm.js';"
5646 "import n from 'n.js';" 5661 "import n from 'n.js';"
5647 "export { a as b } from 'm.js';" 5662 "export { a as b } from 'm.js';"
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
5759 RunParserSyncTest(context_data, statement_data, kError, NULL, 0, 5774 RunParserSyncTest(context_data, statement_data, kError, NULL, 0,
5760 always_flags, arraysize(always_flags)); 5775 always_flags, arraysize(always_flags));
5761 } 5776 }
5762 5777
5763 5778
5764 void TestLanguageMode(const char* source, 5779 void TestLanguageMode(const char* source,
5765 i::LanguageMode expected_language_mode) { 5780 i::LanguageMode expected_language_mode) {
5766 i::Isolate* isolate = CcTest::i_isolate(); 5781 i::Isolate* isolate = CcTest::i_isolate();
5767 i::Factory* factory = isolate->factory(); 5782 i::Factory* factory = isolate->factory();
5768 v8::HandleScope handles(CcTest::isolate()); 5783 v8::HandleScope handles(CcTest::isolate());
5769 v8::Handle<v8::Context> context = v8::Context::New(CcTest::isolate()); 5784 v8::Local<v8::Context> context = v8::Context::New(CcTest::isolate());
5770 v8::Context::Scope context_scope(context); 5785 v8::Context::Scope context_scope(context);
5771 isolate->stack_guard()->SetStackLimit(i::GetCurrentStackPosition() - 5786 isolate->stack_guard()->SetStackLimit(i::GetCurrentStackPosition() -
5772 128 * 1024); 5787 128 * 1024);
5773 5788
5774 i::Handle<i::Script> script = 5789 i::Handle<i::Script> script =
5775 factory->NewScript(factory->NewStringFromAsciiChecked(source)); 5790 factory->NewScript(factory->NewStringFromAsciiChecked(source));
5776 i::Zone zone; 5791 i::Zone zone;
5777 i::ParseInfo info(&zone, script); 5792 i::ParseInfo info(&zone, script);
5778 i::Parser parser(&info); 5793 i::Parser parser(&info);
5779 parser.set_allow_strong_mode(true); 5794 parser.set_allow_strong_mode(true);
(...skipping 667 matching lines...) Expand 10 before | Expand all | Expand 10 after
6447 CHECK(!try_catch.HasCaught()); 6462 CHECK(!try_catch.HasCaught());
6448 6463
6449 // But not in strong mode. 6464 // But not in strong mode.
6450 { 6465 {
6451 const char* script2 = 6466 const char* script2 =
6452 "\"use strong\"; \n" 6467 "\"use strong\"; \n"
6453 "if (false) { \n" 6468 "if (false) { \n"
6454 " not_there2; \n" 6469 " not_there2; \n"
6455 "} \n"; 6470 "} \n";
6456 v8::TryCatch try_catch2(CcTest::isolate()); 6471 v8::TryCatch try_catch2(CcTest::isolate());
6457 v8::Script::Compile(v8_str(script2)); 6472 v8_compile(v8_str(script2));
6458 CHECK(try_catch2.HasCaught()); 6473 CHECK(try_catch2.HasCaught());
6459 v8::String::Utf8Value exception(try_catch2.Exception()); 6474 v8::String::Utf8Value exception(try_catch2.Exception());
6460 CHECK_EQ(0, 6475 CHECK_EQ(0,
6461 strcmp( 6476 strcmp(
6462 "ReferenceError: In strong mode, using an undeclared global " 6477 "ReferenceError: In strong mode, using an undeclared global "
6463 "variable 'not_there2' is not allowed", 6478 "variable 'not_there2' is not allowed",
6464 *exception)); 6479 *exception));
6465 } 6480 }
6466 6481
6467 // Check that the variable reference is detected inside a strong function too, 6482 // Check that the variable reference is detected inside a strong function too,
6468 // even if the script scope is not strong. 6483 // even if the script scope is not strong.
6469 { 6484 {
6470 const char* script3 = 6485 const char* script3 =
6471 "(function not_lazy() { \n" 6486 "(function not_lazy() { \n"
6472 " \"use strong\"; \n" 6487 " \"use strong\"; \n"
6473 " if (false) { \n" 6488 " if (false) { \n"
6474 " not_there3; \n" 6489 " not_there3; \n"
6475 " } \n" 6490 " } \n"
6476 "})(); \n"; 6491 "})(); \n";
6477 v8::TryCatch try_catch2(CcTest::isolate()); 6492 v8::TryCatch try_catch2(CcTest::isolate());
6478 v8::Script::Compile(v8_str(script3)); 6493 v8_compile(v8_str(script3));
6479 CHECK(try_catch2.HasCaught()); 6494 CHECK(try_catch2.HasCaught());
6480 v8::String::Utf8Value exception(try_catch2.Exception()); 6495 v8::String::Utf8Value exception(try_catch2.Exception());
6481 CHECK_EQ(0, 6496 CHECK_EQ(0,
6482 strcmp( 6497 strcmp(
6483 "ReferenceError: In strong mode, using an undeclared global " 6498 "ReferenceError: In strong mode, using an undeclared global "
6484 "variable 'not_there3' is not allowed", 6499 "variable 'not_there3' is not allowed",
6485 *exception)); 6500 *exception));
6486 } 6501 }
6487 } 6502 }
6488 6503
(...skipping 732 matching lines...) Expand 10 before | Expand all | Expand 10 after
7221 NULL 7236 NULL
7222 }; 7237 };
7223 // clang-format on 7238 // clang-format on
7224 7239
7225 static const ParserFlag fail_flags[] = { 7240 static const ParserFlag fail_flags[] = {
7226 kAllowHarmonySloppy, kAllowHarmonySloppyLet, kNoLegacyConst, 7241 kAllowHarmonySloppy, kAllowHarmonySloppyLet, kNoLegacyConst,
7227 kAllowHarmonyDestructuring}; 7242 kAllowHarmonyDestructuring};
7228 RunParserSyncTest(context_data, fail_data, kError, NULL, 0, fail_flags, 7243 RunParserSyncTest(context_data, fail_data, kError, NULL, 0, fail_flags,
7229 arraysize(fail_flags)); 7244 arraysize(fail_flags));
7230 } 7245 }
OLDNEW
« no previous file with comments | « test/cctest/test-object-observe.cc ('k') | test/cctest/test-platform.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698