| 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 2212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2223 | 2223 |
| 2224 TEST(ErrorsObjectLiteralChecking) { | 2224 TEST(ErrorsObjectLiteralChecking) { |
| 2225 const char* context_data[][2] = { | 2225 const char* context_data[][2] = { |
| 2226 {"\"use strict\"; var myobject = {", "};"}, | 2226 {"\"use strict\"; var myobject = {", "};"}, |
| 2227 {"var myobject = {", "};"}, | 2227 {"var myobject = {", "};"}, |
| 2228 { NULL, NULL } | 2228 { NULL, NULL } |
| 2229 }; | 2229 }; |
| 2230 | 2230 |
| 2231 const char* statement_data[] = { | 2231 const char* statement_data[] = { |
| 2232 "foo: 1, get foo() {}", | 2232 "foo: 1, get foo() {}", |
| 2233 "foo: 1, set foo() {}", | 2233 "foo: 1, set foo(v) {}", |
| 2234 "\"foo\": 1, get \"foo\"() {}", | 2234 "\"foo\": 1, get \"foo\"() {}", |
| 2235 "\"foo\": 1, set \"foo\"() {}", | 2235 "\"foo\": 1, set \"foo\"(v) {}", |
| 2236 "1: 1, get 1() {}", | 2236 "1: 1, get 1() {}", |
| 2237 "1: 1, set 1() {}", | 2237 "1: 1, set 1() {}", |
| 2238 // It's counter-intuitive, but these collide too (even in classic | 2238 // It's counter-intuitive, but these collide too (even in classic |
| 2239 // mode). Note that we can have "foo" and foo as properties in classic mode, | 2239 // mode). Note that we can have "foo" and foo as properties in classic mode, |
| 2240 // but we cannot have "foo" and get foo, or foo and get "foo". | 2240 // but we cannot have "foo" and get foo, or foo and get "foo". |
| 2241 "foo: 1, get \"foo\"() {}", | 2241 "foo: 1, get \"foo\"() {}", |
| 2242 "foo: 1, set \"foo\"() {}", | 2242 "foo: 1, set \"foo\"(v) {}", |
| 2243 "\"foo\": 1, get foo() {}", | 2243 "\"foo\": 1, get foo() {}", |
| 2244 "\"foo\": 1, set foo() {}", | 2244 "\"foo\": 1, set foo(v) {}", |
| 2245 "1: 1, get \"1\"() {}", | 2245 "1: 1, get \"1\"() {}", |
| 2246 "1: 1, set \"1\"() {}", | 2246 "1: 1, set \"1\"() {}", |
| 2247 "\"1\": 1, get 1() {}" | 2247 "\"1\": 1, get 1() {}" |
| 2248 "\"1\": 1, set 1() {}" | 2248 "\"1\": 1, set 1(v) {}" |
| 2249 // Wrong number of parameters |
| 2250 "get bar(x) {}", |
| 2251 "get bar(x, y) {}", |
| 2252 "set bar() {}", |
| 2253 "set bar(x, y) {}", |
| 2249 // Parsing FunctionLiteral for getter or setter fails | 2254 // Parsing FunctionLiteral for getter or setter fails |
| 2250 "get foo( +", | 2255 "get foo( +", |
| 2251 "get foo() \"error\"", | 2256 "get foo() \"error\"", |
| 2252 NULL | 2257 NULL |
| 2253 }; | 2258 }; |
| 2254 | 2259 |
| 2255 RunParserSyncTest(context_data, statement_data, kError); | 2260 RunParserSyncTest(context_data, statement_data, kError); |
| 2256 } | 2261 } |
| 2257 | 2262 |
| 2258 | 2263 |
| 2259 TEST(NoErrorsObjectLiteralChecking) { | 2264 TEST(NoErrorsObjectLiteralChecking) { |
| 2260 const char* context_data[][2] = { | 2265 const char* context_data[][2] = { |
| 2261 {"var myobject = {", "};"}, | 2266 {"var myobject = {", "};"}, |
| 2262 {"\"use strict\"; var myobject = {", "};"}, | 2267 {"\"use strict\"; var myobject = {", "};"}, |
| 2263 { NULL, NULL } | 2268 { NULL, NULL } |
| 2264 }; | 2269 }; |
| 2265 | 2270 |
| 2266 const char* statement_data[] = { | 2271 const char* statement_data[] = { |
| 2267 "foo: 1, bar: 2", | 2272 "foo: 1, bar: 2", |
| 2268 "\"foo\": 1, \"bar\": 2", | 2273 "\"foo\": 1, \"bar\": 2", |
| 2269 "1: 1, 2: 2", | 2274 "1: 1, 2: 2", |
| 2270 // Syntax: IdentifierName ':' AssignmentExpression | 2275 // Syntax: IdentifierName ':' AssignmentExpression |
| 2271 "foo: bar = 5 + baz", | 2276 "foo: bar = 5 + baz", |
| 2272 // Syntax: 'get' (IdentifierName | String | Number) FunctionLiteral | 2277 // Syntax: 'get' PropertyName '(' ')' '{' FunctionBody '}' |
| 2273 "get foo() {}", | 2278 "get foo() {}", |
| 2274 "get \"foo\"() {}", | 2279 "get \"foo\"() {}", |
| 2275 "get 1() {}", | 2280 "get 1() {}", |
| 2276 // Syntax: 'set' (IdentifierName | String | Number) FunctionLiteral | 2281 // Syntax: 'set' PropertyName '(' PropertySetParameterList ')' |
| 2277 "set foo() {}", | 2282 // '{' FunctionBody '}' |
| 2278 "set \"foo\"() {}", | 2283 "set foo(v) {}", |
| 2279 "set 1() {}", | 2284 "set \"foo\"(v) {}", |
| 2285 "set 1(v) {}", |
| 2280 // Non-colliding getters and setters -> no errors | 2286 // Non-colliding getters and setters -> no errors |
| 2281 "foo: 1, get bar() {}", | 2287 "foo: 1, get bar() {}", |
| 2282 "foo: 1, set bar(b) {}", | 2288 "foo: 1, set bar(v) {}", |
| 2283 "\"foo\": 1, get \"bar\"() {}", | 2289 "\"foo\": 1, get \"bar\"() {}", |
| 2284 "\"foo\": 1, set \"bar\"() {}", | 2290 "\"foo\": 1, set \"bar\"(v) {}", |
| 2285 "1: 1, get 2() {}", | 2291 "1: 1, get 2() {}", |
| 2286 "1: 1, set 2() {}", | 2292 "1: 1, set 2(v) {}", |
| 2287 // Weird number of parameters -> no errors | |
| 2288 "get bar() {}, set bar() {}", | |
| 2289 "get bar(x) {}, set bar(x) {}", | |
| 2290 "get bar(x, y) {}, set bar(x, y) {}", | |
| 2291 // Keywords, future reserved and strict future reserved are also allowed as | 2293 // Keywords, future reserved and strict future reserved are also allowed as |
| 2292 // property names. | 2294 // property names. |
| 2293 "if: 4", | 2295 "if: 4", |
| 2294 "interface: 5", | 2296 "interface: 5", |
| 2295 "super: 6", | 2297 "super: 6", |
| 2296 "eval: 7", | 2298 "eval: 7", |
| 2297 "arguments: 8", | 2299 "arguments: 8", |
| 2298 NULL | 2300 NULL |
| 2299 }; | 2301 }; |
| 2300 | 2302 |
| (...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2540 v8::Local<v8::String> source = | 2542 v8::Local<v8::String> source = |
| 2541 v8::String::NewFromTwoByte(isolate, two_byte_source); | 2543 v8::String::NewFromTwoByte(isolate, two_byte_source); |
| 2542 v8::Local<v8::Value> result = CompileRun(source); | 2544 v8::Local<v8::Value> result = CompileRun(source); |
| 2543 CHECK(result->IsString()); | 2545 CHECK(result->IsString()); |
| 2544 v8::Local<v8::String> expected_name = | 2546 v8::Local<v8::String> expected_name = |
| 2545 v8::String::NewFromTwoByte(isolate, two_byte_name); | 2547 v8::String::NewFromTwoByte(isolate, two_byte_name); |
| 2546 CHECK(result->Equals(expected_name)); | 2548 CHECK(result->Equals(expected_name)); |
| 2547 i::DeleteArray(two_byte_source); | 2549 i::DeleteArray(two_byte_source); |
| 2548 i::DeleteArray(two_byte_name); | 2550 i::DeleteArray(two_byte_name); |
| 2549 } | 2551 } |
| OLD | NEW |