Index: test/cctest/test-parsing.cc |
diff --git a/test/cctest/test-parsing.cc b/test/cctest/test-parsing.cc |
index 2f42eadc84fba4774f810db86765090a8e7351cb..d4f9230411c9d4d90e81790b6d4e0c42875015f7 100644 |
--- a/test/cctest/test-parsing.cc |
+++ b/test/cctest/test-parsing.cc |
@@ -319,8 +319,8 @@ TEST(StandAlonePreParser) { |
i::PreParser preparser(&scanner, &log, stack_limit); |
preparser.set_allow_lazy(true); |
- preparser.set_allow_natives_syntax(true); |
- preparser.set_allow_arrow_functions(true); |
+ preparser.set_allow_natives(true); |
+ preparser.set_allow_harmony_arrow_functions(true); |
i::PreParser::PreParseResult result = preparser.PreParseProgram(); |
CHECK_EQ(i::PreParser::kPreParseSuccess, result); |
CHECK(!log.HasError()); |
@@ -499,7 +499,7 @@ TEST(PreParseOverflow) { |
i::PreParser preparser(&scanner, &log, stack_limit); |
preparser.set_allow_lazy(true); |
- preparser.set_allow_arrow_functions(true); |
+ preparser.set_allow_harmony_arrow_functions(true); |
i::PreParser::PreParseResult result = preparser.PreParseProgram(); |
CHECK_EQ(i::PreParser::kPreParseStackOverflow, result); |
} |
@@ -1017,8 +1017,8 @@ TEST(ScopeUsesArgumentsSuperThis) { |
isolate->heap()->HashSeed(), |
isolate->unicode_cache()}; |
i::Parser parser(&info, &parse_info); |
- parser.set_allow_arrow_functions(true); |
- parser.set_allow_classes(true); |
+ parser.set_allow_harmony_arrow_functions(true); |
+ parser.set_allow_harmony_classes(true); |
parser.set_allow_harmony_scoping(true); |
info.MarkAsGlobal(); |
parser.Parse(); |
@@ -1265,7 +1265,7 @@ TEST(ScopePositions) { |
i::Parser parser(&info, &parse_info); |
parser.set_allow_lazy(true); |
parser.set_allow_harmony_scoping(true); |
- parser.set_allow_arrow_functions(true); |
+ parser.set_allow_harmony_arrow_functions(true); |
info.MarkAsGlobal(); |
info.SetStrictMode(source_data[i].strict_mode); |
parser.Parse(); |
@@ -1339,14 +1339,15 @@ i::Handle<i::String> FormatMessage(i::Vector<unsigned> data) { |
enum ParserFlag { |
kAllowLazy, |
- kAllowNativesSyntax, |
+ kAllowNatives, |
kAllowHarmonyScoping, |
- kAllowModules, |
+ kAllowHarmonyModules, |
kAllowHarmonyNumericLiterals, |
- kAllowArrowFunctions, |
- kAllowClasses, |
+ kAllowHarmonyArrowFunctions, |
+ kAllowHarmonyClasses, |
kAllowHarmonyObjectLiterals, |
- kAllowHarmonyTemplates |
+ kAllowHarmonyTemplates, |
+ kAllowHarmonySloppy |
}; |
@@ -1360,16 +1361,18 @@ template <typename Traits> |
void SetParserFlags(i::ParserBase<Traits>* parser, |
i::EnumSet<ParserFlag> flags) { |
parser->set_allow_lazy(flags.Contains(kAllowLazy)); |
- parser->set_allow_natives_syntax(flags.Contains(kAllowNativesSyntax)); |
+ parser->set_allow_natives(flags.Contains(kAllowNatives)); |
parser->set_allow_harmony_scoping(flags.Contains(kAllowHarmonyScoping)); |
- parser->set_allow_modules(flags.Contains(kAllowModules)); |
+ parser->set_allow_harmony_modules(flags.Contains(kAllowHarmonyModules)); |
parser->set_allow_harmony_numeric_literals( |
flags.Contains(kAllowHarmonyNumericLiterals)); |
parser->set_allow_harmony_object_literals( |
flags.Contains(kAllowHarmonyObjectLiterals)); |
- parser->set_allow_arrow_functions(flags.Contains(kAllowArrowFunctions)); |
- parser->set_allow_classes(flags.Contains(kAllowClasses)); |
+ parser->set_allow_harmony_arrow_functions( |
+ flags.Contains(kAllowHarmonyArrowFunctions)); |
+ parser->set_allow_harmony_classes(flags.Contains(kAllowHarmonyClasses)); |
parser->set_allow_harmony_templates(flags.Contains(kAllowHarmonyTemplates)); |
+ parser->set_allow_harmony_sloppy(flags.Contains(kAllowHarmonySloppy)); |
} |
@@ -1482,7 +1485,9 @@ void TestParserSync(const char* source, |
size_t varying_flags_length, |
ParserSyncTestResult result = kSuccessOrError, |
const ParserFlag* always_true_flags = NULL, |
- size_t always_true_flags_length = 0) { |
+ size_t always_true_flags_length = 0, |
+ const ParserFlag* always_false_flags = NULL, |
+ size_t always_false_flags_length = 0) { |
i::Handle<i::String> str = |
CcTest::i_isolate()->factory()->NewStringFromAsciiChecked(source); |
for (int bits = 0; bits < (1 << varying_flags_length); bits++) { |
@@ -1495,6 +1500,10 @@ void TestParserSync(const char* source, |
++flag_index) { |
flags.Add(always_true_flags[flag_index]); |
} |
+ for (size_t flag_index = 0; flag_index < always_false_flags_length; |
+ ++flag_index) { |
+ flags.Remove(always_false_flags[flag_index]); |
+ } |
TestParserSyncWithFlags(str, flags, result); |
} |
} |
@@ -1578,13 +1587,14 @@ TEST(ParserSync) { |
i::GetCurrentStackPosition() - 128 * 1024); |
static const ParserFlag flags1[] = { |
- kAllowArrowFunctions, |
- kAllowClasses, |
+ kAllowHarmonyArrowFunctions, |
+ kAllowHarmonyClasses, |
kAllowHarmonyNumericLiterals, |
kAllowHarmonyObjectLiterals, |
kAllowHarmonyScoping, |
+ kAllowHarmonyModules, |
+ kAllowHarmonySloppy, |
kAllowLazy, |
- kAllowModules, |
}; |
for (int i = 0; context_data[i][0] != NULL; ++i) { |
@@ -1618,7 +1628,7 @@ TEST(ParserSync) { |
TestParserSync("0o1234", flags2, arraysize(flags2)); |
TestParserSync("0b1011", flags2, arraysize(flags2)); |
- static const ParserFlag flags3[] = { kAllowNativesSyntax }; |
+ static const ParserFlag flags3[] = { kAllowNatives }; |
TestParserSync("%DebugPrint(123)", flags3, arraysize(flags3)); |
} |
@@ -1652,7 +1662,9 @@ void RunParserSyncTest(const char* context_data[][2], |
const ParserFlag* flags = NULL, |
int flags_len = 0, |
const ParserFlag* always_true_flags = NULL, |
- int always_true_flags_len = 0) { |
+ int always_true_len = 0, |
+ const ParserFlag* always_false_flags = NULL, |
+ int always_false_len = 0) { |
v8::HandleScope handles(CcTest::isolate()); |
v8::Handle<v8::Context> context = v8::Context::New(CcTest::isolate()); |
v8::Context::Scope context_scope(context); |
@@ -1661,36 +1673,41 @@ void RunParserSyncTest(const char* context_data[][2], |
i::GetCurrentStackPosition() - 128 * 1024); |
static const ParserFlag default_flags[] = { |
- kAllowArrowFunctions, |
- kAllowClasses, |
+ kAllowHarmonyArrowFunctions, |
+ kAllowHarmonyClasses, |
kAllowHarmonyNumericLiterals, |
kAllowHarmonyObjectLiterals, |
kAllowHarmonyScoping, |
+ kAllowHarmonyModules, |
+ kAllowHarmonyTemplates, |
+ kAllowHarmonySloppy, |
kAllowLazy, |
- kAllowModules, |
- kAllowNativesSyntax, |
- kAllowHarmonyTemplates |
+ kAllowNatives, |
}; |
ParserFlag* generated_flags = NULL; |
if (flags == NULL) { |
flags = default_flags; |
flags_len = arraysize(default_flags); |
- if (always_true_flags != NULL) { |
- // Remove always_true_flags from default_flags. |
- CHECK(always_true_flags_len < flags_len); |
- generated_flags = new ParserFlag[flags_len - always_true_flags_len]; |
+ if (always_true_flags != NULL || always_false_flags != NULL) { |
+ // Remove always_true/false_flags from default_flags. |
+ CHECK((always_true_flags != NULL) == (always_true_len > 0)); |
+ CHECK((always_false_flags != NULL) == (always_false_len > 0)); |
+ CHECK(always_true_flags == NULL || always_true_len < flags_len); |
+ CHECK(always_false_flags == NULL || always_false_len < flags_len); |
+ generated_flags = |
+ new ParserFlag[flags_len - always_true_len - always_false_len]; |
int flag_index = 0; |
for (int i = 0; i < flags_len; ++i) { |
bool use_flag = true; |
- for (int j = 0; j < always_true_flags_len; ++j) { |
- if (flags[i] == always_true_flags[j]) { |
- use_flag = false; |
- break; |
- } |
+ for (int j = 0; use_flag && j < always_true_len; ++j) { |
+ if (flags[i] == always_true_flags[j]) use_flag = false; |
+ } |
+ for (int j = 0; use_flag && j < always_false_len; ++j) { |
+ if (flags[i] == always_false_flags[j]) use_flag = false; |
} |
if (use_flag) generated_flags[flag_index++] = flags[i]; |
} |
- CHECK(flag_index == flags_len - always_true_flags_len); |
+ CHECK(flag_index == flags_len - always_true_len - always_false_len); |
flags_len = flag_index; |
flags = generated_flags; |
} |
@@ -1715,7 +1732,9 @@ void RunParserSyncTest(const char* context_data[][2], |
flags_len, |
result, |
always_true_flags, |
- always_true_flags_len); |
+ always_true_len, |
+ always_false_flags, |
+ always_false_len); |
} |
} |
delete[] generated_flags; |
@@ -1822,7 +1841,7 @@ TEST(NoErrorsEvalAndArgumentsStrict) { |
NULL |
}; |
- static const ParserFlag always_flags[] = {kAllowArrowFunctions}; |
+ static const ParserFlag always_flags[] = {kAllowHarmonyArrowFunctions}; |
RunParserSyncTest(context_data, statement_data, kSuccess, NULL, 0, |
always_flags, arraysize(always_flags)); |
} |
@@ -1872,12 +1891,12 @@ TEST(ErrorsFutureStrictReservedWords) { |
NULL |
}; |
- static const ParserFlag always_flags[] = {kAllowArrowFunctions}; |
+ static const ParserFlag always_flags[] = {kAllowHarmonyArrowFunctions}; |
RunParserSyncTest(context_data, statement_data, kError, NULL, 0, always_flags, |
arraysize(always_flags)); |
static const ParserFlag classes_flags[] = { |
- kAllowArrowFunctions, kAllowClasses, kAllowHarmonyScoping}; |
+ kAllowHarmonyArrowFunctions, kAllowHarmonyClasses, kAllowHarmonyScoping}; |
RunParserSyncTest(context_data, statement_data, kError, NULL, 0, |
classes_flags, arraysize(classes_flags)); |
} |
@@ -1896,12 +1915,12 @@ TEST(NoErrorsFutureStrictReservedWords) { |
NULL |
}; |
- static const ParserFlag always_flags[] = {kAllowArrowFunctions}; |
+ static const ParserFlag always_flags[] = {kAllowHarmonyArrowFunctions}; |
RunParserSyncTest(context_data, statement_data, kSuccess, NULL, 0, |
always_flags, arraysize(always_flags)); |
static const ParserFlag classes_flags[] = { |
- kAllowArrowFunctions, kAllowClasses, kAllowHarmonyScoping}; |
+ kAllowHarmonyArrowFunctions, kAllowHarmonyClasses, kAllowHarmonyScoping}; |
RunParserSyncTest(context_data, statement_data, kSuccess, NULL, 0, |
classes_flags, arraysize(classes_flags)); |
} |
@@ -2314,7 +2333,7 @@ TEST(NoErrorsIllegalWordsAsLabels) { |
NULL |
}; |
- static const ParserFlag always_flags[] = {kAllowArrowFunctions}; |
+ static const ParserFlag always_flags[] = {kAllowHarmonyArrowFunctions}; |
RunParserSyncTest(context_data, statement_data, kSuccess, NULL, 0, |
always_flags, arraysize(always_flags)); |
} |
@@ -2335,7 +2354,7 @@ TEST(NoErrorsFutureStrictReservedAsLabelsSloppy) { |
}; |
#undef LABELLED_WHILE |
- static const ParserFlag always_flags[] = {kAllowArrowFunctions}; |
+ static const ParserFlag always_flags[] = {kAllowHarmonyArrowFunctions}; |
RunParserSyncTest(context_data, statement_data, kSuccess, NULL, 0, |
always_flags, arraysize(always_flags)); |
} |
@@ -2587,9 +2606,9 @@ TEST(Intrinsics) { |
NULL |
}; |
- // This test requires kAllowNativesSyntax to succeed. |
+ // This test requires kAllowNatives to succeed. |
static const ParserFlag always_true_flags[] = { |
- kAllowNativesSyntax |
+ kAllowNatives |
}; |
RunParserSyncTest(context_data, statement_data, kSuccess, NULL, 0, |
@@ -3474,7 +3493,7 @@ TEST(ErrorsArrowFunctions) { |
// The test is quite slow, so run it with a reduced set of flags. |
static const ParserFlag flags[] = {kAllowLazy, kAllowHarmonyScoping}; |
- static const ParserFlag always_flags[] = { kAllowArrowFunctions }; |
+ static const ParserFlag always_flags[] = { kAllowHarmonyArrowFunctions }; |
RunParserSyncTest(context_data, statement_data, kError, flags, |
arraysize(flags), always_flags, arraysize(always_flags)); |
} |
@@ -3528,7 +3547,7 @@ TEST(NoErrorsArrowFunctions) { |
NULL |
}; |
- static const ParserFlag always_flags[] = {kAllowArrowFunctions}; |
+ static const ParserFlag always_flags[] = {kAllowHarmonyArrowFunctions}; |
RunParserSyncTest(context_data, statement_data, kSuccess, NULL, 0, |
always_flags, arraysize(always_flags)); |
} |
@@ -3553,7 +3572,7 @@ TEST(NoErrorsSuper) { |
"z.super", // Ok, property lookup. |
NULL}; |
- static const ParserFlag always_flags[] = {kAllowClasses}; |
+ static const ParserFlag always_flags[] = {kAllowHarmonyClasses}; |
RunParserSyncTest(context_data, statement_data, kSuccess, NULL, 0, |
always_flags, arraysize(always_flags)); |
} |
@@ -3572,7 +3591,7 @@ TEST(ErrorsSuper) { |
"f(super)", |
NULL}; |
- static const ParserFlag always_flags[] = {kAllowClasses}; |
+ static const ParserFlag always_flags[] = {kAllowHarmonyClasses}; |
RunParserSyncTest(context_data, statement_data, kError, NULL, 0, |
always_flags, arraysize(always_flags)); |
} |
@@ -3755,7 +3774,8 @@ TEST(ClassExpressionNoErrors) { |
"class name extends class base {} {}", |
NULL}; |
- static const ParserFlag always_flags[] = {kAllowClasses}; |
+ static const ParserFlag always_flags[] = { |
+ kAllowHarmonyClasses, kAllowHarmonySloppy}; |
RunParserSyncTest(context_data, class_data, kSuccess, NULL, 0, |
always_flags, arraysize(always_flags)); |
} |
@@ -3774,7 +3794,8 @@ TEST(ClassDeclarationNoErrors) { |
"class name extends class base {} {}", |
NULL}; |
- static const ParserFlag always_flags[] = {kAllowClasses}; |
+ static const ParserFlag always_flags[] = { |
+ kAllowHarmonyClasses, kAllowHarmonySloppy}; |
RunParserSyncTest(context_data, statement_data, kSuccess, NULL, 0, |
always_flags, arraysize(always_flags)); |
} |
@@ -3818,8 +3839,9 @@ TEST(ClassBodyNoErrors) { |
NULL}; |
static const ParserFlag always_flags[] = { |
- kAllowClasses, |
- kAllowHarmonyObjectLiterals |
+ kAllowHarmonyClasses, |
+ kAllowHarmonyObjectLiterals, |
+ kAllowHarmonySloppy |
}; |
RunParserSyncTest(context_data, class_body_data, kSuccess, NULL, 0, |
always_flags, arraysize(always_flags)); |
@@ -3876,8 +3898,9 @@ TEST(ClassPropertyNameNoErrors) { |
NULL}; |
static const ParserFlag always_flags[] = { |
- kAllowClasses, |
- kAllowHarmonyObjectLiterals |
+ kAllowHarmonyClasses, |
+ kAllowHarmonyObjectLiterals, |
+ kAllowHarmonySloppy |
}; |
RunParserSyncTest(context_data, name_data, kSuccess, NULL, 0, |
always_flags, arraysize(always_flags)); |
@@ -3907,8 +3930,9 @@ TEST(ClassExpressionErrors) { |
NULL}; |
static const ParserFlag always_flags[] = { |
- kAllowClasses, |
- kAllowHarmonyObjectLiterals |
+ kAllowHarmonyClasses, |
+ kAllowHarmonyObjectLiterals, |
+ kAllowHarmonySloppy |
}; |
RunParserSyncTest(context_data, class_data, kError, NULL, 0, |
always_flags, arraysize(always_flags)); |
@@ -3944,8 +3968,9 @@ TEST(ClassDeclarationErrors) { |
NULL}; |
static const ParserFlag always_flags[] = { |
- kAllowClasses, |
- kAllowHarmonyNumericLiterals |
+ kAllowHarmonyClasses, |
+ kAllowHarmonyNumericLiterals, |
+ kAllowHarmonySloppy |
}; |
RunParserSyncTest(context_data, class_data, kError, NULL, 0, |
always_flags, arraysize(always_flags)); |
@@ -3974,8 +3999,9 @@ TEST(ClassNameErrors) { |
NULL}; |
static const ParserFlag always_flags[] = { |
- kAllowClasses, |
- kAllowHarmonyObjectLiterals |
+ kAllowHarmonyClasses, |
+ kAllowHarmonyObjectLiterals, |
+ kAllowHarmonySloppy |
}; |
RunParserSyncTest(context_data, class_name, kError, NULL, 0, |
always_flags, arraysize(always_flags)); |
@@ -4007,8 +4033,9 @@ TEST(ClassGetterParamNameErrors) { |
NULL}; |
static const ParserFlag always_flags[] = { |
- kAllowClasses, |
- kAllowHarmonyObjectLiterals |
+ kAllowHarmonyClasses, |
+ kAllowHarmonyObjectLiterals, |
+ kAllowHarmonySloppy |
}; |
RunParserSyncTest(context_data, class_name, kError, NULL, 0, |
always_flags, arraysize(always_flags)); |
@@ -4035,8 +4062,9 @@ TEST(ClassStaticPrototypeErrors) { |
NULL}; |
static const ParserFlag always_flags[] = { |
- kAllowClasses, |
- kAllowHarmonyObjectLiterals |
+ kAllowHarmonyClasses, |
+ kAllowHarmonyObjectLiterals, |
+ kAllowHarmonySloppy |
}; |
RunParserSyncTest(context_data, class_body_data, kError, NULL, 0, |
always_flags, arraysize(always_flags)); |
@@ -4062,8 +4090,9 @@ TEST(ClassSpecialConstructorErrors) { |
NULL}; |
static const ParserFlag always_flags[] = { |
- kAllowClasses, |
- kAllowHarmonyObjectLiterals |
+ kAllowHarmonyClasses, |
+ kAllowHarmonyObjectLiterals, |
+ kAllowHarmonySloppy |
}; |
RunParserSyncTest(context_data, class_body_data, kError, NULL, 0, |
always_flags, arraysize(always_flags)); |
@@ -4084,8 +4113,9 @@ TEST(ClassConstructorNoErrors) { |
NULL}; |
static const ParserFlag always_flags[] = { |
- kAllowClasses, |
- kAllowHarmonyObjectLiterals |
+ kAllowHarmonyClasses, |
+ kAllowHarmonyObjectLiterals, |
+ kAllowHarmonySloppy |
}; |
RunParserSyncTest(context_data, class_body_data, kSuccess, NULL, 0, |
always_flags, arraysize(always_flags)); |
@@ -4102,8 +4132,9 @@ TEST(ClassMultipleConstructorErrors) { |
NULL}; |
static const ParserFlag always_flags[] = { |
- kAllowClasses, |
- kAllowHarmonyObjectLiterals |
+ kAllowHarmonyClasses, |
+ kAllowHarmonyObjectLiterals, |
+ kAllowHarmonySloppy |
}; |
RunParserSyncTest(context_data, class_body_data, kError, NULL, 0, |
always_flags, arraysize(always_flags)); |
@@ -4124,8 +4155,9 @@ TEST(ClassMultiplePropertyNamesNoErrors) { |
NULL}; |
static const ParserFlag always_flags[] = { |
- kAllowClasses, |
- kAllowHarmonyObjectLiterals |
+ kAllowHarmonyClasses, |
+ kAllowHarmonyObjectLiterals, |
+ kAllowHarmonySloppy |
}; |
RunParserSyncTest(context_data, class_body_data, kSuccess, NULL, 0, |
always_flags, arraysize(always_flags)); |
@@ -4144,8 +4176,9 @@ TEST(ClassesAreStrictErrors) { |
NULL}; |
static const ParserFlag always_flags[] = { |
- kAllowClasses, |
- kAllowHarmonyObjectLiterals |
+ kAllowHarmonyClasses, |
+ kAllowHarmonyObjectLiterals, |
+ kAllowHarmonySloppy |
}; |
RunParserSyncTest(context_data, class_body_data, kError, NULL, 0, |
always_flags, arraysize(always_flags)); |
@@ -4432,3 +4465,38 @@ TEST(ScanUnterminatedTemplateLiterals) { |
RunParserSyncTest(context_data, data, kError, NULL, 0, always_flags, |
arraysize(always_flags)); |
} |
+ |
+ |
+TEST(LexicalScopingNonStrictMode) { |
+ const char* context_data[][2] = { |
+ {"", ""}, |
+ {"function f() {", "}"}, |
+ {"{", "}"}, |
+ {NULL, NULL}}; |
+ const char* bad_data[] = { |
+ "let x = 1;", |
+ "for(let x = 1;;){}", |
+ "for(let x of []){}", |
+ "for(let x in []){}", |
+ "class C {}", |
+ "class C extends D {}", |
+ "(class {})", |
+ "(class extends D {})", |
+ "(class C {})", |
+ "(class C extends D {})", |
+ NULL}; |
+ static const ParserFlag always_true_flags[] = { |
+ kAllowHarmonyScoping, kAllowHarmonyClasses}; |
+ static const ParserFlag always_false_flags[] = {kAllowHarmonySloppy}; |
+ RunParserSyncTest(context_data, bad_data, kError, NULL, 0, |
+ always_true_flags, arraysize(always_true_flags), |
+ always_false_flags, arraysize(always_false_flags)); |
+ |
+ const char* good_data[] = { |
+ "let = 1;", |
+ "for(let = 1;;){}", |
+ NULL}; |
+ RunParserSyncTest(context_data, good_data, kSuccess, NULL, 0, |
+ always_true_flags, arraysize(always_true_flags), |
+ always_false_flags, arraysize(always_false_flags)); |
+} |