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 1667 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1678 } | 1678 } |
1679 | 1679 |
1680 | 1680 |
1681 TEST(StrictOctal) { | 1681 TEST(StrictOctal) { |
1682 // Test that syntax error caused by octal literal is reported correctly as | 1682 // Test that syntax error caused by octal literal is reported correctly as |
1683 // such (issue 2220). | 1683 // such (issue 2220). |
1684 v8::V8::Initialize(); | 1684 v8::V8::Initialize(); |
1685 v8::HandleScope scope(CcTest::isolate()); | 1685 v8::HandleScope scope(CcTest::isolate()); |
1686 v8::Context::Scope context_scope( | 1686 v8::Context::Scope context_scope( |
1687 v8::Context::New(CcTest::isolate())); | 1687 v8::Context::New(CcTest::isolate())); |
1688 v8::TryCatch try_catch; | 1688 v8::TryCatch try_catch(CcTest::isolate()); |
1689 const char* script = | 1689 const char* script = |
1690 "\"use strict\"; \n" | 1690 "\"use strict\"; \n" |
1691 "a = function() { \n" | 1691 "a = function() { \n" |
1692 " b = function() { \n" | 1692 " b = function() { \n" |
1693 " 01; \n" | 1693 " 01; \n" |
1694 " }; \n" | 1694 " }; \n" |
1695 "}; \n"; | 1695 "}; \n"; |
1696 v8::Script::Compile(v8::String::NewFromUtf8(CcTest::isolate(), script)); | 1696 v8::Script::Compile(v8::String::NewFromUtf8(CcTest::isolate(), script)); |
1697 CHECK(try_catch.HasCaught()); | 1697 CHECK(try_catch.HasCaught()); |
1698 v8::String::Utf8Value exception(try_catch.Exception()); | 1698 v8::String::Utf8Value exception(try_catch.Exception()); |
(...skipping 4518 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6217 RunParserSyncTest(context_data, data, kError, NULL, 0, always_flags, | 6217 RunParserSyncTest(context_data, data, kError, NULL, 0, always_flags, |
6218 arraysize(always_flags)); | 6218 arraysize(always_flags)); |
6219 } | 6219 } |
6220 | 6220 |
6221 | 6221 |
6222 TEST(StrongModeFreeVariablesDeclaredByPreviousScript) { | 6222 TEST(StrongModeFreeVariablesDeclaredByPreviousScript) { |
6223 i::FLAG_strong_mode = true; | 6223 i::FLAG_strong_mode = true; |
6224 v8::V8::Initialize(); | 6224 v8::V8::Initialize(); |
6225 v8::HandleScope scope(CcTest::isolate()); | 6225 v8::HandleScope scope(CcTest::isolate()); |
6226 v8::Context::Scope context_scope(v8::Context::New(CcTest::isolate())); | 6226 v8::Context::Scope context_scope(v8::Context::New(CcTest::isolate())); |
6227 v8::TryCatch try_catch; | 6227 v8::TryCatch try_catch(CcTest::isolate()); |
6228 | 6228 |
6229 // Introduce a bunch of variables, in all language modes. | 6229 // Introduce a bunch of variables, in all language modes. |
6230 const char* script1 = | 6230 const char* script1 = |
6231 "var my_var1 = 0; \n" | 6231 "var my_var1 = 0; \n" |
6232 "function my_func1() { } \n" | 6232 "function my_func1() { } \n" |
6233 "const my_const1 = 0; \n"; | 6233 "const my_const1 = 0; \n"; |
6234 CompileRun(v8_str(script1)); | 6234 CompileRun(v8_str(script1)); |
6235 CHECK(!try_catch.HasCaught()); | 6235 CHECK(!try_catch.HasCaught()); |
6236 | 6236 |
6237 const char* script2 = | 6237 const char* script2 = |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6276 CompileRun(v8_str(script5)); | 6276 CompileRun(v8_str(script5)); |
6277 CHECK(!try_catch.HasCaught()); | 6277 CHECK(!try_catch.HasCaught()); |
6278 } | 6278 } |
6279 | 6279 |
6280 | 6280 |
6281 TEST(StrongModeFreeVariablesDeclaredByLanguage) { | 6281 TEST(StrongModeFreeVariablesDeclaredByLanguage) { |
6282 i::FLAG_strong_mode = true; | 6282 i::FLAG_strong_mode = true; |
6283 v8::V8::Initialize(); | 6283 v8::V8::Initialize(); |
6284 v8::HandleScope scope(CcTest::isolate()); | 6284 v8::HandleScope scope(CcTest::isolate()); |
6285 v8::Context::Scope context_scope(v8::Context::New(CcTest::isolate())); | 6285 v8::Context::Scope context_scope(v8::Context::New(CcTest::isolate())); |
6286 v8::TryCatch try_catch; | 6286 v8::TryCatch try_catch(CcTest::isolate()); |
6287 | 6287 |
6288 const char* script1 = | 6288 const char* script1 = |
6289 "\"use strong\"; \n" | 6289 "\"use strong\"; \n" |
6290 "Math; \n" | 6290 "Math; \n" |
6291 "RegExp; \n"; | 6291 "RegExp; \n"; |
6292 CompileRun(v8_str(script1)); | 6292 CompileRun(v8_str(script1)); |
6293 CHECK(!try_catch.HasCaught()); | 6293 CHECK(!try_catch.HasCaught()); |
6294 } | 6294 } |
6295 | 6295 |
6296 | 6296 |
6297 TEST(StrongModeFreeVariablesDeclaredInGlobalPrototype) { | 6297 TEST(StrongModeFreeVariablesDeclaredInGlobalPrototype) { |
6298 i::FLAG_strong_mode = true; | 6298 i::FLAG_strong_mode = true; |
6299 v8::V8::Initialize(); | 6299 v8::V8::Initialize(); |
6300 v8::HandleScope scope(CcTest::isolate()); | 6300 v8::HandleScope scope(CcTest::isolate()); |
6301 v8::Context::Scope context_scope(v8::Context::New(CcTest::isolate())); | 6301 v8::Context::Scope context_scope(v8::Context::New(CcTest::isolate())); |
6302 v8::TryCatch try_catch; | 6302 v8::TryCatch try_catch(CcTest::isolate()); |
6303 | 6303 |
6304 const char* script1 = "this.__proto__.my_var = 0;\n"; | 6304 const char* script1 = "this.__proto__.my_var = 0;\n"; |
6305 CompileRun(v8_str(script1)); | 6305 CompileRun(v8_str(script1)); |
6306 CHECK(!try_catch.HasCaught()); | 6306 CHECK(!try_catch.HasCaught()); |
6307 | 6307 |
6308 const char* script2 = | 6308 const char* script2 = |
6309 "\"use strong\"; \n" | 6309 "\"use strong\"; \n" |
6310 "my_var; \n"; | 6310 "my_var; \n"; |
6311 CompileRun(v8_str(script2)); | 6311 CompileRun(v8_str(script2)); |
6312 CHECK(!try_catch.HasCaught()); | 6312 CHECK(!try_catch.HasCaught()); |
6313 } | 6313 } |
6314 | 6314 |
6315 | 6315 |
6316 TEST(StrongModeFreeVariablesNotDeclared) { | 6316 TEST(StrongModeFreeVariablesNotDeclared) { |
6317 i::FLAG_strong_mode = true; | 6317 i::FLAG_strong_mode = true; |
6318 v8::V8::Initialize(); | 6318 v8::V8::Initialize(); |
6319 v8::HandleScope scope(CcTest::isolate()); | 6319 v8::HandleScope scope(CcTest::isolate()); |
6320 v8::Context::Scope context_scope(v8::Context::New(CcTest::isolate())); | 6320 v8::Context::Scope context_scope(v8::Context::New(CcTest::isolate())); |
6321 v8::TryCatch try_catch; | 6321 v8::TryCatch try_catch(CcTest::isolate()); |
6322 | 6322 |
6323 // Test that referencing unintroduced variables in sloppy mode is ok. | 6323 // Test that referencing unintroduced variables in sloppy mode is ok. |
6324 const char* script1 = | 6324 const char* script1 = |
6325 "if (false) { \n" | 6325 "if (false) { \n" |
6326 " not_there1; \n" | 6326 " not_there1; \n" |
6327 "} \n"; | 6327 "} \n"; |
6328 CompileRun(v8_str(script1)); | 6328 CompileRun(v8_str(script1)); |
6329 CHECK(!try_catch.HasCaught()); | 6329 CHECK(!try_catch.HasCaught()); |
6330 | 6330 |
6331 // But not in strong mode. | 6331 // But not in strong mode. |
6332 { | 6332 { |
6333 const char* script2 = | 6333 const char* script2 = |
6334 "\"use strong\"; \n" | 6334 "\"use strong\"; \n" |
6335 "if (false) { \n" | 6335 "if (false) { \n" |
6336 " not_there2; \n" | 6336 " not_there2; \n" |
6337 "} \n"; | 6337 "} \n"; |
6338 v8::TryCatch try_catch2; | 6338 v8::TryCatch try_catch2(CcTest::isolate()); |
6339 v8::Script::Compile(v8_str(script2)); | 6339 v8::Script::Compile(v8_str(script2)); |
6340 CHECK(try_catch2.HasCaught()); | 6340 CHECK(try_catch2.HasCaught()); |
6341 v8::String::Utf8Value exception(try_catch2.Exception()); | 6341 v8::String::Utf8Value exception(try_catch2.Exception()); |
6342 CHECK_EQ(0, | 6342 CHECK_EQ(0, |
6343 strcmp( | 6343 strcmp( |
6344 "ReferenceError: In strong mode, using an undeclared global " | 6344 "ReferenceError: In strong mode, using an undeclared global " |
6345 "variable 'not_there2' is not allowed", | 6345 "variable 'not_there2' is not allowed", |
6346 *exception)); | 6346 *exception)); |
6347 } | 6347 } |
6348 | 6348 |
6349 // Check that the variable reference is detected inside a strong function too, | 6349 // Check that the variable reference is detected inside a strong function too, |
6350 // even if the script scope is not strong. | 6350 // even if the script scope is not strong. |
6351 { | 6351 { |
6352 const char* script3 = | 6352 const char* script3 = |
6353 "(function not_lazy() { \n" | 6353 "(function not_lazy() { \n" |
6354 " \"use strong\"; \n" | 6354 " \"use strong\"; \n" |
6355 " if (false) { \n" | 6355 " if (false) { \n" |
6356 " not_there3; \n" | 6356 " not_there3; \n" |
6357 " } \n" | 6357 " } \n" |
6358 "})(); \n"; | 6358 "})(); \n"; |
6359 v8::TryCatch try_catch2; | 6359 v8::TryCatch try_catch2(CcTest::isolate()); |
6360 v8::Script::Compile(v8_str(script3)); | 6360 v8::Script::Compile(v8_str(script3)); |
6361 CHECK(try_catch2.HasCaught()); | 6361 CHECK(try_catch2.HasCaught()); |
6362 v8::String::Utf8Value exception(try_catch2.Exception()); | 6362 v8::String::Utf8Value exception(try_catch2.Exception()); |
6363 CHECK_EQ(0, | 6363 CHECK_EQ(0, |
6364 strcmp( | 6364 strcmp( |
6365 "ReferenceError: In strong mode, using an undeclared global " | 6365 "ReferenceError: In strong mode, using an undeclared global " |
6366 "variable 'not_there3' is not allowed", | 6366 "variable 'not_there3' is not allowed", |
6367 *exception)); | 6367 *exception)); |
6368 } | 6368 } |
6369 } | 6369 } |
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6601 "[a, ...]", | 6601 "[a, ...]", |
6602 "[..., ]", | 6602 "[..., ]", |
6603 "[..., ...]", | 6603 "[..., ...]", |
6604 "[ (...a)]", | 6604 "[ (...a)]", |
6605 NULL}; | 6605 NULL}; |
6606 // clang-format on | 6606 // clang-format on |
6607 static const ParserFlag always_flags[] = {kAllowHarmonySpreadArrays}; | 6607 static const ParserFlag always_flags[] = {kAllowHarmonySpreadArrays}; |
6608 RunParserSyncTest(context_data, data, kError, NULL, 0, always_flags, | 6608 RunParserSyncTest(context_data, data, kError, NULL, 0, always_flags, |
6609 arraysize(always_flags)); | 6609 arraysize(always_flags)); |
6610 } | 6610 } |
OLD | NEW |