| OLD | NEW |
| 1 // Copyright 2007-2008 the V8 project authors. All rights reserved. | 1 // Copyright 2007-2008 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 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 227 // Test global declaration of a property the interceptor doesn't know | 227 // Test global declaration of a property the interceptor doesn't know |
| 228 // about and doesn't handle. | 228 // about and doesn't handle. |
| 229 TEST(Unknown) { | 229 TEST(Unknown) { |
| 230 HandleScope scope(CcTest::isolate()); | 230 HandleScope scope(CcTest::isolate()); |
| 231 | 231 |
| 232 { DeclarationContext context; | 232 { DeclarationContext context; |
| 233 context.Check("var x; x", | 233 context.Check("var x; x", |
| 234 1, // access | 234 1, // access |
| 235 1, // declaration | 235 1, // declaration |
| 236 2, // declaration + initialization | 236 2, // declaration + initialization |
| 237 EXPECT_RESULT, Undefined()); | 237 EXPECT_RESULT, Undefined(CcTest::isolate())); |
| 238 } | 238 } |
| 239 | 239 |
| 240 { DeclarationContext context; | 240 { DeclarationContext context; |
| 241 context.Check("var x = 0; x", | 241 context.Check("var x = 0; x", |
| 242 1, // access | 242 1, // access |
| 243 2, // declaration + initialization | 243 2, // declaration + initialization |
| 244 2, // declaration + initialization | 244 2, // declaration + initialization |
| 245 EXPECT_RESULT, Number::New(0)); | 245 EXPECT_RESULT, Number::New(0)); |
| 246 } | 246 } |
| 247 | 247 |
| 248 { DeclarationContext context; | 248 { DeclarationContext context; |
| 249 context.Check("function x() { }; x", | 249 context.Check("function x() { }; x", |
| 250 1, // access | 250 1, // access |
| 251 0, | 251 0, |
| 252 0, | 252 0, |
| 253 EXPECT_RESULT); | 253 EXPECT_RESULT); |
| 254 } | 254 } |
| 255 | 255 |
| 256 { DeclarationContext context; | 256 { DeclarationContext context; |
| 257 context.Check("const x; x", | 257 context.Check("const x; x", |
| 258 1, // access | 258 1, // access |
| 259 2, // declaration + initialization | 259 2, // declaration + initialization |
| 260 1, // declaration | 260 1, // declaration |
| 261 EXPECT_RESULT, Undefined()); | 261 EXPECT_RESULT, Undefined(CcTest::isolate())); |
| 262 } | 262 } |
| 263 | 263 |
| 264 { DeclarationContext context; | 264 { DeclarationContext context; |
| 265 // SB 0 - BUG 1213579 |
| 265 context.Check("const x = 0; x", | 266 context.Check("const x = 0; x", |
| 266 1, // access | 267 1, // access |
| 267 2, // declaration + initialization | 268 2, // declaration + initialization |
| 268 1, // declaration | 269 1, // declaration |
| 269 EXPECT_RESULT, Undefined()); // SB 0 - BUG 1213579 | 270 EXPECT_RESULT, Undefined(CcTest::isolate())); |
| 270 } | 271 } |
| 271 } | 272 } |
| 272 | 273 |
| 273 | 274 |
| 274 | 275 |
| 275 class PresentPropertyContext: public DeclarationContext { | 276 class PresentPropertyContext: public DeclarationContext { |
| 276 protected: | 277 protected: |
| 277 virtual v8::Handle<Integer> Query(Local<String> key) { | 278 virtual v8::Handle<Integer> Query(Local<String> key) { |
| 278 return Integer::New(v8::None); | 279 return Integer::New(v8::None); |
| 279 } | 280 } |
| (...skipping 26 matching lines...) Expand all Loading... |
| 306 0, | 307 0, |
| 307 0, | 308 0, |
| 308 EXPECT_RESULT); | 309 EXPECT_RESULT); |
| 309 } | 310 } |
| 310 | 311 |
| 311 { PresentPropertyContext context; | 312 { PresentPropertyContext context; |
| 312 context.Check("const x; x", | 313 context.Check("const x; x", |
| 313 1, // access | 314 1, // access |
| 314 1, // initialization | 315 1, // initialization |
| 315 1, // (re-)declaration | 316 1, // (re-)declaration |
| 316 EXPECT_RESULT, Undefined()); | 317 EXPECT_RESULT, Undefined(CcTest::isolate())); |
| 317 } | 318 } |
| 318 | 319 |
| 319 { PresentPropertyContext context; | 320 { PresentPropertyContext context; |
| 320 context.Check("const x = 0; x", | 321 context.Check("const x = 0; x", |
| 321 1, // access | 322 1, // access |
| 322 1, // initialization | 323 1, // initialization |
| 323 1, // (re-)declaration | 324 1, // (re-)declaration |
| 324 EXPECT_RESULT, Number::New(0)); | 325 EXPECT_RESULT, Number::New(0)); |
| 325 } | 326 } |
| 326 } | 327 } |
| 327 | 328 |
| 328 | 329 |
| 329 | 330 |
| 330 class AbsentPropertyContext: public DeclarationContext { | 331 class AbsentPropertyContext: public DeclarationContext { |
| 331 protected: | 332 protected: |
| 332 virtual v8::Handle<Integer> Query(Local<String> key) { | 333 virtual v8::Handle<Integer> Query(Local<String> key) { |
| 333 return v8::Handle<Integer>(); | 334 return v8::Handle<Integer>(); |
| 334 } | 335 } |
| 335 }; | 336 }; |
| 336 | 337 |
| 337 | 338 |
| 338 TEST(Absent) { | 339 TEST(Absent) { |
| 339 HandleScope scope(CcTest::isolate()); | 340 v8::Isolate* isolate = CcTest::isolate(); |
| 341 HandleScope scope(isolate); |
| 340 | 342 |
| 341 { AbsentPropertyContext context; | 343 { AbsentPropertyContext context; |
| 342 context.Check("var x; x", | 344 context.Check("var x; x", |
| 343 1, // access | 345 1, // access |
| 344 1, // declaration | 346 1, // declaration |
| 345 2, // declaration + initialization | 347 2, // declaration + initialization |
| 346 EXPECT_RESULT, Undefined()); | 348 EXPECT_RESULT, Undefined(isolate)); |
| 347 } | 349 } |
| 348 | 350 |
| 349 { AbsentPropertyContext context; | 351 { AbsentPropertyContext context; |
| 350 context.Check("var x = 0; x", | 352 context.Check("var x = 0; x", |
| 351 1, // access | 353 1, // access |
| 352 2, // declaration + initialization | 354 2, // declaration + initialization |
| 353 2, // declaration + initialization | 355 2, // declaration + initialization |
| 354 EXPECT_RESULT, Number::New(0)); | 356 EXPECT_RESULT, Number::New(0)); |
| 355 } | 357 } |
| 356 | 358 |
| 357 { AbsentPropertyContext context; | 359 { AbsentPropertyContext context; |
| 358 context.Check("function x() { }; x", | 360 context.Check("function x() { }; x", |
| 359 1, // access | 361 1, // access |
| 360 0, | 362 0, |
| 361 0, | 363 0, |
| 362 EXPECT_RESULT); | 364 EXPECT_RESULT); |
| 363 } | 365 } |
| 364 | 366 |
| 365 { AbsentPropertyContext context; | 367 { AbsentPropertyContext context; |
| 366 context.Check("const x; x", | 368 context.Check("const x; x", |
| 367 1, // access | 369 1, // access |
| 368 2, // declaration + initialization | 370 2, // declaration + initialization |
| 369 1, // declaration | 371 1, // declaration |
| 370 EXPECT_RESULT, Undefined()); | 372 EXPECT_RESULT, Undefined(isolate)); |
| 371 } | 373 } |
| 372 | 374 |
| 373 { AbsentPropertyContext context; | 375 { AbsentPropertyContext context; |
| 374 context.Check("const x = 0; x", | 376 context.Check("const x = 0; x", |
| 375 1, // access | 377 1, // access |
| 376 2, // declaration + initialization | 378 2, // declaration + initialization |
| 377 1, // declaration | 379 1, // declaration |
| 378 EXPECT_RESULT, Undefined()); // SB 0 - BUG 1213579 | 380 EXPECT_RESULT, Undefined(isolate)); // SB 0 - BUG 1213579 |
| 379 } | 381 } |
| 380 | 382 |
| 381 { AbsentPropertyContext context; | 383 { AbsentPropertyContext context; |
| 382 context.Check("if (false) { var x = 0 }; x", | 384 context.Check("if (false) { var x = 0 }; x", |
| 383 1, // access | 385 1, // access |
| 384 1, // declaration | 386 1, // declaration |
| 385 1, // declaration + initialization | 387 1, // declaration + initialization |
| 386 EXPECT_RESULT, Undefined()); | 388 EXPECT_RESULT, Undefined(isolate)); |
| 387 } | 389 } |
| 388 } | 390 } |
| 389 | 391 |
| 390 | 392 |
| 391 | 393 |
| 392 class AppearingPropertyContext: public DeclarationContext { | 394 class AppearingPropertyContext: public DeclarationContext { |
| 393 public: | 395 public: |
| 394 enum State { | 396 enum State { |
| 395 DECLARE, | 397 DECLARE, |
| 396 INITIALIZE_IF_ASSIGN, | 398 INITIALIZE_IF_ASSIGN, |
| (...skipping 29 matching lines...) Expand all Loading... |
| 426 | 428 |
| 427 | 429 |
| 428 TEST(Appearing) { | 430 TEST(Appearing) { |
| 429 HandleScope scope(CcTest::isolate()); | 431 HandleScope scope(CcTest::isolate()); |
| 430 | 432 |
| 431 { AppearingPropertyContext context; | 433 { AppearingPropertyContext context; |
| 432 context.Check("var x; x", | 434 context.Check("var x; x", |
| 433 1, // access | 435 1, // access |
| 434 1, // declaration | 436 1, // declaration |
| 435 2, // declaration + initialization | 437 2, // declaration + initialization |
| 436 EXPECT_RESULT, Undefined()); | 438 EXPECT_RESULT, Undefined(CcTest::isolate())); |
| 437 } | 439 } |
| 438 | 440 |
| 439 { AppearingPropertyContext context; | 441 { AppearingPropertyContext context; |
| 440 context.Check("var x = 0; x", | 442 context.Check("var x = 0; x", |
| 441 1, // access | 443 1, // access |
| 442 2, // declaration + initialization | 444 2, // declaration + initialization |
| 443 2, // declaration + initialization | 445 2, // declaration + initialization |
| 444 EXPECT_RESULT, Number::New(0)); | 446 EXPECT_RESULT, Number::New(0)); |
| 445 } | 447 } |
| 446 | 448 |
| 447 { AppearingPropertyContext context; | 449 { AppearingPropertyContext context; |
| 448 context.Check("function x() { }; x", | 450 context.Check("function x() { }; x", |
| 449 1, // access | 451 1, // access |
| 450 0, | 452 0, |
| 451 0, | 453 0, |
| 452 EXPECT_RESULT); | 454 EXPECT_RESULT); |
| 453 } | 455 } |
| 454 | 456 |
| 455 { AppearingPropertyContext context; | 457 { AppearingPropertyContext context; |
| 456 context.Check("const x; x", | 458 context.Check("const x; x", |
| 457 1, // access | 459 1, // access |
| 458 2, // declaration + initialization | 460 2, // declaration + initialization |
| 459 1, // declaration | 461 1, // declaration |
| 460 EXPECT_RESULT, Undefined()); | 462 EXPECT_RESULT, Undefined(CcTest::isolate())); |
| 461 } | 463 } |
| 462 | 464 |
| 463 { AppearingPropertyContext context; | 465 { AppearingPropertyContext context; |
| 464 context.Check("const x = 0; x", | 466 context.Check("const x = 0; x", |
| 465 1, // access | 467 1, // access |
| 466 2, // declaration + initialization | 468 2, // declaration + initialization |
| 467 1, // declaration | 469 1, // declaration |
| 468 EXPECT_RESULT, Undefined()); | 470 EXPECT_RESULT, Undefined(CcTest::isolate())); |
| 469 // Result is undefined because declaration succeeded but | 471 // Result is undefined because declaration succeeded but |
| 470 // initialization to 0 failed (due to context behavior). | 472 // initialization to 0 failed (due to context behavior). |
| 471 } | 473 } |
| 472 } | 474 } |
| 473 | 475 |
| 474 | 476 |
| 475 | 477 |
| 476 class ReappearingPropertyContext: public DeclarationContext { | 478 class ReappearingPropertyContext: public DeclarationContext { |
| 477 public: | 479 public: |
| 478 enum State { | 480 enum State { |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 518 | 520 |
| 519 | 521 |
| 520 TEST(Reappearing) { | 522 TEST(Reappearing) { |
| 521 HandleScope scope(CcTest::isolate()); | 523 HandleScope scope(CcTest::isolate()); |
| 522 | 524 |
| 523 { ReappearingPropertyContext context; | 525 { ReappearingPropertyContext context; |
| 524 context.Check("const x; var x = 0", | 526 context.Check("const x; var x = 0", |
| 525 0, | 527 0, |
| 526 3, // const declaration+initialization, var initialization | 528 3, // const declaration+initialization, var initialization |
| 527 3, // 2 x declaration + var initialization | 529 3, // 2 x declaration + var initialization |
| 528 EXPECT_RESULT, Undefined()); | 530 EXPECT_RESULT, Undefined(CcTest::isolate())); |
| 529 } | 531 } |
| 530 } | 532 } |
| 531 | 533 |
| 532 | 534 |
| 533 | 535 |
| 534 class ExistsInPrototypeContext: public DeclarationContext { | 536 class ExistsInPrototypeContext: public DeclarationContext { |
| 535 protected: | 537 protected: |
| 536 virtual v8::Handle<Integer> Query(Local<String> key) { | 538 virtual v8::Handle<Integer> Query(Local<String> key) { |
| 537 // Let it seem that the property exists in the prototype object. | 539 // Let it seem that the property exists in the prototype object. |
| 538 return Integer::New(v8::None); | 540 return Integer::New(v8::None); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 557 0, | 559 0, |
| 558 0, | 560 0, |
| 559 EXPECT_RESULT, Number::New(87)); | 561 EXPECT_RESULT, Number::New(87)); |
| 560 } | 562 } |
| 561 | 563 |
| 562 { ExistsInPrototypeContext context; | 564 { ExistsInPrototypeContext context; |
| 563 context.Check("var x; x", | 565 context.Check("var x; x", |
| 564 0, | 566 0, |
| 565 0, | 567 0, |
| 566 0, | 568 0, |
| 567 EXPECT_RESULT, Undefined()); | 569 EXPECT_RESULT, Undefined(CcTest::isolate())); |
| 568 } | 570 } |
| 569 | 571 |
| 570 { ExistsInPrototypeContext context; | 572 { ExistsInPrototypeContext context; |
| 571 context.Check("var x = 0; x", | 573 context.Check("var x = 0; x", |
| 572 0, | 574 0, |
| 573 0, | 575 0, |
| 574 0, | 576 0, |
| 575 EXPECT_RESULT, Number::New(0)); | 577 EXPECT_RESULT, Number::New(0)); |
| 576 } | 578 } |
| 577 | 579 |
| 578 { ExistsInPrototypeContext context; | 580 { ExistsInPrototypeContext context; |
| 579 context.Check("const x; x", | 581 context.Check("const x; x", |
| 580 0, | 582 0, |
| 581 0, | 583 0, |
| 582 0, | 584 0, |
| 583 EXPECT_RESULT, Undefined()); | 585 EXPECT_RESULT, Undefined(CcTest::isolate())); |
| 584 } | 586 } |
| 585 | 587 |
| 586 { ExistsInPrototypeContext context; | 588 { ExistsInPrototypeContext context; |
| 587 context.Check("const x = 0; x", | 589 context.Check("const x = 0; x", |
| 588 0, | 590 0, |
| 589 0, | 591 0, |
| 590 0, | 592 0, |
| 591 EXPECT_RESULT, Number::New(0)); | 593 EXPECT_RESULT, Number::New(0)); |
| 592 } | 594 } |
| 593 } | 595 } |
| (...skipping 16 matching lines...) Expand all Loading... |
| 610 | 612 |
| 611 TEST(AbsentInPrototype) { | 613 TEST(AbsentInPrototype) { |
| 612 i::FLAG_es52_globals = true; | 614 i::FLAG_es52_globals = true; |
| 613 HandleScope scope(CcTest::isolate()); | 615 HandleScope scope(CcTest::isolate()); |
| 614 | 616 |
| 615 { AbsentInPrototypeContext context; | 617 { AbsentInPrototypeContext context; |
| 616 context.Check("if (false) { var x = 0; }; x", | 618 context.Check("if (false) { var x = 0; }; x", |
| 617 0, | 619 0, |
| 618 0, | 620 0, |
| 619 0, | 621 0, |
| 620 EXPECT_RESULT, Undefined()); | 622 EXPECT_RESULT, Undefined(CcTest::isolate())); |
| 621 } | 623 } |
| 622 } | 624 } |
| 623 | 625 |
| 624 | 626 |
| 625 | 627 |
| 626 class ExistsInHiddenPrototypeContext: public DeclarationContext { | 628 class ExistsInHiddenPrototypeContext: public DeclarationContext { |
| 627 public: | 629 public: |
| 628 ExistsInHiddenPrototypeContext() { | 630 ExistsInHiddenPrototypeContext() { |
| 629 hidden_proto_ = FunctionTemplate::New(); | 631 hidden_proto_ = FunctionTemplate::New(); |
| 630 hidden_proto_->SetHiddenPrototype(true); | 632 hidden_proto_->SetHiddenPrototype(true); |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 682 0, | 684 0, |
| 683 EXPECT_RESULT); | 685 EXPECT_RESULT); |
| 684 } | 686 } |
| 685 | 687 |
| 686 // TODO(mstarzinger): The semantics of global const is vague. | 688 // TODO(mstarzinger): The semantics of global const is vague. |
| 687 { ExistsInHiddenPrototypeContext context; | 689 { ExistsInHiddenPrototypeContext context; |
| 688 context.Check("const x; x", | 690 context.Check("const x; x", |
| 689 0, | 691 0, |
| 690 0, | 692 0, |
| 691 1, // (re-)declaration | 693 1, // (re-)declaration |
| 692 EXPECT_RESULT, Undefined()); | 694 EXPECT_RESULT, Undefined(CcTest::isolate())); |
| 693 } | 695 } |
| 694 | 696 |
| 695 // TODO(mstarzinger): The semantics of global const is vague. | 697 // TODO(mstarzinger): The semantics of global const is vague. |
| 696 { ExistsInHiddenPrototypeContext context; | 698 { ExistsInHiddenPrototypeContext context; |
| 697 context.Check("const x = 0; x", | 699 context.Check("const x = 0; x", |
| 698 0, | 700 0, |
| 699 0, | 701 0, |
| 700 1, // (re-)declaration | 702 1, // (re-)declaration |
| 701 EXPECT_RESULT, Number::New(0)); | 703 EXPECT_RESULT, Number::New(0)); |
| 702 } | 704 } |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 847 SimpleContext context; | 849 SimpleContext context; |
| 848 context.Check(firsts[i], EXPECT_RESULT, Number::New(1)); | 850 context.Check(firsts[i], EXPECT_RESULT, Number::New(1)); |
| 849 // TODO(rossberg): All tests should actually be errors in Harmony, | 851 // TODO(rossberg): All tests should actually be errors in Harmony, |
| 850 // but we currently do not detect the cases where the first declaration | 852 // but we currently do not detect the cases where the first declaration |
| 851 // is not lexical. | 853 // is not lexical. |
| 852 context.Check(seconds[j], | 854 context.Check(seconds[j], |
| 853 i < 2 ? EXPECT_RESULT : EXPECT_ERROR, Number::New(2)); | 855 i < 2 ? EXPECT_RESULT : EXPECT_ERROR, Number::New(2)); |
| 854 } | 856 } |
| 855 } | 857 } |
| 856 } | 858 } |
| OLD | NEW |