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 1487 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1498 arg_object = isolate->factory()->undefined_value(); | 1498 arg_object = isolate->factory()->undefined_value(); |
1499 } | 1499 } |
1500 | 1500 |
1501 data.Dispose(); | 1501 data.Dispose(); |
1502 return i::MessageTemplate::FormatMessage(isolate, message, arg_object); | 1502 return i::MessageTemplate::FormatMessage(isolate, message, arg_object); |
1503 } | 1503 } |
1504 | 1504 |
1505 enum ParserFlag { | 1505 enum ParserFlag { |
1506 kAllowLazy, | 1506 kAllowLazy, |
1507 kAllowNatives, | 1507 kAllowNatives, |
1508 kAllowHarmonyNewTarget, | |
1509 kAllowHarmonyFunctionSent, | 1508 kAllowHarmonyFunctionSent, |
1510 kAllowHarmonyRestrictiveDeclarations, | 1509 kAllowHarmonyRestrictiveDeclarations, |
1511 kAllowHarmonyExponentiationOperator, | 1510 kAllowHarmonyExponentiationOperator, |
1512 kAllowHarmonyForIn | 1511 kAllowHarmonyForIn |
1513 }; | 1512 }; |
1514 | 1513 |
1515 enum ParserSyncTestResult { | 1514 enum ParserSyncTestResult { |
1516 kSuccessOrError, | 1515 kSuccessOrError, |
1517 kSuccess, | 1516 kSuccess, |
1518 kError | 1517 kError |
(...skipping 3580 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5099 "`foo${a \n}`", | 5098 "`foo${a \n}`", |
5100 "`foo${a \r\n}`", | 5099 "`foo${a \r\n}`", |
5101 "`foo${a \r}`", | 5100 "`foo${a \r}`", |
5102 "`foo${/* comment */ a}`", | 5101 "`foo${/* comment */ a}`", |
5103 "`foo${// comment\na}`", | 5102 "`foo${// comment\na}`", |
5104 "`foo${\n a}`", | 5103 "`foo${\n a}`", |
5105 "`foo${\r\n a}`", | 5104 "`foo${\r\n a}`", |
5106 "`foo${\r a}`", | 5105 "`foo${\r a}`", |
5107 "`foo${'a' in a}`", | 5106 "`foo${'a' in a}`", |
5108 NULL}; | 5107 NULL}; |
5109 RunParserSyncTest(context_data, data, kSuccess, NULL, 0, NULL, 0); | 5108 RunParserSyncTest(context_data, data, kSuccess); |
5110 } | 5109 } |
5111 | 5110 |
5112 | 5111 |
5113 TEST(ScanTaggedTemplateLiterals) { | 5112 TEST(ScanTaggedTemplateLiterals) { |
5114 const char* context_data[][2] = {{"'use strict';", ""}, | 5113 const char* context_data[][2] = {{"'use strict';", ""}, |
5115 {"function foo(){ 'use strict';" | 5114 {"function foo(){ 'use strict';" |
5116 " function tag() {}" | 5115 " function tag() {}" |
5117 " var a, b, c; return ", "}"}, | 5116 " var a, b, c; return ", "}"}, |
5118 {NULL, NULL}}; | 5117 {NULL, NULL}}; |
5119 | 5118 |
(...skipping 14 matching lines...) Expand all Loading... |
5134 "tag`foo${a \n}`", | 5133 "tag`foo${a \n}`", |
5135 "tag`foo${a \r\n}`", | 5134 "tag`foo${a \r\n}`", |
5136 "tag`foo${a \r}`", | 5135 "tag`foo${a \r}`", |
5137 "tag`foo${/* comment */ a}`", | 5136 "tag`foo${/* comment */ a}`", |
5138 "tag`foo${// comment\na}`", | 5137 "tag`foo${// comment\na}`", |
5139 "tag`foo${\n a}`", | 5138 "tag`foo${\n a}`", |
5140 "tag`foo${\r\n a}`", | 5139 "tag`foo${\r\n a}`", |
5141 "tag`foo${\r a}`", | 5140 "tag`foo${\r a}`", |
5142 "tag`foo${'a' in a}`", | 5141 "tag`foo${'a' in a}`", |
5143 NULL}; | 5142 NULL}; |
5144 RunParserSyncTest(context_data, data, kSuccess, NULL, 0, NULL, 0); | 5143 RunParserSyncTest(context_data, data, kSuccess); |
5145 } | 5144 } |
5146 | 5145 |
5147 | 5146 |
5148 TEST(TemplateMaterializedLiterals) { | 5147 TEST(TemplateMaterializedLiterals) { |
5149 const char* context_data[][2] = { | 5148 const char* context_data[][2] = { |
5150 { | 5149 { |
5151 "'use strict';\n" | 5150 "'use strict';\n" |
5152 "function tag() {}\n" | 5151 "function tag() {}\n" |
5153 "var a, b, c;\n" | 5152 "var a, b, c;\n" |
5154 "(", ")" | 5153 "(", ")" |
5155 }, | 5154 }, |
5156 {NULL, NULL} | 5155 {NULL, NULL} |
5157 }; | 5156 }; |
5158 | 5157 |
5159 const char* data[] = { | 5158 const char* data[] = { |
5160 "tag``", | 5159 "tag``", |
5161 "tag`a`", | 5160 "tag`a`", |
5162 "tag`a${1}b`", | 5161 "tag`a${1}b`", |
5163 "tag`a${1}b${2}c`", | 5162 "tag`a${1}b${2}c`", |
5164 "``", | 5163 "``", |
5165 "`a`", | 5164 "`a`", |
5166 "`a${1}b`", | 5165 "`a${1}b`", |
5167 "`a${1}b${2}c`", | 5166 "`a${1}b${2}c`", |
5168 NULL | 5167 NULL |
5169 }; | 5168 }; |
5170 | 5169 |
5171 RunParserSyncTest(context_data, data, kSuccess, NULL, 0, NULL, 0); | 5170 RunParserSyncTest(context_data, data, kSuccess); |
5172 } | 5171 } |
5173 | 5172 |
5174 | 5173 |
5175 TEST(ScanUnterminatedTemplateLiterals) { | 5174 TEST(ScanUnterminatedTemplateLiterals) { |
5176 const char* context_data[][2] = {{"'use strict';", ""}, | 5175 const char* context_data[][2] = {{"'use strict';", ""}, |
5177 {"function foo(){ 'use strict';" | 5176 {"function foo(){ 'use strict';" |
5178 " var a, b, c; return ", "}"}, | 5177 " var a, b, c; return ", "}"}, |
5179 {NULL, NULL}}; | 5178 {NULL, NULL}}; |
5180 | 5179 |
5181 const char* data[] = { | 5180 const char* data[] = { |
(...skipping 13 matching lines...) Expand all Loading... |
5195 "`foo${a \r\n`", | 5194 "`foo${a \r\n`", |
5196 "`foo${a \r`", | 5195 "`foo${a \r`", |
5197 "`foo${/* comment */ a`", | 5196 "`foo${/* comment */ a`", |
5198 "`foo${// commenta}`", | 5197 "`foo${// commenta}`", |
5199 "`foo${\n a`", | 5198 "`foo${\n a`", |
5200 "`foo${\r\n a`", | 5199 "`foo${\r\n a`", |
5201 "`foo${\r a`", | 5200 "`foo${\r a`", |
5202 "`foo${fn(}`", | 5201 "`foo${fn(}`", |
5203 "`foo${1 if}`", | 5202 "`foo${1 if}`", |
5204 NULL}; | 5203 NULL}; |
5205 RunParserSyncTest(context_data, data, kError, NULL, 0, NULL, 0); | 5204 RunParserSyncTest(context_data, data, kError); |
5206 } | 5205 } |
5207 | 5206 |
5208 | 5207 |
5209 TEST(TemplateLiteralsIllegalTokens) { | 5208 TEST(TemplateLiteralsIllegalTokens) { |
5210 const char* context_data[][2] = {{"'use strict';", ""}, | 5209 const char* context_data[][2] = {{"'use strict';", ""}, |
5211 {"function foo(){ 'use strict';" | 5210 {"function foo(){ 'use strict';" |
5212 " var a, b, c; return ", "}"}, | 5211 " var a, b, c; return ", "}"}, |
5213 {NULL, NULL}}; | 5212 {NULL, NULL}}; |
5214 const char* data[] = { | 5213 const char* data[] = { |
5215 "`hello\\x`", | 5214 "`hello\\x`", |
5216 "`hello\\x${1}`", | 5215 "`hello\\x${1}`", |
5217 "`hello${1}\\x`", | 5216 "`hello${1}\\x`", |
5218 "`hello${1}\\x${2}`", | 5217 "`hello${1}\\x${2}`", |
5219 "`hello\\x\n`", | 5218 "`hello\\x\n`", |
5220 "`hello\\x\n${1}`", | 5219 "`hello\\x\n${1}`", |
5221 "`hello${1}\\x\n`", | 5220 "`hello${1}\\x\n`", |
5222 "`hello${1}\\x\n${2}`", | 5221 "`hello${1}\\x\n${2}`", |
5223 NULL}; | 5222 NULL}; |
5224 | 5223 |
5225 RunParserSyncTest(context_data, data, kError, NULL, 0, NULL, 0); | 5224 RunParserSyncTest(context_data, data, kError); |
5226 } | 5225 } |
5227 | 5226 |
5228 | 5227 |
5229 TEST(ParseRestParameters) { | 5228 TEST(ParseRestParameters) { |
5230 const char* context_data[][2] = {{"'use strict';(function(", | 5229 const char* context_data[][2] = {{"'use strict';(function(", |
5231 "){ return args;})(1, [], /regexp/, 'str'," | 5230 "){ return args;})(1, [], /regexp/, 'str'," |
5232 "function(){});"}, | 5231 "function(){});"}, |
5233 {"(function(", "){ return args;})(1, []," | 5232 {"(function(", "){ return args;})(1, []," |
5234 "/regexp/, 'str', function(){});"}, | 5233 "/regexp/, 'str', function(){});"}, |
5235 {NULL, NULL}}; | 5234 {NULL, NULL}}; |
(...skipping 1785 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7021 }; | 7020 }; |
7022 const char* error_data[] = { | 7021 const char* error_data[] = { |
7023 "for (();;) {}", | 7022 "for (();;) {}", |
7024 | 7023 |
7025 // crbug.com/582626 | 7024 // crbug.com/582626 |
7026 "{ NaN ,chA((evarA=new t ( l = !.0[((... co -a0([1]))=> greturnkf", | 7025 "{ NaN ,chA((evarA=new t ( l = !.0[((... co -a0([1]))=> greturnkf", |
7027 NULL | 7026 NULL |
7028 }; | 7027 }; |
7029 // clang-format on | 7028 // clang-format on |
7030 | 7029 |
7031 RunParserSyncTest(context_data, error_data, kError, NULL, 0, NULL, 0); | 7030 RunParserSyncTest(context_data, error_data, kError); |
7032 } | 7031 } |
7033 | 7032 |
7034 | 7033 |
7035 TEST(EscapeSequenceErrors) { | 7034 TEST(EscapeSequenceErrors) { |
7036 // clang-format off | 7035 // clang-format off |
7037 const char* context_data[][2] = { | 7036 const char* context_data[][2] = { |
7038 { "'", "'" }, | 7037 { "'", "'" }, |
7039 { "\"", "\"" }, | 7038 { "\"", "\"" }, |
7040 { "`", "`" }, | 7039 { "`", "`" }, |
7041 { "`${'", "'}`" }, | 7040 { "`${'", "'}`" }, |
7042 { "`${\"", "\"}`" }, | 7041 { "`${\"", "\"}`" }, |
7043 { "`${`", "`}`" }, | 7042 { "`${`", "`}`" }, |
7044 { "f(tag`", "`);" }, | 7043 { "f(tag`", "`);" }, |
7045 { NULL, NULL } | 7044 { NULL, NULL } |
7046 }; | 7045 }; |
7047 const char* error_data[] = { | 7046 const char* error_data[] = { |
7048 "\\uABCG", | 7047 "\\uABCG", |
7049 "\\u{ZZ}", | 7048 "\\u{ZZ}", |
7050 "\\u{FFZ}", | 7049 "\\u{FFZ}", |
7051 "\\u{FFFFFFFFFF }", | 7050 "\\u{FFFFFFFFFF }", |
7052 "\\u{110000}", | 7051 "\\u{110000}", |
7053 "\\u{110000", | 7052 "\\u{110000", |
7054 "\\u{FFFD }", | 7053 "\\u{FFFD }", |
7055 "\\xZF", | 7054 "\\xZF", |
7056 NULL | 7055 NULL |
7057 }; | 7056 }; |
7058 // clang-format on | 7057 // clang-format on |
7059 | 7058 |
7060 RunParserSyncTest(context_data, error_data, kError, NULL, 0, NULL, 0); | 7059 RunParserSyncTest(context_data, error_data, kError); |
7061 } | 7060 } |
7062 | 7061 |
7063 | 7062 |
7064 TEST(FunctionSentErrors) { | 7063 TEST(FunctionSentErrors) { |
7065 // clang-format off | 7064 // clang-format off |
7066 const char* context_data[][2] = { | 7065 const char* context_data[][2] = { |
7067 { "'use strict'", "" }, | 7066 { "'use strict'", "" }, |
7068 { "", "" }, | 7067 { "", "" }, |
7069 { NULL, NULL } | 7068 { NULL, NULL } |
7070 }; | 7069 }; |
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7293 "for (const x = 0 in {});", | 7292 "for (const x = 0 in {});", |
7294 "for (let x = 0 in {});", | 7293 "for (let x = 0 in {});", |
7295 NULL | 7294 NULL |
7296 }; | 7295 }; |
7297 // clang-format on | 7296 // clang-format on |
7298 | 7297 |
7299 static const ParserFlag always_flags[] = {kAllowHarmonyForIn}; | 7298 static const ParserFlag always_flags[] = {kAllowHarmonyForIn}; |
7300 RunParserSyncTest(context_data, error_data, kError, nullptr, 0, always_flags, | 7299 RunParserSyncTest(context_data, error_data, kError, nullptr, 0, always_flags, |
7301 arraysize(always_flags)); | 7300 arraysize(always_flags)); |
7302 } | 7301 } |
OLD | NEW |