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 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
66 for (int i = 0; (key_token = keywords[i]).keyword != NULL; i++) { | 66 for (int i = 0; (key_token = keywords[i]).keyword != NULL; i++) { |
67 const i::byte* keyword = | 67 const i::byte* keyword = |
68 reinterpret_cast<const i::byte*>(key_token.keyword); | 68 reinterpret_cast<const i::byte*>(key_token.keyword); |
69 int length = i::StrLength(key_token.keyword); | 69 int length = i::StrLength(key_token.keyword); |
70 CHECK(static_cast<int>(sizeof(buffer)) >= length); | 70 CHECK(static_cast<int>(sizeof(buffer)) >= length); |
71 { | 71 { |
72 i::Utf8ToUtf16CharacterStream stream(keyword, length); | 72 i::Utf8ToUtf16CharacterStream stream(keyword, length); |
73 i::Scanner scanner(&unicode_cache); | 73 i::Scanner scanner(&unicode_cache); |
74 // The scanner should parse Harmony keywords for this test. | 74 // The scanner should parse Harmony keywords for this test. |
75 scanner.SetHarmonyModules(true); | 75 scanner.SetHarmonyModules(true); |
76 scanner.SetHarmonyClasses(true); | |
77 scanner.Initialize(&stream); | 76 scanner.Initialize(&stream); |
78 CHECK_EQ(key_token.token, scanner.Next()); | 77 CHECK_EQ(key_token.token, scanner.Next()); |
79 CHECK_EQ(i::Token::EOS, scanner.Next()); | 78 CHECK_EQ(i::Token::EOS, scanner.Next()); |
80 } | 79 } |
81 // Removing characters will make keyword matching fail. | 80 // Removing characters will make keyword matching fail. |
82 { | 81 { |
83 i::Utf8ToUtf16CharacterStream stream(keyword, length - 1); | 82 i::Utf8ToUtf16CharacterStream stream(keyword, length - 1); |
84 i::Scanner scanner(&unicode_cache); | 83 i::Scanner scanner(&unicode_cache); |
85 scanner.Initialize(&stream); | 84 scanner.Initialize(&stream); |
86 CHECK_EQ(i::Token::IDENTIFIER, scanner.Next()); | 85 CHECK_EQ(i::Token::IDENTIFIER, scanner.Next()); |
(...skipping 973 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1060 i::SNPrintF(program, "%s%s%s", surroundings[j].prefix, | 1059 i::SNPrintF(program, "%s%s%s", surroundings[j].prefix, |
1061 source_data[i].body, surroundings[j].suffix); | 1060 source_data[i].body, surroundings[j].suffix); |
1062 i::Handle<i::String> source = | 1061 i::Handle<i::String> source = |
1063 factory->NewStringFromUtf8(i::CStrVector(program.start())) | 1062 factory->NewStringFromUtf8(i::CStrVector(program.start())) |
1064 .ToHandleChecked(); | 1063 .ToHandleChecked(); |
1065 i::Handle<i::Script> script = factory->NewScript(source); | 1064 i::Handle<i::Script> script = factory->NewScript(source); |
1066 i::Zone zone; | 1065 i::Zone zone; |
1067 i::ParseInfo info(&zone, script); | 1066 i::ParseInfo info(&zone, script); |
1068 i::Parser parser(&info); | 1067 i::Parser parser(&info); |
1069 parser.set_allow_harmony_arrow_functions(true); | 1068 parser.set_allow_harmony_arrow_functions(true); |
1070 parser.set_allow_harmony_classes(true); | |
1071 parser.set_allow_harmony_sloppy(true); | 1069 parser.set_allow_harmony_sloppy(true); |
1072 info.set_global(); | 1070 info.set_global(); |
1073 CHECK(parser.Parse(&info)); | 1071 CHECK(parser.Parse(&info)); |
1074 CHECK(i::Rewriter::Rewrite(&info)); | 1072 CHECK(i::Rewriter::Rewrite(&info)); |
1075 CHECK(i::Scope::Analyze(&info)); | 1073 CHECK(i::Scope::Analyze(&info)); |
1076 CHECK(info.function() != NULL); | 1074 CHECK(info.function() != NULL); |
1077 | 1075 |
1078 i::Scope* script_scope = info.function()->scope(); | 1076 i::Scope* script_scope = info.function()->scope(); |
1079 CHECK(script_scope->is_script_scope()); | 1077 CHECK(script_scope->is_script_scope()); |
1080 CHECK_EQ(1, script_scope->inner_scopes()->length()); | 1078 CHECK_EQ(1, script_scope->inner_scopes()->length()); |
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1371 data.Dispose(); | 1369 data.Dispose(); |
1372 return i::MessageTemplate::FormatMessage(isolate, message, arg_object); | 1370 return i::MessageTemplate::FormatMessage(isolate, message, arg_object); |
1373 } | 1371 } |
1374 | 1372 |
1375 | 1373 |
1376 enum ParserFlag { | 1374 enum ParserFlag { |
1377 kAllowLazy, | 1375 kAllowLazy, |
1378 kAllowNatives, | 1376 kAllowNatives, |
1379 kAllowHarmonyModules, | 1377 kAllowHarmonyModules, |
1380 kAllowHarmonyArrowFunctions, | 1378 kAllowHarmonyArrowFunctions, |
1381 kAllowHarmonyClasses, | |
1382 kAllowHarmonyRestParameters, | 1379 kAllowHarmonyRestParameters, |
1383 kAllowHarmonySloppy, | 1380 kAllowHarmonySloppy, |
1384 kAllowHarmonyUnicode, | 1381 kAllowHarmonyUnicode, |
1385 kAllowHarmonyComputedPropertyNames, | 1382 kAllowHarmonyComputedPropertyNames, |
1386 kAllowHarmonySpreadCalls, | 1383 kAllowHarmonySpreadCalls, |
1387 kAllowHarmonyDestructuring, | 1384 kAllowHarmonyDestructuring, |
1388 kAllowHarmonySpreadArrays, | 1385 kAllowHarmonySpreadArrays, |
1389 kAllowHarmonyNewTarget, | 1386 kAllowHarmonyNewTarget, |
1390 kAllowStrongMode | 1387 kAllowStrongMode |
1391 }; | 1388 }; |
1392 | 1389 |
1393 | 1390 |
1394 enum ParserSyncTestResult { | 1391 enum ParserSyncTestResult { |
1395 kSuccessOrError, | 1392 kSuccessOrError, |
1396 kSuccess, | 1393 kSuccess, |
1397 kError | 1394 kError |
1398 }; | 1395 }; |
1399 | 1396 |
1400 template <typename Traits> | 1397 template <typename Traits> |
1401 void SetParserFlags(i::ParserBase<Traits>* parser, | 1398 void SetParserFlags(i::ParserBase<Traits>* parser, |
1402 i::EnumSet<ParserFlag> flags) { | 1399 i::EnumSet<ParserFlag> flags) { |
1403 parser->set_allow_lazy(flags.Contains(kAllowLazy)); | 1400 parser->set_allow_lazy(flags.Contains(kAllowLazy)); |
1404 parser->set_allow_natives(flags.Contains(kAllowNatives)); | 1401 parser->set_allow_natives(flags.Contains(kAllowNatives)); |
1405 parser->set_allow_harmony_modules(flags.Contains(kAllowHarmonyModules)); | 1402 parser->set_allow_harmony_modules(flags.Contains(kAllowHarmonyModules)); |
1406 parser->set_allow_harmony_arrow_functions( | 1403 parser->set_allow_harmony_arrow_functions( |
1407 flags.Contains(kAllowHarmonyArrowFunctions)); | 1404 flags.Contains(kAllowHarmonyArrowFunctions)); |
1408 parser->set_allow_harmony_classes(flags.Contains(kAllowHarmonyClasses)); | |
1409 parser->set_allow_harmony_rest_params( | 1405 parser->set_allow_harmony_rest_params( |
1410 flags.Contains(kAllowHarmonyRestParameters)); | 1406 flags.Contains(kAllowHarmonyRestParameters)); |
1411 parser->set_allow_harmony_spreadcalls( | 1407 parser->set_allow_harmony_spreadcalls( |
1412 flags.Contains(kAllowHarmonySpreadCalls)); | 1408 flags.Contains(kAllowHarmonySpreadCalls)); |
1413 parser->set_allow_harmony_sloppy(flags.Contains(kAllowHarmonySloppy)); | 1409 parser->set_allow_harmony_sloppy(flags.Contains(kAllowHarmonySloppy)); |
1414 parser->set_allow_harmony_unicode(flags.Contains(kAllowHarmonyUnicode)); | 1410 parser->set_allow_harmony_unicode(flags.Contains(kAllowHarmonyUnicode)); |
1415 parser->set_allow_harmony_computed_property_names( | 1411 parser->set_allow_harmony_computed_property_names( |
1416 flags.Contains(kAllowHarmonyComputedPropertyNames)); | 1412 flags.Contains(kAllowHarmonyComputedPropertyNames)); |
1417 parser->set_allow_harmony_destructuring( | 1413 parser->set_allow_harmony_destructuring( |
1418 flags.Contains(kAllowHarmonyDestructuring)); | 1414 flags.Contains(kAllowHarmonyDestructuring)); |
(...skipping 546 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1965 | 1961 |
1966 const char* statement_data[] = { | 1962 const char* statement_data[] = { |
1967 FUTURE_STRICT_RESERVED_WORDS(FUTURE_STRICT_RESERVED_STATEMENTS) | 1963 FUTURE_STRICT_RESERVED_WORDS(FUTURE_STRICT_RESERVED_STATEMENTS) |
1968 NULL | 1964 NULL |
1969 }; | 1965 }; |
1970 | 1966 |
1971 static const ParserFlag always_flags[] = {kAllowHarmonyArrowFunctions}; | 1967 static const ParserFlag always_flags[] = {kAllowHarmonyArrowFunctions}; |
1972 RunParserSyncTest(context_data, statement_data, kSuccess, NULL, 0, | 1968 RunParserSyncTest(context_data, statement_data, kSuccess, NULL, 0, |
1973 always_flags, arraysize(always_flags)); | 1969 always_flags, arraysize(always_flags)); |
1974 | 1970 |
1975 static const ParserFlag classes_flags[] = {kAllowHarmonyArrowFunctions, | 1971 static const ParserFlag classes_flags[] = {kAllowHarmonyArrowFunctions}; |
1976 kAllowHarmonyClasses}; | |
1977 RunParserSyncTest(context_data, statement_data, kSuccess, NULL, 0, | 1972 RunParserSyncTest(context_data, statement_data, kSuccess, NULL, 0, |
1978 classes_flags, arraysize(classes_flags)); | 1973 classes_flags, arraysize(classes_flags)); |
1979 } | 1974 } |
1980 | 1975 |
1981 | 1976 |
1982 TEST(ErrorsReservedWords) { | 1977 TEST(ErrorsReservedWords) { |
1983 // Tests that both preparsing and parsing produce the right kind of errors for | 1978 // Tests that both preparsing and parsing produce the right kind of errors for |
1984 // using future reserved words as identifiers. These tests don't depend on the | 1979 // using future reserved words as identifiers. These tests don't depend on the |
1985 // strict mode. | 1980 // strict mode. |
1986 const char* context_data[][2] = { | 1981 const char* context_data[][2] = { |
(...skipping 992 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2979 const char* statement_data[] = { | 2974 const char* statement_data[] = { |
2980 "function f() { }", | 2975 "function f() { }", |
2981 "class C { }", | 2976 "class C { }", |
2982 "class C extends Q {}", | 2977 "class C extends Q {}", |
2983 "function f() { } class C {}", | 2978 "function f() { } class C {}", |
2984 "function f() { }; class C {}", | 2979 "function f() { }; class C {}", |
2985 "class C {}; function f() {}", | 2980 "class C {}; function f() {}", |
2986 nullptr | 2981 nullptr |
2987 }; | 2982 }; |
2988 | 2983 |
2989 static const ParserFlag always_flags[] = {kAllowHarmonyClasses}; | 2984 RunParserSyncTest(context_data, statement_data, kSuccess); |
2990 | |
2991 RunParserSyncTest(context_data, statement_data, kSuccess, NULL, 0, | |
2992 always_flags, arraysize(always_flags)); | |
2993 } | 2985 } |
2994 | 2986 |
2995 | 2987 |
2996 TEST(InvalidLeftHandSide) { | 2988 TEST(InvalidLeftHandSide) { |
2997 const char* assignment_context_data[][2] = { | 2989 const char* assignment_context_data[][2] = { |
2998 {"", " = 1;"}, | 2990 {"", " = 1;"}, |
2999 {"\"use strict\"; ", " = 1;"}, | 2991 {"\"use strict\"; ", " = 1;"}, |
3000 { NULL, NULL } | 2992 { NULL, NULL } |
3001 }; | 2993 }; |
3002 | 2994 |
(...skipping 711 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3714 "new super.x", | 3706 "new super.x", |
3715 "new super.x()", | 3707 "new super.x()", |
3716 "new super[27]", | 3708 "new super[27]", |
3717 "new super[27]()", | 3709 "new super[27]()", |
3718 "z.super", // Ok, property lookup. | 3710 "z.super", // Ok, property lookup. |
3719 NULL | 3711 NULL |
3720 }; | 3712 }; |
3721 | 3713 |
3722 static const ParserFlag always_flags[] = { | 3714 static const ParserFlag always_flags[] = { |
3723 kAllowHarmonyArrowFunctions, | 3715 kAllowHarmonyArrowFunctions, |
3724 kAllowHarmonyClasses, | |
3725 kAllowHarmonySloppy | 3716 kAllowHarmonySloppy |
3726 }; | 3717 }; |
3727 RunParserSyncTest(context_data, statement_data, kSuccess, NULL, 0, | 3718 RunParserSyncTest(context_data, statement_data, kSuccess, NULL, 0, |
3728 always_flags, arraysize(always_flags)); | 3719 always_flags, arraysize(always_flags)); |
3729 } | 3720 } |
3730 | 3721 |
3731 | 3722 |
3732 TEST(SuperErrors) { | 3723 TEST(SuperErrors) { |
3733 const char* context_data[][2] = { | 3724 const char* context_data[][2] = { |
3734 {"class C { m() { ", "; } }"}, | 3725 {"class C { m() { ", "; } }"}, |
(...skipping 10 matching lines...) Expand all Loading... |
3745 "f(super)", | 3736 "f(super)", |
3746 "new super", | 3737 "new super", |
3747 "new super()", | 3738 "new super()", |
3748 "new super(12, 45)", | 3739 "new super(12, 45)", |
3749 "new new super", | 3740 "new new super", |
3750 "new new super()", | 3741 "new new super()", |
3751 "new new super()()", | 3742 "new new super()()", |
3752 NULL | 3743 NULL |
3753 }; | 3744 }; |
3754 | 3745 |
3755 static const ParserFlag always_flags[] = { | 3746 static const ParserFlag always_flags[] = {kAllowHarmonySloppy}; |
3756 kAllowHarmonyClasses, | |
3757 kAllowHarmonySloppy | |
3758 }; | |
3759 RunParserSyncTest(context_data, expression_data, kError, NULL, 0, | 3747 RunParserSyncTest(context_data, expression_data, kError, NULL, 0, |
3760 always_flags, arraysize(always_flags)); | 3748 always_flags, arraysize(always_flags)); |
3761 } | 3749 } |
3762 | 3750 |
3763 | 3751 |
3764 TEST(SuperCall) { | 3752 TEST(SuperCall) { |
3765 const char* context_data[][2] = {{"", ""}, | 3753 const char* context_data[][2] = {{"", ""}, |
3766 {NULL, NULL}}; | 3754 {NULL, NULL}}; |
3767 | 3755 |
3768 const char* success_data[] = { | 3756 const char* success_data[] = { |
3769 "class C extends B { constructor() { super(); } }", | 3757 "class C extends B { constructor() { super(); } }", |
3770 "class C extends B { constructor() { () => super(); } }", | 3758 "class C extends B { constructor() { () => super(); } }", |
3771 NULL | 3759 NULL |
3772 }; | 3760 }; |
3773 | 3761 |
3774 static const ParserFlag always_flags[] = { | 3762 static const ParserFlag always_flags[] = {kAllowHarmonyArrowFunctions, |
3775 kAllowHarmonyArrowFunctions, | 3763 kAllowHarmonySloppy}; |
3776 kAllowHarmonyClasses, | |
3777 kAllowHarmonySloppy | |
3778 }; | |
3779 RunParserSyncTest(context_data, success_data, kSuccess, NULL, 0, | 3764 RunParserSyncTest(context_data, success_data, kSuccess, NULL, 0, |
3780 always_flags, arraysize(always_flags)); | 3765 always_flags, arraysize(always_flags)); |
3781 | 3766 |
3782 const char* error_data[] = { | 3767 const char* error_data[] = { |
3783 "class C { constructor() { super(); } }", | 3768 "class C { constructor() { super(); } }", |
3784 "class C { method() { super(); } }", | 3769 "class C { method() { super(); } }", |
3785 "class C { method() { () => super(); } }", | 3770 "class C { method() { () => super(); } }", |
3786 "class C { *method() { super(); } }", | 3771 "class C { *method() { super(); } }", |
3787 "class C { get x() { super(); } }", | 3772 "class C { get x() { super(); } }", |
3788 "class C { set x(_) { super(); } }", | 3773 "class C { set x(_) { super(); } }", |
(...skipping 29 matching lines...) Expand all Loading... |
3818 }; | 3803 }; |
3819 | 3804 |
3820 const char* expression_data[] = { | 3805 const char* expression_data[] = { |
3821 "new super.x;", | 3806 "new super.x;", |
3822 "new super.x();", | 3807 "new super.x();", |
3823 "() => new super.x;", | 3808 "() => new super.x;", |
3824 "() => new super.x();", | 3809 "() => new super.x();", |
3825 NULL | 3810 NULL |
3826 }; | 3811 }; |
3827 | 3812 |
3828 static const ParserFlag always_flags[] = { | 3813 static const ParserFlag always_flags[] = {kAllowHarmonyArrowFunctions, |
3829 kAllowHarmonyArrowFunctions, | 3814 kAllowHarmonySloppy}; |
3830 kAllowHarmonyClasses, | |
3831 kAllowHarmonySloppy | |
3832 }; | |
3833 RunParserSyncTest(context_data, expression_data, kSuccess, NULL, 0, | 3815 RunParserSyncTest(context_data, expression_data, kSuccess, NULL, 0, |
3834 always_flags, arraysize(always_flags)); | 3816 always_flags, arraysize(always_flags)); |
3835 } | 3817 } |
3836 | 3818 |
3837 | 3819 |
3838 TEST(SuperNewErrors) { | 3820 TEST(SuperNewErrors) { |
3839 const char* context_data[][2] = { | 3821 const char* context_data[][2] = { |
3840 {"class C { method() { ", " } }"}, | 3822 {"class C { method() { ", " } }"}, |
3841 {"class C { *method() { ", " } }"}, | 3823 {"class C { *method() { ", " } }"}, |
3842 {"class C { get x() { ", " } }"}, | 3824 {"class C { get x() { ", " } }"}, |
(...skipping 12 matching lines...) Expand all Loading... |
3855 }; | 3837 }; |
3856 | 3838 |
3857 const char* statement_data[] = { | 3839 const char* statement_data[] = { |
3858 "new super;", | 3840 "new super;", |
3859 "new super();", | 3841 "new super();", |
3860 "() => new super;", | 3842 "() => new super;", |
3861 "() => new super();", | 3843 "() => new super();", |
3862 NULL | 3844 NULL |
3863 }; | 3845 }; |
3864 | 3846 |
3865 static const ParserFlag always_flags[] = { | 3847 static const ParserFlag always_flags[] = {kAllowHarmonyArrowFunctions, |
3866 kAllowHarmonyArrowFunctions, | 3848 kAllowHarmonySloppy}; |
3867 kAllowHarmonyClasses, | |
3868 kAllowHarmonySloppy | |
3869 }; | |
3870 RunParserSyncTest(context_data, statement_data, kError, NULL, 0, | 3849 RunParserSyncTest(context_data, statement_data, kError, NULL, 0, |
3871 always_flags, arraysize(always_flags)); | 3850 always_flags, arraysize(always_flags)); |
3872 } | 3851 } |
3873 | 3852 |
3874 | 3853 |
3875 TEST(SuperErrorsNonMethods) { | 3854 TEST(SuperErrorsNonMethods) { |
3876 // super is only allowed in methods, accessors and constructors. | 3855 // super is only allowed in methods, accessors and constructors. |
3877 const char* context_data[][2] = { | 3856 const char* context_data[][2] = { |
3878 {"", ";"}, | 3857 {"", ";"}, |
3879 {"k = ", ";"}, | 3858 {"k = ", ";"}, |
(...skipping 20 matching lines...) Expand all Loading... |
3900 "super[27]()", | 3879 "super[27]()", |
3901 "super()", | 3880 "super()", |
3902 "new super.x", | 3881 "new super.x", |
3903 "new super.x()", | 3882 "new super.x()", |
3904 "new super[27]", | 3883 "new super[27]", |
3905 "new super[27]()", | 3884 "new super[27]()", |
3906 NULL | 3885 NULL |
3907 }; | 3886 }; |
3908 | 3887 |
3909 static const ParserFlag always_flags[] = { | 3888 static const ParserFlag always_flags[] = { |
3910 kAllowHarmonyClasses, | |
3911 kAllowHarmonySloppy | 3889 kAllowHarmonySloppy |
3912 }; | 3890 }; |
3913 RunParserSyncTest(context_data, statement_data, kError, NULL, 0, | 3891 RunParserSyncTest(context_data, statement_data, kError, NULL, 0, |
3914 always_flags, arraysize(always_flags)); | 3892 always_flags, arraysize(always_flags)); |
3915 } | 3893 } |
3916 | 3894 |
3917 | 3895 |
3918 TEST(NoErrorsMethodDefinition) { | 3896 TEST(NoErrorsMethodDefinition) { |
3919 const char* context_data[][2] = {{"({", "});"}, | 3897 const char* context_data[][2] = {{"({", "});"}, |
3920 {"'use strict'; ({", "});"}, | 3898 {"'use strict'; ({", "});"}, |
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4117 "class extends F {}", | 4095 "class extends F {}", |
4118 "class name extends F {}", | 4096 "class name extends F {}", |
4119 "class extends (F, G) {}", | 4097 "class extends (F, G) {}", |
4120 "class name extends (F, G) {}", | 4098 "class name extends (F, G) {}", |
4121 "class extends class {} {}", | 4099 "class extends class {} {}", |
4122 "class name extends class {} {}", | 4100 "class name extends class {} {}", |
4123 "class extends class base {} {}", | 4101 "class extends class base {} {}", |
4124 "class name extends class base {} {}", | 4102 "class name extends class base {} {}", |
4125 NULL}; | 4103 NULL}; |
4126 | 4104 |
4127 static const ParserFlag always_flags[] = { | 4105 static const ParserFlag always_flags[] = {kAllowHarmonySloppy}; |
4128 kAllowHarmonyClasses, kAllowHarmonySloppy}; | |
4129 RunParserSyncTest(context_data, class_data, kSuccess, NULL, 0, | 4106 RunParserSyncTest(context_data, class_data, kSuccess, NULL, 0, |
4130 always_flags, arraysize(always_flags)); | 4107 always_flags, arraysize(always_flags)); |
4131 } | 4108 } |
4132 | 4109 |
4133 | 4110 |
4134 TEST(ClassDeclarationNoErrors) { | 4111 TEST(ClassDeclarationNoErrors) { |
4135 const char* context_data[][2] = {{"'use strict'; ", ""}, | 4112 const char* context_data[][2] = {{"'use strict'; ", ""}, |
4136 {"'use strict'; {", "}"}, | 4113 {"'use strict'; {", "}"}, |
4137 {"'use strict'; if (true) {", "}"}, | 4114 {"'use strict'; if (true) {", "}"}, |
4138 {NULL, NULL}}; | 4115 {NULL, NULL}}; |
4139 const char* statement_data[] = { | 4116 const char* statement_data[] = { |
4140 "class name {}", | 4117 "class name {}", |
4141 "class name extends F {}", | 4118 "class name extends F {}", |
4142 "class name extends (F, G) {}", | 4119 "class name extends (F, G) {}", |
4143 "class name extends class {} {}", | 4120 "class name extends class {} {}", |
4144 "class name extends class base {} {}", | 4121 "class name extends class base {} {}", |
4145 NULL}; | 4122 NULL}; |
4146 | 4123 |
4147 static const ParserFlag always_flags[] = {kAllowHarmonyClasses}; | 4124 RunParserSyncTest(context_data, statement_data, kSuccess); |
4148 RunParserSyncTest(context_data, statement_data, kSuccess, NULL, 0, | |
4149 always_flags, arraysize(always_flags)); | |
4150 } | 4125 } |
4151 | 4126 |
4152 | 4127 |
4153 TEST(ClassBodyNoErrors) { | 4128 TEST(ClassBodyNoErrors) { |
4154 // Tests that parser and preparser accept valid class syntax. | 4129 // Tests that parser and preparser accept valid class syntax. |
4155 const char* context_data[][2] = {{"(class {", "});"}, | 4130 const char* context_data[][2] = {{"(class {", "});"}, |
4156 {"(class extends Base {", "});"}, | 4131 {"(class extends Base {", "});"}, |
4157 {"class C {", "}"}, | 4132 {"class C {", "}"}, |
4158 {"class C extends Base {", "}"}, | 4133 {"class C extends Base {", "}"}, |
4159 {NULL, NULL}}; | 4134 {NULL, NULL}}; |
(...skipping 21 matching lines...) Expand all Loading... |
4181 "static static() {}", | 4156 "static static() {}", |
4182 "static get static() {}", | 4157 "static get static() {}", |
4183 "static set static(v) {}", | 4158 "static set static(v) {}", |
4184 "*static() {}", | 4159 "*static() {}", |
4185 "*get() {}", | 4160 "*get() {}", |
4186 "*set() {}", | 4161 "*set() {}", |
4187 "static *g() {}", | 4162 "static *g() {}", |
4188 NULL}; | 4163 NULL}; |
4189 | 4164 |
4190 static const ParserFlag always_flags[] = { | 4165 static const ParserFlag always_flags[] = { |
4191 kAllowHarmonyClasses, | |
4192 kAllowHarmonySloppy | 4166 kAllowHarmonySloppy |
4193 }; | 4167 }; |
4194 RunParserSyncTest(context_data, class_body_data, kSuccess, NULL, 0, | 4168 RunParserSyncTest(context_data, class_body_data, kSuccess, NULL, 0, |
4195 always_flags, arraysize(always_flags)); | 4169 always_flags, arraysize(always_flags)); |
4196 } | 4170 } |
4197 | 4171 |
4198 | 4172 |
4199 TEST(ClassPropertyNameNoErrors) { | 4173 TEST(ClassPropertyNameNoErrors) { |
4200 const char* context_data[][2] = {{"(class {", "() {}});"}, | 4174 const char* context_data[][2] = {{"(class {", "() {}});"}, |
4201 {"(class { get ", "() {}});"}, | 4175 {"(class { get ", "() {}});"}, |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4239 "else", | 4213 "else", |
4240 "for", | 4214 "for", |
4241 "while", | 4215 "while", |
4242 "do", | 4216 "do", |
4243 "try", | 4217 "try", |
4244 "catch", | 4218 "catch", |
4245 "finally", | 4219 "finally", |
4246 NULL}; | 4220 NULL}; |
4247 | 4221 |
4248 static const ParserFlag always_flags[] = { | 4222 static const ParserFlag always_flags[] = { |
4249 kAllowHarmonyClasses, | |
4250 kAllowHarmonySloppy | 4223 kAllowHarmonySloppy |
4251 }; | 4224 }; |
4252 RunParserSyncTest(context_data, name_data, kSuccess, NULL, 0, | 4225 RunParserSyncTest(context_data, name_data, kSuccess, NULL, 0, |
4253 always_flags, arraysize(always_flags)); | 4226 always_flags, arraysize(always_flags)); |
4254 } | 4227 } |
4255 | 4228 |
4256 | 4229 |
4257 TEST(ClassExpressionErrors) { | 4230 TEST(ClassExpressionErrors) { |
4258 const char* context_data[][2] = {{"(", ");"}, | 4231 const char* context_data[][2] = {{"(", ");"}, |
4259 {"var C = ", ";"}, | 4232 {"var C = ", ";"}, |
(...skipping 10 matching lines...) Expand all Loading... |
4270 "class { m: 1 }", | 4243 "class { m: 1 }", |
4271 "class { m(); n() }", | 4244 "class { m(); n() }", |
4272 "class { get m }", | 4245 "class { get m }", |
4273 "class { get m() }", | 4246 "class { get m() }", |
4274 "class { get m() { }", | 4247 "class { get m() { }", |
4275 "class { set m() {} }", // Missing required parameter. | 4248 "class { set m() {} }", // Missing required parameter. |
4276 "class { m() {}, n() {} }", // No commas allowed. | 4249 "class { m() {}, n() {} }", // No commas allowed. |
4277 NULL}; | 4250 NULL}; |
4278 | 4251 |
4279 static const ParserFlag always_flags[] = { | 4252 static const ParserFlag always_flags[] = { |
4280 kAllowHarmonyClasses, | |
4281 kAllowHarmonySloppy | 4253 kAllowHarmonySloppy |
4282 }; | 4254 }; |
4283 RunParserSyncTest(context_data, class_data, kError, NULL, 0, | 4255 RunParserSyncTest(context_data, class_data, kError, NULL, 0, |
4284 always_flags, arraysize(always_flags)); | 4256 always_flags, arraysize(always_flags)); |
4285 } | 4257 } |
4286 | 4258 |
4287 | 4259 |
4288 TEST(ClassDeclarationErrors) { | 4260 TEST(ClassDeclarationErrors) { |
4289 const char* context_data[][2] = {{"", ""}, | 4261 const char* context_data[][2] = {{"", ""}, |
4290 {"{", "}"}, | 4262 {"{", "}"}, |
(...skipping 16 matching lines...) Expand all Loading... |
4307 "class extends base {}", | 4279 "class extends base {}", |
4308 "class name { *", | 4280 "class name { *", |
4309 "class name { * }", | 4281 "class name { * }", |
4310 "class name { *; }", | 4282 "class name { *; }", |
4311 "class name { *get x() {} }", | 4283 "class name { *get x() {} }", |
4312 "class name { *set x(_) {} }", | 4284 "class name { *set x(_) {} }", |
4313 "class name { *static m() {} }", | 4285 "class name { *static m() {} }", |
4314 NULL}; | 4286 NULL}; |
4315 | 4287 |
4316 static const ParserFlag always_flags[] = { | 4288 static const ParserFlag always_flags[] = { |
4317 kAllowHarmonyClasses, | |
4318 kAllowHarmonySloppy | 4289 kAllowHarmonySloppy |
4319 }; | 4290 }; |
4320 RunParserSyncTest(context_data, class_data, kError, NULL, 0, | 4291 RunParserSyncTest(context_data, class_data, kError, NULL, 0, |
4321 always_flags, arraysize(always_flags)); | 4292 always_flags, arraysize(always_flags)); |
4322 } | 4293 } |
4323 | 4294 |
4324 | 4295 |
4325 TEST(ClassNameErrors) { | 4296 TEST(ClassNameErrors) { |
4326 const char* context_data[][2] = {{"class ", "{}"}, | 4297 const char* context_data[][2] = {{"class ", "{}"}, |
4327 {"(class ", "{});"}, | 4298 {"(class ", "{});"}, |
4328 {"'use strict'; class ", "{}"}, | 4299 {"'use strict'; class ", "{}"}, |
4329 {"'use strict'; (class ", "{});"}, | 4300 {"'use strict'; (class ", "{});"}, |
4330 {NULL, NULL}}; | 4301 {NULL, NULL}}; |
4331 const char* class_name[] = { | 4302 const char* class_name[] = { |
4332 "arguments", | 4303 "arguments", |
4333 "eval", | 4304 "eval", |
4334 "implements", | 4305 "implements", |
4335 "interface", | 4306 "interface", |
4336 "let", | 4307 "let", |
4337 "package", | 4308 "package", |
4338 "private", | 4309 "private", |
4339 "protected", | 4310 "protected", |
4340 "public", | 4311 "public", |
4341 "static", | 4312 "static", |
4342 "var", | 4313 "var", |
4343 "yield", | 4314 "yield", |
4344 NULL}; | 4315 NULL}; |
4345 | 4316 |
4346 static const ParserFlag always_flags[] = { | 4317 static const ParserFlag always_flags[] = { |
4347 kAllowHarmonyClasses, | |
4348 kAllowHarmonySloppy | 4318 kAllowHarmonySloppy |
4349 }; | 4319 }; |
4350 RunParserSyncTest(context_data, class_name, kError, NULL, 0, | 4320 RunParserSyncTest(context_data, class_name, kError, NULL, 0, |
4351 always_flags, arraysize(always_flags)); | 4321 always_flags, arraysize(always_flags)); |
4352 } | 4322 } |
4353 | 4323 |
4354 | 4324 |
4355 TEST(ClassGetterParamNameErrors) { | 4325 TEST(ClassGetterParamNameErrors) { |
4356 const char* context_data[][2] = { | 4326 const char* context_data[][2] = { |
4357 {"class C { get name(", ") {} }"}, | 4327 {"class C { get name(", ") {} }"}, |
(...skipping 12 matching lines...) Expand all Loading... |
4370 "package", | 4340 "package", |
4371 "private", | 4341 "private", |
4372 "protected", | 4342 "protected", |
4373 "public", | 4343 "public", |
4374 "static", | 4344 "static", |
4375 "var", | 4345 "var", |
4376 "yield", | 4346 "yield", |
4377 NULL}; | 4347 NULL}; |
4378 | 4348 |
4379 static const ParserFlag always_flags[] = { | 4349 static const ParserFlag always_flags[] = { |
4380 kAllowHarmonyClasses, | |
4381 kAllowHarmonySloppy | 4350 kAllowHarmonySloppy |
4382 }; | 4351 }; |
4383 RunParserSyncTest(context_data, class_name, kError, NULL, 0, | 4352 RunParserSyncTest(context_data, class_name, kError, NULL, 0, |
4384 always_flags, arraysize(always_flags)); | 4353 always_flags, arraysize(always_flags)); |
4385 } | 4354 } |
4386 | 4355 |
4387 | 4356 |
4388 TEST(ClassStaticPrototypeErrors) { | 4357 TEST(ClassStaticPrototypeErrors) { |
4389 const char* context_data[][2] = {{"class C {", "}"}, | 4358 const char* context_data[][2] = {{"class C {", "}"}, |
4390 {"(class {", "});"}, | 4359 {"(class {", "});"}, |
4391 {NULL, NULL}}; | 4360 {NULL, NULL}}; |
4392 | 4361 |
4393 const char* class_body_data[] = { | 4362 const char* class_body_data[] = { |
4394 "static prototype() {}", | 4363 "static prototype() {}", |
4395 "static get prototype() {}", | 4364 "static get prototype() {}", |
4396 "static set prototype(_) {}", | 4365 "static set prototype(_) {}", |
4397 "static *prototype() {}", | 4366 "static *prototype() {}", |
4398 "static 'prototype'() {}", | 4367 "static 'prototype'() {}", |
4399 "static *'prototype'() {}", | 4368 "static *'prototype'() {}", |
4400 "static prot\\u006ftype() {}", | 4369 "static prot\\u006ftype() {}", |
4401 "static 'prot\\u006ftype'() {}", | 4370 "static 'prot\\u006ftype'() {}", |
4402 "static get 'prot\\u006ftype'() {}", | 4371 "static get 'prot\\u006ftype'() {}", |
4403 "static set 'prot\\u006ftype'(_) {}", | 4372 "static set 'prot\\u006ftype'(_) {}", |
4404 "static *'prot\\u006ftype'() {}", | 4373 "static *'prot\\u006ftype'() {}", |
4405 NULL}; | 4374 NULL}; |
4406 | 4375 |
4407 static const ParserFlag always_flags[] = { | 4376 static const ParserFlag always_flags[] = { |
4408 kAllowHarmonyClasses, | |
4409 kAllowHarmonySloppy | 4377 kAllowHarmonySloppy |
4410 }; | 4378 }; |
4411 RunParserSyncTest(context_data, class_body_data, kError, NULL, 0, | 4379 RunParserSyncTest(context_data, class_body_data, kError, NULL, 0, |
4412 always_flags, arraysize(always_flags)); | 4380 always_flags, arraysize(always_flags)); |
4413 } | 4381 } |
4414 | 4382 |
4415 | 4383 |
4416 TEST(ClassSpecialConstructorErrors) { | 4384 TEST(ClassSpecialConstructorErrors) { |
4417 const char* context_data[][2] = {{"class C {", "}"}, | 4385 const char* context_data[][2] = {{"class C {", "}"}, |
4418 {"(class {", "});"}, | 4386 {"(class {", "});"}, |
4419 {NULL, NULL}}; | 4387 {NULL, NULL}}; |
4420 | 4388 |
4421 const char* class_body_data[] = { | 4389 const char* class_body_data[] = { |
4422 "get constructor() {}", | 4390 "get constructor() {}", |
4423 "get constructor(_) {}", | 4391 "get constructor(_) {}", |
4424 "*constructor() {}", | 4392 "*constructor() {}", |
4425 "get 'constructor'() {}", | 4393 "get 'constructor'() {}", |
4426 "*'constructor'() {}", | 4394 "*'constructor'() {}", |
4427 "get c\\u006fnstructor() {}", | 4395 "get c\\u006fnstructor() {}", |
4428 "*c\\u006fnstructor() {}", | 4396 "*c\\u006fnstructor() {}", |
4429 "get 'c\\u006fnstructor'() {}", | 4397 "get 'c\\u006fnstructor'() {}", |
4430 "get 'c\\u006fnstructor'(_) {}", | 4398 "get 'c\\u006fnstructor'(_) {}", |
4431 "*'c\\u006fnstructor'() {}", | 4399 "*'c\\u006fnstructor'() {}", |
4432 NULL}; | 4400 NULL}; |
4433 | 4401 |
4434 static const ParserFlag always_flags[] = { | 4402 static const ParserFlag always_flags[] = { |
4435 kAllowHarmonyClasses, | |
4436 kAllowHarmonySloppy | 4403 kAllowHarmonySloppy |
4437 }; | 4404 }; |
4438 RunParserSyncTest(context_data, class_body_data, kError, NULL, 0, | 4405 RunParserSyncTest(context_data, class_body_data, kError, NULL, 0, |
4439 always_flags, arraysize(always_flags)); | 4406 always_flags, arraysize(always_flags)); |
4440 } | 4407 } |
4441 | 4408 |
4442 | 4409 |
4443 TEST(ClassConstructorNoErrors) { | 4410 TEST(ClassConstructorNoErrors) { |
4444 const char* context_data[][2] = {{"class C {", "}"}, | 4411 const char* context_data[][2] = {{"class C {", "}"}, |
4445 {"(class {", "});"}, | 4412 {"(class {", "});"}, |
4446 {NULL, NULL}}; | 4413 {NULL, NULL}}; |
4447 | 4414 |
4448 const char* class_body_data[] = { | 4415 const char* class_body_data[] = { |
4449 "constructor() {}", | 4416 "constructor() {}", |
4450 "static constructor() {}", | 4417 "static constructor() {}", |
4451 "static get constructor() {}", | 4418 "static get constructor() {}", |
4452 "static set constructor(_) {}", | 4419 "static set constructor(_) {}", |
4453 "static *constructor() {}", | 4420 "static *constructor() {}", |
4454 NULL}; | 4421 NULL}; |
4455 | 4422 |
4456 static const ParserFlag always_flags[] = { | 4423 static const ParserFlag always_flags[] = { |
4457 kAllowHarmonyClasses, | |
4458 kAllowHarmonySloppy | 4424 kAllowHarmonySloppy |
4459 }; | 4425 }; |
4460 RunParserSyncTest(context_data, class_body_data, kSuccess, NULL, 0, | 4426 RunParserSyncTest(context_data, class_body_data, kSuccess, NULL, 0, |
4461 always_flags, arraysize(always_flags)); | 4427 always_flags, arraysize(always_flags)); |
4462 } | 4428 } |
4463 | 4429 |
4464 | 4430 |
4465 TEST(ClassMultipleConstructorErrors) { | 4431 TEST(ClassMultipleConstructorErrors) { |
4466 const char* context_data[][2] = {{"class C {", "}"}, | 4432 const char* context_data[][2] = {{"class C {", "}"}, |
4467 {"(class {", "});"}, | 4433 {"(class {", "});"}, |
4468 {NULL, NULL}}; | 4434 {NULL, NULL}}; |
4469 | 4435 |
4470 const char* class_body_data[] = { | 4436 const char* class_body_data[] = { |
4471 "constructor() {}; constructor() {}", | 4437 "constructor() {}; constructor() {}", |
4472 NULL}; | 4438 NULL}; |
4473 | 4439 |
4474 static const ParserFlag always_flags[] = { | 4440 static const ParserFlag always_flags[] = { |
4475 kAllowHarmonyClasses, | |
4476 kAllowHarmonySloppy | 4441 kAllowHarmonySloppy |
4477 }; | 4442 }; |
4478 RunParserSyncTest(context_data, class_body_data, kError, NULL, 0, | 4443 RunParserSyncTest(context_data, class_body_data, kError, NULL, 0, |
4479 always_flags, arraysize(always_flags)); | 4444 always_flags, arraysize(always_flags)); |
4480 } | 4445 } |
4481 | 4446 |
4482 | 4447 |
4483 TEST(ClassMultiplePropertyNamesNoErrors) { | 4448 TEST(ClassMultiplePropertyNamesNoErrors) { |
4484 const char* context_data[][2] = {{"class C {", "}"}, | 4449 const char* context_data[][2] = {{"class C {", "}"}, |
4485 {"(class {", "});"}, | 4450 {"(class {", "});"}, |
4486 {NULL, NULL}}; | 4451 {NULL, NULL}}; |
4487 | 4452 |
4488 const char* class_body_data[] = { | 4453 const char* class_body_data[] = { |
4489 "constructor() {}; static constructor() {}", | 4454 "constructor() {}; static constructor() {}", |
4490 "m() {}; static m() {}", | 4455 "m() {}; static m() {}", |
4491 "m() {}; m() {}", | 4456 "m() {}; m() {}", |
4492 "static m() {}; static m() {}", | 4457 "static m() {}; static m() {}", |
4493 "get m() {}; set m(_) {}; get m() {}; set m(_) {};", | 4458 "get m() {}; set m(_) {}; get m() {}; set m(_) {};", |
4494 NULL}; | 4459 NULL}; |
4495 | 4460 |
4496 static const ParserFlag always_flags[] = { | 4461 static const ParserFlag always_flags[] = { |
4497 kAllowHarmonyClasses, | |
4498 kAllowHarmonySloppy | 4462 kAllowHarmonySloppy |
4499 }; | 4463 }; |
4500 RunParserSyncTest(context_data, class_body_data, kSuccess, NULL, 0, | 4464 RunParserSyncTest(context_data, class_body_data, kSuccess, NULL, 0, |
4501 always_flags, arraysize(always_flags)); | 4465 always_flags, arraysize(always_flags)); |
4502 } | 4466 } |
4503 | 4467 |
4504 | 4468 |
4505 TEST(ClassesAreStrictErrors) { | 4469 TEST(ClassesAreStrictErrors) { |
4506 const char* context_data[][2] = {{"", ""}, | 4470 const char* context_data[][2] = {{"", ""}, |
4507 {"(", ");"}, | 4471 {"(", ");"}, |
4508 {NULL, NULL}}; | 4472 {NULL, NULL}}; |
4509 | 4473 |
4510 const char* class_body_data[] = { | 4474 const char* class_body_data[] = { |
4511 "class C { method() { with ({}) {} } }", | 4475 "class C { method() { with ({}) {} } }", |
4512 "class C extends function() { with ({}) {} } {}", | 4476 "class C extends function() { with ({}) {} } {}", |
4513 "class C { *method() { with ({}) {} } }", | 4477 "class C { *method() { with ({}) {} } }", |
4514 NULL}; | 4478 NULL}; |
4515 | 4479 |
4516 static const ParserFlag always_flags[] = { | 4480 static const ParserFlag always_flags[] = { |
4517 kAllowHarmonyClasses, | |
4518 kAllowHarmonySloppy | 4481 kAllowHarmonySloppy |
4519 }; | 4482 }; |
4520 RunParserSyncTest(context_data, class_body_data, kError, NULL, 0, | 4483 RunParserSyncTest(context_data, class_body_data, kError, NULL, 0, |
4521 always_flags, arraysize(always_flags)); | 4484 always_flags, arraysize(always_flags)); |
4522 } | 4485 } |
4523 | 4486 |
4524 | 4487 |
4525 TEST(ObjectLiteralPropertyShorthandKeywordsError) { | 4488 TEST(ObjectLiteralPropertyShorthandKeywordsError) { |
4526 const char* context_data[][2] = {{"({", "});"}, | 4489 const char* context_data[][2] = {{"({", "});"}, |
4527 {"'use strict'; ({", "});"}, | 4490 {"'use strict'; ({", "});"}, |
(...skipping 565 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5093 const char* context_data[][2] = { | 5056 const char* context_data[][2] = { |
5094 {"'use strict';({ set prop(", ") {} }).prop = 1;"}, | 5057 {"'use strict';({ set prop(", ") {} }).prop = 1;"}, |
5095 {"'use strict';(class { static set prop(", ") {} }).prop = 1;"}, | 5058 {"'use strict';(class { static set prop(", ") {} }).prop = 1;"}, |
5096 {"'use strict';(new (class { set prop(", ") {} })).prop = 1;"}, | 5059 {"'use strict';(new (class { set prop(", ") {} })).prop = 1;"}, |
5097 {"({ set prop(", ") {} }).prop = 1;"}, | 5060 {"({ set prop(", ") {} }).prop = 1;"}, |
5098 {"(class { static set prop(", ") {} }).prop = 1;"}, | 5061 {"(class { static set prop(", ") {} }).prop = 1;"}, |
5099 {"(new (class { set prop(", ") {} })).prop = 1;"}, | 5062 {"(new (class { set prop(", ") {} })).prop = 1;"}, |
5100 {nullptr, nullptr}}; | 5063 {nullptr, nullptr}}; |
5101 const char* data[] = {"...a", "...arguments", "...eval", nullptr}; | 5064 const char* data[] = {"...a", "...arguments", "...eval", nullptr}; |
5102 | 5065 |
5103 static const ParserFlag always_flags[] = { | 5066 static const ParserFlag always_flags[] = {kAllowHarmonyRestParameters, |
5104 kAllowHarmonyRestParameters, kAllowHarmonyClasses, kAllowHarmonySloppy}; | 5067 kAllowHarmonySloppy}; |
5105 RunParserSyncTest(context_data, data, kError, nullptr, 0, always_flags, | 5068 RunParserSyncTest(context_data, data, kError, nullptr, 0, always_flags, |
5106 arraysize(always_flags)); | 5069 arraysize(always_flags)); |
5107 } | 5070 } |
5108 | 5071 |
5109 | 5072 |
5110 TEST(RestParametersEvalArguments) { | 5073 TEST(RestParametersEvalArguments) { |
5111 const char* strict_context_data[][2] = | 5074 const char* strict_context_data[][2] = |
5112 {{"'use strict';(function(", | 5075 {{"'use strict';(function(", |
5113 "){ return;})(1, [], /regexp/, 'str',function(){});"}, | 5076 "){ return;})(1, [], /regexp/, 'str',function(){});"}, |
5114 {NULL, NULL}}; | 5077 {NULL, NULL}}; |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5217 "for(let x = 1;;){}", | 5180 "for(let x = 1;;){}", |
5218 "for(let x of []){}", | 5181 "for(let x of []){}", |
5219 "for(let x in []){}", | 5182 "for(let x in []){}", |
5220 "class C {}", | 5183 "class C {}", |
5221 "class C extends D {}", | 5184 "class C extends D {}", |
5222 "(class {})", | 5185 "(class {})", |
5223 "(class extends D {})", | 5186 "(class extends D {})", |
5224 "(class C {})", | 5187 "(class C {})", |
5225 "(class C extends D {})", | 5188 "(class C extends D {})", |
5226 NULL}; | 5189 NULL}; |
5227 static const ParserFlag always_true_flags[] = {kAllowHarmonyClasses}; | |
5228 static const ParserFlag always_false_flags[] = {kAllowHarmonySloppy}; | 5190 static const ParserFlag always_false_flags[] = {kAllowHarmonySloppy}; |
5229 RunParserSyncTest(context_data, bad_data, kError, NULL, 0, | 5191 RunParserSyncTest(context_data, bad_data, kError, NULL, 0, NULL, 0, |
5230 always_true_flags, arraysize(always_true_flags), | |
5231 always_false_flags, arraysize(always_false_flags)); | 5192 always_false_flags, arraysize(always_false_flags)); |
5232 | 5193 |
5233 const char* good_data[] = { | 5194 const char* good_data[] = { |
5234 "let = 1;", | 5195 "let = 1;", |
5235 "for(let = 1;;){}", | 5196 "for(let = 1;;){}", |
5236 NULL}; | 5197 NULL}; |
5237 RunParserSyncTest(context_data, good_data, kSuccess, NULL, 0, | 5198 RunParserSyncTest(context_data, good_data, kSuccess, NULL, 0, NULL, 0, |
5238 always_true_flags, arraysize(always_true_flags), | |
5239 always_false_flags, arraysize(always_false_flags)); | 5199 always_false_flags, arraysize(always_false_flags)); |
5240 } | 5200 } |
5241 | 5201 |
5242 | 5202 |
5243 TEST(ComputedPropertyName) { | 5203 TEST(ComputedPropertyName) { |
5244 const char* context_data[][2] = {{"({[", "]: 1});"}, | 5204 const char* context_data[][2] = {{"({[", "]: 1});"}, |
5245 {"({get [", "]() {}});"}, | 5205 {"({get [", "]() {}});"}, |
5246 {"({set [", "](_) {}});"}, | 5206 {"({set [", "](_) {}});"}, |
5247 {"({[", "]() {}});"}, | 5207 {"({[", "]() {}});"}, |
5248 {"({*[", "]() {}});"}, | 5208 {"({*[", "]() {}});"}, |
5249 {"(class {get [", "]() {}});"}, | 5209 {"(class {get [", "]() {}});"}, |
5250 {"(class {set [", "](_) {}});"}, | 5210 {"(class {set [", "](_) {}});"}, |
5251 {"(class {[", "]() {}});"}, | 5211 {"(class {[", "]() {}});"}, |
5252 {"(class {*[", "]() {}});"}, | 5212 {"(class {*[", "]() {}});"}, |
5253 {NULL, NULL}}; | 5213 {NULL, NULL}}; |
5254 const char* error_data[] = { | 5214 const char* error_data[] = { |
5255 "1, 2", | 5215 "1, 2", |
5256 "var name", | 5216 "var name", |
5257 NULL}; | 5217 NULL}; |
5258 | 5218 |
5259 static const ParserFlag always_flags[] = { | 5219 static const ParserFlag always_flags[] = { |
5260 kAllowHarmonyClasses, | |
5261 kAllowHarmonyComputedPropertyNames, | 5220 kAllowHarmonyComputedPropertyNames, |
5262 kAllowHarmonySloppy, | 5221 kAllowHarmonySloppy, |
5263 }; | 5222 }; |
5264 RunParserSyncTest(context_data, error_data, kError, NULL, 0, | 5223 RunParserSyncTest(context_data, error_data, kError, NULL, 0, |
5265 always_flags, arraysize(always_flags)); | 5224 always_flags, arraysize(always_flags)); |
5266 | 5225 |
5267 const char* name_data[] = { | 5226 const char* name_data[] = { |
5268 "1", | 5227 "1", |
5269 "1 + 2", | 5228 "1 + 2", |
5270 "'name'", | 5229 "'name'", |
5271 "\"name\"", | 5230 "\"name\"", |
5272 "[]", | 5231 "[]", |
5273 "{}", | 5232 "{}", |
5274 NULL}; | 5233 NULL}; |
5275 | 5234 |
5276 RunParserSyncTest(context_data, name_data, kSuccess, NULL, 0, | 5235 RunParserSyncTest(context_data, name_data, kSuccess, NULL, 0, |
5277 always_flags, arraysize(always_flags)); | 5236 always_flags, arraysize(always_flags)); |
5278 } | 5237 } |
5279 | 5238 |
5280 | 5239 |
5281 TEST(ComputedPropertyNameShorthandError) { | 5240 TEST(ComputedPropertyNameShorthandError) { |
5282 const char* context_data[][2] = {{"({", "});"}, | 5241 const char* context_data[][2] = {{"({", "});"}, |
5283 {NULL, NULL}}; | 5242 {NULL, NULL}}; |
5284 const char* error_data[] = { | 5243 const char* error_data[] = { |
5285 "a: 1, [2]", | 5244 "a: 1, [2]", |
5286 "[1], a: 1", | 5245 "[1], a: 1", |
5287 NULL}; | 5246 NULL}; |
5288 | 5247 |
5289 static const ParserFlag always_flags[] = { | 5248 static const ParserFlag always_flags[] = { |
5290 kAllowHarmonyClasses, | |
5291 kAllowHarmonyComputedPropertyNames, | 5249 kAllowHarmonyComputedPropertyNames, |
5292 kAllowHarmonySloppy, | 5250 kAllowHarmonySloppy, |
5293 }; | 5251 }; |
5294 RunParserSyncTest(context_data, error_data, kError, NULL, 0, | 5252 RunParserSyncTest(context_data, error_data, kError, NULL, 0, |
5295 always_flags, arraysize(always_flags)); | 5253 always_flags, arraysize(always_flags)); |
5296 } | 5254 } |
5297 | 5255 |
5298 | 5256 |
5299 TEST(BasicImportExportParsing) { | 5257 TEST(BasicImportExportParsing) { |
5300 const char* kSources[] = { | 5258 const char* kSources[] = { |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5349 for (unsigned i = 0; i < arraysize(kSources); ++i) { | 5307 for (unsigned i = 0; i < arraysize(kSources); ++i) { |
5350 i::Handle<i::String> source = | 5308 i::Handle<i::String> source = |
5351 factory->NewStringFromAsciiChecked(kSources[i]); | 5309 factory->NewStringFromAsciiChecked(kSources[i]); |
5352 | 5310 |
5353 // Show that parsing as a module works | 5311 // Show that parsing as a module works |
5354 { | 5312 { |
5355 i::Handle<i::Script> script = factory->NewScript(source); | 5313 i::Handle<i::Script> script = factory->NewScript(source); |
5356 i::Zone zone; | 5314 i::Zone zone; |
5357 i::ParseInfo info(&zone, script); | 5315 i::ParseInfo info(&zone, script); |
5358 i::Parser parser(&info); | 5316 i::Parser parser(&info); |
5359 parser.set_allow_harmony_classes(true); | |
5360 parser.set_allow_harmony_modules(true); | 5317 parser.set_allow_harmony_modules(true); |
5361 info.set_module(); | 5318 info.set_module(); |
5362 if (!parser.Parse(&info)) { | 5319 if (!parser.Parse(&info)) { |
5363 i::Handle<i::JSObject> exception_handle( | 5320 i::Handle<i::JSObject> exception_handle( |
5364 i::JSObject::cast(isolate->pending_exception())); | 5321 i::JSObject::cast(isolate->pending_exception())); |
5365 i::Handle<i::String> message_string = | 5322 i::Handle<i::String> message_string = |
5366 i::Handle<i::String>::cast(i::Object::GetProperty( | 5323 i::Handle<i::String>::cast(i::Object::GetProperty( |
5367 isolate, exception_handle, "message").ToHandleChecked()); | 5324 isolate, exception_handle, "message").ToHandleChecked()); |
5368 | 5325 |
5369 v8::base::OS::Print( | 5326 v8::base::OS::Print( |
5370 "Parser failed on:\n" | 5327 "Parser failed on:\n" |
5371 "\t%s\n" | 5328 "\t%s\n" |
5372 "with error:\n" | 5329 "with error:\n" |
5373 "\t%s\n" | 5330 "\t%s\n" |
5374 "However, we expected no error.", | 5331 "However, we expected no error.", |
5375 source->ToCString().get(), message_string->ToCString().get()); | 5332 source->ToCString().get(), message_string->ToCString().get()); |
5376 CHECK(false); | 5333 CHECK(false); |
5377 } | 5334 } |
5378 } | 5335 } |
5379 | 5336 |
5380 // And that parsing a script does not. | 5337 // And that parsing a script does not. |
5381 { | 5338 { |
5382 i::Handle<i::Script> script = factory->NewScript(source); | 5339 i::Handle<i::Script> script = factory->NewScript(source); |
5383 i::Zone zone; | 5340 i::Zone zone; |
5384 i::ParseInfo info(&zone, script); | 5341 i::ParseInfo info(&zone, script); |
5385 i::Parser parser(&info); | 5342 i::Parser parser(&info); |
5386 parser.set_allow_harmony_classes(true); | |
5387 parser.set_allow_harmony_modules(true); | 5343 parser.set_allow_harmony_modules(true); |
5388 info.set_global(); | 5344 info.set_global(); |
5389 CHECK(!parser.Parse(&info)); | 5345 CHECK(!parser.Parse(&info)); |
5390 } | 5346 } |
5391 } | 5347 } |
5392 } | 5348 } |
5393 | 5349 |
5394 | 5350 |
5395 TEST(ImportExportParsingErrors) { | 5351 TEST(ImportExportParsingErrors) { |
5396 const char* kErrorSources[] = { | 5352 const char* kErrorSources[] = { |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5466 128 * 1024); | 5422 128 * 1024); |
5467 | 5423 |
5468 for (unsigned i = 0; i < arraysize(kErrorSources); ++i) { | 5424 for (unsigned i = 0; i < arraysize(kErrorSources); ++i) { |
5469 i::Handle<i::String> source = | 5425 i::Handle<i::String> source = |
5470 factory->NewStringFromAsciiChecked(kErrorSources[i]); | 5426 factory->NewStringFromAsciiChecked(kErrorSources[i]); |
5471 | 5427 |
5472 i::Handle<i::Script> script = factory->NewScript(source); | 5428 i::Handle<i::Script> script = factory->NewScript(source); |
5473 i::Zone zone; | 5429 i::Zone zone; |
5474 i::ParseInfo info(&zone, script); | 5430 i::ParseInfo info(&zone, script); |
5475 i::Parser parser(&info); | 5431 i::Parser parser(&info); |
5476 parser.set_allow_harmony_classes(true); | |
5477 parser.set_allow_harmony_modules(true); | 5432 parser.set_allow_harmony_modules(true); |
5478 info.set_module(); | 5433 info.set_module(); |
5479 CHECK(!parser.Parse(&info)); | 5434 CHECK(!parser.Parse(&info)); |
5480 } | 5435 } |
5481 } | 5436 } |
5482 | 5437 |
5483 | 5438 |
5484 TEST(ModuleParsingInternals) { | 5439 TEST(ModuleParsingInternals) { |
5485 i::FLAG_harmony_modules = true; | 5440 i::FLAG_harmony_modules = true; |
5486 | 5441 |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5606 {"'use strong'; for (x in y)", ""}, | 5561 {"'use strong'; for (x in y)", ""}, |
5607 {"'use strong'; do ", " while (false)"}, | 5562 {"'use strong'; do ", " while (false)"}, |
5608 {NULL, NULL}}; | 5563 {NULL, NULL}}; |
5609 | 5564 |
5610 const char* statement_data[] = { | 5565 const char* statement_data[] = { |
5611 "let x = 1;", | 5566 "let x = 1;", |
5612 "const x = 1;", | 5567 "const x = 1;", |
5613 "class C {}", | 5568 "class C {}", |
5614 NULL}; | 5569 NULL}; |
5615 | 5570 |
5616 static const ParserFlag always_flags[] = {kAllowHarmonyClasses, | 5571 static const ParserFlag always_flags[] = {kAllowStrongMode}; |
5617 kAllowStrongMode}; | |
5618 RunParserSyncTest(context_data, statement_data, kError, NULL, 0, | 5572 RunParserSyncTest(context_data, statement_data, kError, NULL, 0, |
5619 always_flags, arraysize(always_flags)); | 5573 always_flags, arraysize(always_flags)); |
5620 } | 5574 } |
5621 | 5575 |
5622 | 5576 |
5623 void TestLanguageMode(const char* source, | 5577 void TestLanguageMode(const char* source, |
5624 i::LanguageMode expected_language_mode) { | 5578 i::LanguageMode expected_language_mode) { |
5625 i::Isolate* isolate = CcTest::i_isolate(); | 5579 i::Isolate* isolate = CcTest::i_isolate(); |
5626 i::Factory* factory = isolate->factory(); | 5580 i::Factory* factory = isolate->factory(); |
5627 v8::HandleScope handles(CcTest::isolate()); | 5581 v8::HandleScope handles(CcTest::isolate()); |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5691 "class C {static arguments() {}}", | 5645 "class C {static arguments() {}}", |
5692 "class C {static *eval() {}}", | 5646 "class C {static *eval() {}}", |
5693 "class C {static *arguments() {}}", | 5647 "class C {static *arguments() {}}", |
5694 "class C {static get eval() {}}", | 5648 "class C {static get eval() {}}", |
5695 "class C {static get arguments() {}}", | 5649 "class C {static get arguments() {}}", |
5696 "class C {static set eval(_) {}}", | 5650 "class C {static set eval(_) {}}", |
5697 "class C {static set arguments(_) {}}", | 5651 "class C {static set arguments(_) {}}", |
5698 | 5652 |
5699 NULL}; | 5653 NULL}; |
5700 | 5654 |
5701 static const ParserFlag always_flags[] = {kAllowHarmonyClasses, | 5655 static const ParserFlag always_flags[] = {kAllowStrongMode}; |
5702 kAllowStrongMode}; | |
5703 RunParserSyncTest(context_data, statement_data, kSuccess, NULL, 0, | 5656 RunParserSyncTest(context_data, statement_data, kSuccess, NULL, 0, |
5704 always_flags, arraysize(always_flags)); | 5657 always_flags, arraysize(always_flags)); |
5705 } | 5658 } |
5706 | 5659 |
5707 | 5660 |
5708 TEST(FunctionLiteralDuplicateParameters) { | 5661 TEST(FunctionLiteralDuplicateParameters) { |
5709 const char* strict_context_data[][2] = | 5662 const char* strict_context_data[][2] = |
5710 {{"'use strict';(function(", "){})();"}, | 5663 {{"'use strict';(function(", "){})();"}, |
5711 {"(function(", ") { 'use strict'; })();"}, | 5664 {"(function(", ") { 'use strict'; })();"}, |
5712 {"'use strict'; function fn(", ") {}; fn();"}, | 5665 {"'use strict'; function fn(", ") {}; fn();"}, |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5876 "class C { constructor() { this.a = {b: 1}; this.a.b } }", | 5829 "class C { constructor() { this.a = {b: 1}; this.a.b } }", |
5877 "class C { constructor() { this.a = {b: 1}; this.a.b = 0 } }", | 5830 "class C { constructor() { this.a = {b: 1}; this.a.b = 0 } }", |
5878 "class C { constructor() { this.a = function(){}; this.a() } }", | 5831 "class C { constructor() { this.a = function(){}; this.a() } }", |
5879 NULL}; | 5832 NULL}; |
5880 | 5833 |
5881 const char* success_data[] = { | 5834 const char* success_data[] = { |
5882 "class C { constructor() { this.a = 0; } }", | 5835 "class C { constructor() { this.a = 0; } }", |
5883 "class C { constructor() { label: 0; this.a = 0; this.b = 6; } }", | 5836 "class C { constructor() { label: 0; this.a = 0; this.b = 6; } }", |
5884 NULL}; | 5837 NULL}; |
5885 | 5838 |
5886 static const ParserFlag always_flags[] = { | 5839 static const ParserFlag always_flags[] = {kAllowStrongMode, |
5887 kAllowStrongMode, kAllowHarmonyClasses, kAllowHarmonyArrowFunctions}; | 5840 kAllowHarmonyArrowFunctions}; |
5888 RunParserSyncTest(sloppy_context_data, error_data, kError, NULL, 0, | 5841 RunParserSyncTest(sloppy_context_data, error_data, kError, NULL, 0, |
5889 always_flags, arraysize(always_flags)); | 5842 always_flags, arraysize(always_flags)); |
5890 RunParserSyncTest(strict_context_data, error_data, kSuccess, NULL, 0, | 5843 RunParserSyncTest(strict_context_data, error_data, kSuccess, NULL, 0, |
5891 always_flags, arraysize(always_flags)); | 5844 always_flags, arraysize(always_flags)); |
5892 RunParserSyncTest(strong_context_data, error_data, kError, NULL, 0, | 5845 RunParserSyncTest(strong_context_data, error_data, kError, NULL, 0, |
5893 always_flags, arraysize(always_flags)); | 5846 always_flags, arraysize(always_flags)); |
5894 | 5847 |
5895 RunParserSyncTest(sloppy_context_data, success_data, kError, NULL, 0, | 5848 RunParserSyncTest(sloppy_context_data, success_data, kError, NULL, 0, |
5896 always_flags, arraysize(always_flags)); | 5849 always_flags, arraysize(always_flags)); |
5897 RunParserSyncTest(strict_context_data, success_data, kSuccess, NULL, 0, | 5850 RunParserSyncTest(strict_context_data, success_data, kSuccess, NULL, 0, |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5930 "class C extends Object { constructor() { super().a; } }", | 5883 "class C extends Object { constructor() { super().a; } }", |
5931 NULL}; | 5884 NULL}; |
5932 | 5885 |
5933 const char* success_data[] = { | 5886 const char* success_data[] = { |
5934 "class C extends Object { constructor() { super(); } }", | 5887 "class C extends Object { constructor() { super(); } }", |
5935 "class C extends Object { constructor() { label: 66; super(); } }", | 5888 "class C extends Object { constructor() { label: 66; super(); } }", |
5936 "class C extends Object { constructor() { super(3); this.x = 0; } }", | 5889 "class C extends Object { constructor() { super(3); this.x = 0; } }", |
5937 "class C extends Object { constructor() { 3; super(3); this.x = 0; } }", | 5890 "class C extends Object { constructor() { 3; super(3); this.x = 0; } }", |
5938 NULL}; | 5891 NULL}; |
5939 | 5892 |
5940 static const ParserFlag always_flags[] = { | 5893 static const ParserFlag always_flags[] = {kAllowStrongMode, |
5941 kAllowStrongMode, kAllowHarmonyClasses, kAllowHarmonyArrowFunctions}; | 5894 kAllowHarmonyArrowFunctions}; |
5942 RunParserSyncTest(sloppy_context_data, error_data, kError, NULL, 0, | 5895 RunParserSyncTest(sloppy_context_data, error_data, kError, NULL, 0, |
5943 always_flags, arraysize(always_flags)); | 5896 always_flags, arraysize(always_flags)); |
5944 RunParserSyncTest(strict_context_data, error_data, kSuccess, NULL, 0, | 5897 RunParserSyncTest(strict_context_data, error_data, kSuccess, NULL, 0, |
5945 always_flags, arraysize(always_flags)); | 5898 always_flags, arraysize(always_flags)); |
5946 RunParserSyncTest(strong_context_data, error_data, kError, NULL, 0, | 5899 RunParserSyncTest(strong_context_data, error_data, kError, NULL, 0, |
5947 always_flags, arraysize(always_flags)); | 5900 always_flags, arraysize(always_flags)); |
5948 | 5901 |
5949 RunParserSyncTest(sloppy_context_data, success_data, kError, NULL, 0, | 5902 RunParserSyncTest(sloppy_context_data, success_data, kError, NULL, 0, |
5950 always_flags, arraysize(always_flags)); | 5903 always_flags, arraysize(always_flags)); |
5951 RunParserSyncTest(strict_context_data, success_data, kSuccess, NULL, 0, | 5904 RunParserSyncTest(strict_context_data, success_data, kSuccess, NULL, 0, |
(...skipping 24 matching lines...) Expand all Loading... |
5976 const char* success_data[] = { | 5929 const char* success_data[] = { |
5977 "class C extends Object { constructor() { super(); return; } }", | 5930 "class C extends Object { constructor() { super(); return; } }", |
5978 "class C extends Object { constructor() { super(); { return } } }", | 5931 "class C extends Object { constructor() { super(); { return } } }", |
5979 "class C extends Object { constructor() { super(); if (1) return; } }", | 5932 "class C extends Object { constructor() { super(); if (1) return; } }", |
5980 "class C { constructor() { this.a = 0; return; } }", | 5933 "class C { constructor() { this.a = 0; return; } }", |
5981 "class C { constructor() { this.a = 0; { return; } } }", | 5934 "class C { constructor() { this.a = 0; { return; } } }", |
5982 "class C { constructor() { this.a = 0; if (0) return; 65; } }", | 5935 "class C { constructor() { this.a = 0; if (0) return; 65; } }", |
5983 "class C extends Array { constructor() { super(); this.a = 9; return } }", | 5936 "class C extends Array { constructor() { super(); this.a = 9; return } }", |
5984 NULL}; | 5937 NULL}; |
5985 | 5938 |
5986 static const ParserFlag always_flags[] = {kAllowStrongMode, | 5939 static const ParserFlag always_flags[] = {kAllowStrongMode}; |
5987 kAllowHarmonyClasses}; | |
5988 RunParserSyncTest(sloppy_context_data, error_data, kError, NULL, 0, | 5940 RunParserSyncTest(sloppy_context_data, error_data, kError, NULL, 0, |
5989 always_flags, arraysize(always_flags)); | 5941 always_flags, arraysize(always_flags)); |
5990 RunParserSyncTest(strict_context_data, error_data, kSuccess, NULL, 0, | 5942 RunParserSyncTest(strict_context_data, error_data, kSuccess, NULL, 0, |
5991 always_flags, arraysize(always_flags)); | 5943 always_flags, arraysize(always_flags)); |
5992 RunParserSyncTest(strong_context_data, error_data, kError, NULL, 0, | 5944 RunParserSyncTest(strong_context_data, error_data, kError, NULL, 0, |
5993 always_flags, arraysize(always_flags)); | 5945 always_flags, arraysize(always_flags)); |
5994 | 5946 |
5995 RunParserSyncTest(sloppy_context_data, success_data, kError, NULL, 0, | 5947 RunParserSyncTest(sloppy_context_data, success_data, kError, NULL, 0, |
5996 always_flags, arraysize(always_flags)); | 5948 always_flags, arraysize(always_flags)); |
5997 RunParserSyncTest(strict_context_data, success_data, kSuccess, NULL, 0, | 5949 RunParserSyncTest(strict_context_data, success_data, kSuccess, NULL, 0, |
(...skipping 743 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6741 "() => new.target", | 6693 "() => new.target", |
6742 "if (1) { new.target }", | 6694 "if (1) { new.target }", |
6743 "if (1) {} else { new.target }", | 6695 "if (1) {} else { new.target }", |
6744 "while (0) { new.target }", | 6696 "while (0) { new.target }", |
6745 "do { new.target } while (0)", | 6697 "do { new.target } while (0)", |
6746 NULL | 6698 NULL |
6747 }; | 6699 }; |
6748 | 6700 |
6749 static const ParserFlag always_flags[] = { | 6701 static const ParserFlag always_flags[] = { |
6750 kAllowHarmonyArrowFunctions, | 6702 kAllowHarmonyArrowFunctions, |
6751 kAllowHarmonyClasses, | |
6752 kAllowHarmonyNewTarget, | 6703 kAllowHarmonyNewTarget, |
6753 kAllowHarmonySloppy, | 6704 kAllowHarmonySloppy, |
6754 }; | 6705 }; |
6755 // clang-format on | 6706 // clang-format on |
6756 | 6707 |
6757 RunParserSyncTest(good_context_data, data, kSuccess, NULL, 0, always_flags, | 6708 RunParserSyncTest(good_context_data, data, kSuccess, NULL, 0, always_flags, |
6758 arraysize(always_flags)); | 6709 arraysize(always_flags)); |
6759 RunParserSyncTest(bad_context_data, data, kError, NULL, 0, always_flags, | 6710 RunParserSyncTest(bad_context_data, data, kError, NULL, 0, always_flags, |
6760 arraysize(always_flags)); | 6711 arraysize(always_flags)); |
6761 } | 6712 } |
OLD | NEW |